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 fra Cognizant
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