16. april 2003 - 11:22
Der er
23 kommentarer og 1 løsning
C++ og mysql.h
Jeg har /lavet/ et lille program til at snakke med mysql. Men når jeg prøvet at kompilere det kommer den med følgende fejl. 118 c:\mysql\include\mysql_com.h syntax error before `;' Hvad gør jeg forkert - jeg har ikke rodet i header filen. Jeg bruger Dev-C++ med gcc! ************************* Her er koden #include <iostream> #include <stdio.h> #include <c:\mysql\include\mysql.h> int main() { MYSQL* mysql_handle = mysql_init(NULL); MYSQL_RES *result; if(mysql_handle == NULL){ cout << "Fejl: " << mysql_error(mysql_handle); exit(1); } if(!mysql_real_connect(mysql_handle, "localhost", "fuzzy", "*masked*", "database", 0, NULL, 0)){ cout << "Fejl: " << mysql_error(mysql_handle); exit(1); } if(!mysql_query(mysql_handle, "SELECT id,data FROM test")){ cout << "Fejl: " << mysql_error(mysql_handle); exit(1); }else{ /*Ingen fejl fundet - viser data*/ MYSQL_ROW row; unsigned int num_fields; unsigned int i; result = mysql_store_result(mysql_handle); num_fields = mysql_num_fields(result); while((row = mysql_fetch_row(result))){ unsigned long *lengths; lengths = mysql_fetch_lengths(result); for(i = 0; i < num_fields; i++){ cout << lengths[i] << row[i] << row[i]; } } } mysql_free_result(result); mysql_close(mysql_handle); return(0); }
Annonceindlæg fra Infor
16. april 2003 - 11:28
#1
Hvad står der omkring linie 118, jeg formoder det er i .h filen, så kan jeg måske finde ud af hvad der går glat.
16. april 2003 - 11:29
#2
#include <c:\mysql\include\mysql.h> skal være: #include "c:\mysql\include\mysql.h"
16. april 2003 - 11:36
#3
Ja.. det er i header filen. her er der dump fra mysql_com.h Tak soreno - har rettet det, hjalp dog ikke! typedef struct st_net { Vio* vio; my_socket fd; /* For Perl DBI/dbd */ <-118 int fcntl; unsigned char *buff,*buff_end,*write_pos,*read_pos; char last_error[MYSQL_ERRMSG_SIZE]; unsigned int last_errno,max_packet,timeout,pkt_nr; unsigned char error; my_bool return_errno,compress; my_bool no_send_ok; /* needed if we are doing several queries in one command ( as in LOAD TABLE ... FROM MASTER ), and do not want to confuse the client with OK at the wrong time */ unsigned long remain_in_buf,length, buf_length, where_b; unsigned int *return_status; unsigned char reading_or_writing; char save_char; } NET;
16. april 2003 - 11:49
#4
Dvs. du får også fejlen med dette stykke kode: #include <iostream> #include <stdio.h> #include "c:\mysql\include\mysql.h" int main() { return 0; } ?
16. april 2003 - 11:51
#5
Hmmm, jeg får samme fejl (blot linie 116). Men hvordan havde du tænkt dig at linke med dev-cpp ? De libs der følger med mysql er til MSVC++
16. april 2003 - 11:52
#6
ja - det gør jeg!
16. april 2003 - 11:54
#7
my_socket er nok ikke defineret, includer en passende socket.h,
16. april 2003 - 11:55
#8
Dvs. at jeg ikke kan bruge dem sammen med gcc??
16. april 2003 - 11:57
#9
segmose << Hvad mener du med en passende socket.h?? Jeg er /lidt/ c++ noob!!
16. april 2003 - 11:58
#10
Mig bekendt findes der ikke en "MSVC++ 2 MinGW lib converter". Men hvis du får det til at virke så sig endeligt til.
16. april 2003 - 12:01
#11
En passende include til socket er: #include <winsock2.h> Så skal du også lige huske at du skal linke med "libws2_32.a" (i "project settings" eller lign.). Muligvis du også skal include windows.h, altså: #include <windows.h> #include <winsock2.h> #include <iostream> #include <stdio.h> #include "c:\mysql\include\mysql.h"
16. april 2003 - 12:11
#12
Bare inkluder windows.h ovenover, så virker det. [jeg har lige testet med dev-cpp]
16. april 2003 - 12:18
#13
Arne: Hvordan linker du ? Jeg får nemlig et par "undefined reference to".
16. april 2003 - 12:27
#14
Jeg compilede kun et dummy eksempel. Det orginale problemr giver ganske rigtigt link fejl. Jeg har kunen fjerne nogen af dem med følgende link options: C:\mysql\lib\opt\mysqlclient.lib C:\mysql\lib\opt\libmysql.lib -lws2_32 men der er stadig nogen tilbage.
16. april 2003 - 12:30
#15
C:\mysql\lib\opt\mysqlclient.lib C:\mysql\lib\opt\libmysql.lib -lws2_32 -lmsvcrt40 og kun 2 tilbage !
16. april 2003 - 12:31
#16
_chkstk hvad f..... det så er ?
16. april 2003 - 13:18
#18
Når jeg includer winsock2.h får jeg en: unbalanced '#endif'.. Måske jeg kunne lokke en af jer til at maile mig et fungerende projekt.
16. april 2003 - 13:35
#19
Det burde være nok bare at inkludere windows.h !
16. april 2003 - 14:42
#20
Jeg kan godt kompilere det nu.. Men når jeg kører programmet kommer den med en read fejl. Med gdb kan jeg se at det er følgende linie der fucker op. MYSQL* mysql_handle = mysql_init(NULL); <kode> /****************************** Connect til mysql ******************************/ #include <iostream> #include <stdio.h> #include <windows.h> #include <mysql.h> int main() { MYSQL* mysql_handle = mysql_init(NULL); MYSQL_RES *result; if(mysql_handle == NULL){ cout << "Fejl: " << mysql_error(mysql_handle); exit(1); } if(!mysql_real_connect(mysql_handle, "localhost", "fuzzy", "*masked*", "database", 0, NULL, 0)){ cout << "Fejl: " << mysql_error(mysql_handle); exit(1); } if(!mysql_query(mysql_handle, "SELECT id,data FROM test")){ cout << "Fejl: " << mysql_error(mysql_handle); exit(1); }else{ MYSQL_ROW row; unsigned int num_fields; unsigned int i; result = mysql_store_result(mysql_handle); num_fields = mysql_num_fields(result); while((row = mysql_fetch_row(result))){ unsigned long *lengths; lengths = mysql_fetch_lengths(result); for(i = 0; i < num_fields; i++){ cout << lengths[i] << row[i] << row[i]; } } } mysql_free_result(result); mysql_close(mysql_handle); return(0); } </kode>
16. april 2003 - 15:55
#21
Svært at sige. Vildt gæt: mangler libmySQL.dll i din PATH ?
16. april 2003 - 19:18
#22
Nej.. det lader til at den prøver at læse fra NULL. Skal jeg bruge mysql_init alderledes??
16. april 2003 - 19:48
#23
16. april 2003 - 19:49
#24
Og du har altså anbragt libmysql.dl i din PATH (eller tilføjet C:\mysql\lib\opt til din PATH) ?
Kurser inden for grundlæggende programmering