08. januar 2004 - 19:10
Der er
63 kommentarer og 1 løsning
MySQL begynder script.
Jeg er praktisk taget meget nybegynder med C++ men mangler et simpelt script til at connecte til en MySQL database. Der må gerne være et simpelt eksempel til: SELECT UPDATE DELETE Hvis der skal bruges ekstra filer må der gerne være en forklaring på hvordan jeg finder og bruger dette.
Annonceindlæg fra DE-CIX
08. januar 2004 - 19:27
#1
#include <stdio.h> #include <stdlib.h> #include "mysql.h" int main() { MYSQL *handle; MYSQL_RES *result; MYSQL_ROW row; int nfields; int *l; int i; handle= mysql_init(NULL); if(handle == NULL) { printf("MySQL error: %s", mysql_error(handle)); exit(1); } if(!mysql_real_connect(handle, "localhost", "", "", "Test", 0, NULL, 0)) { printf("MySQL error: %s", mysql_error(handle)); exit(1); } mysql_query(handle, "SELECT * FROM T1"); result = mysql_store_result(handle); nfields = mysql_num_fields(result); while ((row = mysql_fetch_row(result))) { l = (int *)mysql_fetch_lengths(result); for (i=0; i<nfields; i++) { printf(" %.*s", l[i], row[i] ? row[i] : "NULL"); } printf("\n"); } mysql_free_result(result); mysql_close(handle); return 0; }
08. januar 2004 - 19:33
#2
Den laver nogle fejl.. [C++ Error] Unit1.cpp(4): E2209 Unable to open include file 'mysql.h' [C++ Error] Unit1.cpp(8): E2451 Undefined symbol 'MYSQL' [C++ Error] Unit1.cpp(8): E2451 Undefined symbol 'handle' [C++ Error] Unit1.cpp(9): E2451 Undefined symbol 'MYSQL_RES' osv..
08. januar 2004 - 19:37
#3
Jeg fandt filen.. Men så laver den en anden fejl.. [C++ Error] mysql_com.h(116): E2303 Type name expected [C++ Error] mysql_com.h(180): E2147 'SOCKET' cannot start a parameter declaration [C++ Warning] Unit1.cpp(28): W8060 Possibly incorrect assignment
08. januar 2004 - 19:41
#4
Det problem kender jeg ! #define SOCKET int #include "mysql.h" bør løse det !
08. januar 2004 - 19:43
#5
Hvor skal det stå?
08. januar 2004 - 19:49
#6
Hvis jeg indsætter det i min header får jeg flere fejl.. [C++ Warning] Unit1.cpp(29): W8060 Possibly incorrect assignment [Linker Error] Unresolved external 'mysql_init' referenced from C:\PROGRAMMER\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ [Linker Error] Unresolved external 'mysql_real_connect' referenced from C:\PROGRAMMER\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ [Linker Error] Unresolved external 'mysql_error' referenced from C:\PROGRAMMER\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ [Linker Error] Unresolved external 'mysql_query' referenced from C:\PROGRAMMER\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ osv..
08. januar 2004 - 19:57
#7
Den linie med #define skal indsætte slige over den #include du allerede har.
08. januar 2004 - 19:57
#8
Link fejlene skyldes at du skal linke mod: mysqlclient.lib
08. januar 2004 - 19:58
#9
Altså: #include <stdio.h> #include <stdlib.h> #define SOCKET int #include "mysql.h" int main() { MYSQL *handle; MYSQL_RES *result; MYSQL_ROW row; int nfields; int *l; int i; handle= mysql_init(NULL); if(handle == NULL) { printf("MySQL error: %s", mysql_error(handle)); exit(1); } if(!mysql_real_connect(handle, "localhost", "", "", "Test", 0, NULL, 0)) { printf("MySQL error: %s", mysql_error(handle)); exit(1); } mysql_query(handle, "SELECT * FROM T1"); result = mysql_store_result(handle); nfields = mysql_num_fields(result); while ((row = mysql_fetch_row(result))) { l = (int *)mysql_fetch_lengths(result); for (i=0; i<nfields; i++) { printf(" %.*s", l[i], row[i] ? row[i] : "NULL"); } printf("\n"); } mysql_free_result(result); mysql_close(handle); return 0; }
08. januar 2004 - 20:15
#10
ved den kode laver den fejlene [Linker Error] Unresolved external 'mysql_init' referenced from C:\PROGRAMMER\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ [Linker Error] Unresolved external 'mysql_real_connect' referenced from C:\PROGRAMMER\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ [Linker Error] Unresolved external 'mysql_error' referenced from C:\PROGRAMMER\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ [Linker Error] Unresolved external 'mysql_query' referenced from C:\PROGRAMMER\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ osv..
08. januar 2004 - 20:19
#11
Du skal linke mod mysqlclient.lib !
08. januar 2004 - 21:19
#12
Det virker slet ikke når jeg gør det.. Den laver fejl med en masse tegn.. [C++ Error] mysqlclient.lib(2): E2206 Illegal character '`' (0x60) [C++ Error] mysqlclient.lib(3): E2206 Illegal character '' (0x2)
08. januar 2004 - 21:28
#13
Der er vist et eller andet med Borland og lib. Prøv med: coff2omf \mysql\lib\opt\libmysql.lib \mysql\borlib\opt\libmysql.lib og så link mod den sidste. (coff2omf bør ligge et sted i C++Builder dir)
08. januar 2004 - 21:30
#14
ok.. den der forstod jeg ikke helt. Hvor skal det skrives henne?
08. januar 2004 - 21:34
#15
åben DOS box PATH=\some\dir\in\C++Builder\bin;%PATH; md \wheremysqlis\borlib\opt coff2omf \wheremysqlis\lib\opt\libmysql.lib \wheremysqlis\borlib\opt\libmysql.lib
08. januar 2004 - 21:36
#16
Her laver den samme fejl som før.. Filen består stadigt bare af an masse underlige tegn.
08. januar 2004 - 21:43
#17
Nu skrev du var ny til C++, så jeg vil tillade mig at spørge: hvordan angiver du at den fil skal linkes med ?
08. januar 2004 - 21:45
#18
lavede bare en include. Men det kan jeg høre nok ikke er rigtigt. Arbejder normalt i PHP og javascript..
08. januar 2004 - 21:47
#19
Nej. Nu kender jeg ikke C++Builder, men du skal ind i noget options og angive at der skal linkes med den fil.
08. januar 2004 - 21:51
#20
Ahh, jeg kigger lige på det. Ellers må jeg lige have fat i en kammerat som ved det..
08. januar 2004 - 21:52
#21
Måske skal du bare adde lib til projektet. Jeg mener at vi har et par C++Builder hajer her - måske kigger de forbi.
08. januar 2004 - 21:54
#22
Hvilken compiler kan jeg ellers bruge?
08. januar 2004 - 21:56
#23
Der er jo masser af compilere. Jeg har mest brugt MS BC++ som IDE.
08. januar 2004 - 21:57
#24
VC++
08. januar 2004 - 21:57
#25
Er den gratis? Om ikke andet hvor henter jeg den så?
08. januar 2004 - 22:04
#26
Nej - det er den ikke.
08. januar 2004 - 22:05
#27
Men du må også kunne tilføje det lib til C++Builder - det er en hel elementær ting.
08. januar 2004 - 22:09
#28
Jeg fandt en sjov lille ting på nettet ! Det siges at man kan bruge: #pragma link "xyz.lib" til at linke mod et lib med C++Builder.
09. januar 2004 - 12:33
#29
Man kan også linke på denne måde: #pragma comment(lib,"library.lib")
09. januar 2004 - 13:08
#30
Jeg er også noob på MYSQL området, hvor finder mysql.h og mysqlclient.lib henne? Har nemlig ikke installeret MYSQL på min computer! (men har en MYSQL remote)
09. januar 2004 - 13:15
#31
Du downloader og installerer en MySQL server lokalt. MySQL C API (mysql.h og mysqlclient.lib) kommer med den. Du kan jo bare lade være med at starte serveren.
09. januar 2004 - 14:35
#32
Den laver nu fejlen: Project1.exe - komponent ikke fundet Dette program kunne ikke startes, fordi LIBMYSQL.DLL ikke blev fundet
09. januar 2004 - 14:56
#33
Du skal så have tilføjet det directory som indeholder LIBMYSQL.DLL (eller så skal den være i samme directory som din EXE).
09. januar 2004 - 15:02
#34
Du skal så have tilføjet det directory som indeholder LIBMYSQL.DLL til PATH (eller så skal den være i samme directory som din EXE).
09. januar 2004 - 15:17
#35
Er der ikke en venlig sjæl som gider sende disse 3 filer i en email til: jakobdo[SLET]@hotmail[SLET].com
09. januar 2004 - 15:24
#36
Hvis ikke andre vil skal jeg nok gøre det i aften.
09. januar 2004 - 15:27
#37
Takker... (prøver dog lige at finde dem)
09. januar 2004 - 15:27
#38
Da det er nu jeg sidder og leger, og så skal jeg jo gerne have dem! NU...
09. januar 2004 - 15:29
#39
Så fik jeg endeligt lavet en forbindelse. Det jeg bare mangler er lidt info om hvad de forskellige ting i scriptet gør. Kan gennemskue det meste, men %s forstår jeg ikke samt denne linie: printf(" %.*s", l[i], row[i] ? row[i] : "NULL");
09. januar 2004 - 15:39
#40
Udskriv en streng med maksimal længde l[i] hvis row[i] != NULL så udskriv den eller udskriv "NULL"
09. januar 2004 - 15:40
#41
09. januar 2004 - 15:50
#42
Jeg får denne fejl: C:\Tools>bcc32 mysql.cpp Borland C++ 5.6 for Win32 Copyright (c) 1993, 2002 Borland mysql.cpp: Warning W8060 mysql.cpp 33: Possibly incorrect assignment in function main() Turbo Incremental Link 5.60 Copyright (c) 1997-2002 Borland Error: 'C:\TOOLS\MYSQLCLIENT.LIB' contains invalid OMF record, type 0x21 (possibly COFF) Filen mysqlclient.lib ligger i samme dir, som min source kode!
09. januar 2004 - 15:50
#43
Har forresten fundet dem! :o)
09. januar 2004 - 15:51
#44
det var denne del af det jeg ikke forstod: " %.*s"
09. januar 2004 - 15:56
#45
jakob> mysqlclient.lib er i MS VC++ format - du skal bruge et tool for at konvertere til BCB.
09. januar 2004 - 15:57
#46
dj> Den format er en %s hvor der hentes en max længde fra argumenterne.
09. januar 2004 - 15:58
#47
jakob> Jeg har selv buildet med dne gratis command line BCB med: coff2omf \mysql\lib\opt\libmysql.lib .\libmysql.lib bcc32 -DSOCKET=int -I\mysql\include mysqltest.c libmysql.lib
09. januar 2004 - 15:59
#48
ahhh. Lige en sidste ting.. cout << "Indtast dit navn: "; cin >> navn; mysql_query(handle,"INSERT INTO `test` ( `id` , `navn` ) VALUES ('', `navn`)"); Hvordan indsætter jeg variablen i min sql?
09. januar 2004 - 16:05
#49
Gode gamle sprintf ! Eksempel: char cmd[100]; sprintf(cmd,"INSERT INTO test(id,navn) VALUES ('','%s')","Arne");
09. januar 2004 - 16:06
#50
Kan du give mig en lidt længere forklaring. Kan ikke lige gennemskue hvordan den fungere.
09. januar 2004 - 16:11
#51
sprintf virker helt ligesom printf - den skriver bare til et char array fremfor consollen. Nyt eksempel: int id; // noget kode hvor man får en værdi får ID som skal slåes op i databasen char cmd[100]; sprintf(cmd,"SELECT * FROM xyz WHERE id = %d",id); mysql_query(handle,cmd);
09. januar 2004 - 16:12
#52
Den der laver da det samme som den jeg har.. Den indsætter jo ikke min cin >> navn
09. januar 2004 - 16:13
#53
Ahh, fik det til at virke.. cout << "Indtast dit navn: "; cin >> navn; char cmd[100]; sprintf(cmd,"INSERT INTO test(id,navn) VALUES ('','%s')",navn); mysql_query(handle,cmd);
09. januar 2004 - 16:14
#54
16:11:15 indsætter en int på %d pladsen. char navn[50]; cin >> navn; char cmd[100]; sprintf(cmd,"INSERT INTO test(id,navn) VALUES ('','%s')",navn); vil indsætte navn ved %s
09. januar 2004 - 16:17
#55
Kan man lave koden som en tekst streng? char sql[64]; sql = "SELECT * FROM test where id = " . navn . ""; Det var så lidt PHP agtigt, men kan man lave en streng på samme måde i C++ eller skal jeg bruge en sprintf til hver variabel jeg vil indsætte?
09. januar 2004 - 16:23
#56
Du er nærmest nød til at bruge sprintf i C. C++ har lidt flere muligheder. Bl.a.: char navn[100]; ... string cmd = "SELECT * FROM test where id = '" + navn + "'"; mysql_query(handle, cmd.c_str());
09. januar 2004 - 17:15
#57
det er jo meget simpelt.. Takker..
09. januar 2004 - 17:35
#58
Det lader ikke til at jeg kan lave 2 query's efter hinanden. mysql_query(handle,cmd); mysql_query(handle, "SELECT * FROM test"); Er der en måde det skal gøres på?
09. januar 2004 - 19:26
#59
Umiddelbart ser da meget OK ud - hvad fejl får du ?
09. januar 2004 - 19:44
#60
Jeg får ingen fejl. Men kan ikke få det til at virke på andre maskiner.. der mangler en masse .dll filer til at køre programmet.
09. januar 2004 - 19:57
#61
MySQL kræver LIBMYSQL.DLL, programmer lavet med C++Builder kræver afhængig af settings også nogle DLL filer. Prøv evt. at søg her i C/C++ kategorien. Det spørgsmål har været oppe tit. Men da jeg ikke selv bruger C++Builder (aller højest command line versionen), så kan jeg ikke hjælpe mere.
09. december 2004 - 07:49
#62
Jeg finner ikke mysqlclient.lib :-/
09. december 2004 - 08:17
#63
Har du hentet kit med header og lib filer ?
Kurser inden for grundlæggende programmering