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 tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
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