Slettet bruger
29. juli 2007 - 23:10
Der er
17 kommentarer og 1 løsning
Mysql Compiling fejl
Jeg bruger en kode jeg har fundet her på Eksperten (lavet af arne_v). Jeg har dog også brugt andre koder, som alle giver samme fejl. Koden ser således ud: #include <windows.h> #include <iostream> #include <mysql.h> #include <stdio.h> #include <stdlib.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", "root", "lol", "bjarke", 0, NULL, 0)) { printf("MySQL error: %s", mysql_error(handle)); exit(1); } mysql_query(handle, "SELECT * FROM test"); 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; } Det min compiler så svare er: example1_mysql.obj : error LNK2001: unresolved external symbol _mysql_close@4 example1_mysql.obj : error LNK2001: unresolved external symbol _mysql_free_result@4 example1_mysql.obj : error LNK2001: unresolved external symbol _mysql_fetch_lengths@4 example1_mysql.obj : error LNK2001: unresolved external symbol _mysql_fetch_row@4 example1_mysql.obj : error LNK2001: unresolved external symbol _mysql_num_fields@4 example1_mysql.obj : error LNK2001: unresolved external symbol _mysql_store_result@4 example1_mysql.obj : error LNK2001: unresolved external symbol _mysql_query@8 example1_mysql.obj : error LNK2001: unresolved external symbol _mysql_real_connect@32 example1_mysql.obj : error LNK2001: unresolved external symbol _mysql_error@4 example1_mysql.obj : error LNK2001: unresolved external symbol _mysql_init@4 Debug/example1_mysql.exe : fatal error LNK1120: 10 unresolved externals Error executing link.exe. example1_mysql.exe - 11 error(s), 0 warning(s) Håber i kan hjælpe //Bjarke
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Du mangler at linked med mysql library.
Slettet bruger
29. juli 2007 - 23:43
#2
Hvem hvor hvad og hvordan :)?
Hvilken compiler/IDE bruger du ?
Udfra fejlen gætter jeg på at det er Microsoft Visual ... Så skal du bare link mod libmysql.lib som kommer med MySQL (plejer at ligge i lib\opt under MySQL).
Slettet bruger
29. juli 2007 - 23:48
#5
Glem det.. har fundet ud af det :) Vil tilgengæld lige spørge hvordan jeg får et specifik frem. Noget i den dur? printf(row[feltnavn]); Mvh Bjarke - Der ikke rigtig ved så meget om C++, men ikke kan tage sig sammen til at lære det før han våger sig ud i mysql :)
Slettet bruger
29. juli 2007 - 23:49
#6
Du er alt for hurtigt arne :) *Vil til gengæld lige spørge hvordan jeg får et specifik felt frem.
Slettet bruger
30. juli 2007 - 00:13
#8
hmm når jeg sætter en MYSQL_FIELD *field; ind så underkender den pludeselig de andre variabler :S C:\C++\example2_mysql.cpp(11) : warning C4101: 'row' : unreferenced local variable C:\C++\example2_mysql.cpp(14) : warning C4101: 'i' : unreferenced local variable C:\C++\example2_mysql.cpp(13) : warning C4101: 'l' : unreferenced local variable MYSQL_ROW row; MYSQL_FIELD *field; int *l; int i;
Slettet bruger
30. juli 2007 - 00:15
#9
Nej nu er den der ikke :P.. Nå. post et svar så får du points :) Men ville være cool hvis du ville kigge lidt på den hvis jeg har spm.. :) Mvh Bjarke
30. juli 2007 - 00:19
#10
Selvfølgelig.
Slettet bruger
30. juli 2007 - 00:26
#11
hehe jeg tror jeg giver op med det der specifik felt navn halløj.. Selv ikke google kan hjælpe mig ;).. Det er bare underligt at skulle bruge et Row nr, når man er vant til andet igennem mange år med asp :)
Slettet bruger
30. juli 2007 - 01:10
#12
Nu har jeg roddet mig ud i noget andet... Du skal bare sige til hvis jeg skal oprette seperat spørgsmål... Jeg skal lave noget replace af mit data.. char line = replace(row[2], "Hej", "Goddag"); cout << line << endl; Jeg får denne fejl.. Og ved ikke rigtig hvad jeg skal gøre C:\C++\Mysql.cpp(57) : error C2440: 'initializing' : cannot convert from 'void' to 'char' Expressions of type void cannot be converted to other types Error executing cl.exe.
30. juli 2007 - 01:43
#13
Jeg ved ikke hvad det er for en replace funktion. Men et gæt ville være: replace(row[2], "Hej", "Goddag"); char *line = row[2]; cout << line << endl;
30. juli 2007 - 01:44
#14
Eller måske bedre: char *line = new char[strlen(row[2]) + 1]; strcpy(line, row[2]); replace(line, "Hej", "Goddag"); cout << line << endl;
30. juli 2007 - 01:53
#15
Kode der udskriver felt navne: #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", "root", "", "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); /* */ for(i=0; i<nfields; i++) { printf(" %s", mysql_fetch_field_direct(result, i)->name); } printf("\n"); /* */ while ((row = mysql_fetch_row(result))) { l = (int *)mysql_fetch_lengths(result); for (i=0; i<nfields; i++) { printf(" %.*s", row[i] ? l[i] : 4, row[i] ? row[i] : "NULL"); } printf("\n"); } mysql_free_result(result); mysql_close(handle); return 0; } Hvis du vil bruge feltnavne (og du bruger C++), så kan du gemme navn til index i en STL map og slå op med den i row.
Slettet bruger
30. juli 2007 - 02:00
#16
Tror jeg formulerede mig forkert ;) Jeg vil ikke have feltnavnene, jeg ville kalde data frem ved hjælp af felt navne. I asp ville dette se således ud: rs = conn.execute("Select * from Tabel") response.write rs("Navn") :) BTW Så virkede din char løsning, helt perfekt.. Takker Mvh Bjarke
Slettet bruger
30. juli 2007 - 02:17
#17
Men det er lige meget :) Det med row nr er faktisk også ret sejt :) Takker for hjælpen, du skal da have noget karma med på vejen :)
30. juli 2007 - 02:25
#18
Jeg vidste godt hvad du mente med navn. Det kan ikke laves helt så nemt i C++, men som jeg antydere i de sidste 2 linier, så kan man lave noget. Her er et mere uddybet eksempel: #include <cstdio> #include <cstdlib> #include <iostream> #include <string> #include <map> using namespace std; #include "mysql.h" int main() { MYSQL *handle= mysql_init(NULL); if(handle == NULL) { cerr << "MySQL error: " << mysql_error(handle) << endl; exit(1); } if(!mysql_real_connect(handle, "localhost", "root", "", "Test", 0, NULL, 0)) { cerr << "MySQL error: " << mysql_error(handle) << endl; exit(1); } mysql_query(handle, "SELECT * FROM t1"); MYSQL_RES *result = mysql_store_result(handle); int nfields = mysql_num_fields(result); /* */ map<string,int> name2index; for(int i=0; i<nfields; i++) { name2index[(mysql_fetch_field_direct(result, i))->name] = i; } /* */ MYSQL_ROW row; char *buf = new char[256]; while ((row = mysql_fetch_row(result))) { int *l = (int *)mysql_fetch_lengths(result); // print F1 strncpy(buf,row[name2index["F1"]] ? row[name2index["F1"]] : "NULL",row[name2index["F1"]] ? l[name2index["F1"]] : 4); buf[row[name2index["F1"]] ? l[name2index["F1"]] : 4] = '\0'; cout << " " << buf; // print F2 strncpy(buf,row[name2index["F2"]] ? row[name2index["F2"]] : "NULL",row[name2index["F2"]] ? l[name2index["F2"]] : 4); buf[row[name2index["F2"]] ? l[name2index["F2"]] : 4] = '\0'; cout << " " << buf; cout << endl; } delete[] buf; mysql_free_result(result); mysql_close(handle); return 0; }
Kurser inden for grundlæggende programmering