Avatar billede fuzzy82 Nybegynder
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);
}
Avatar billede segmose Nybegynder
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.
Avatar billede soreno Praktikant
16. april 2003 - 11:29 #2
#include <c:\mysql\include\mysql.h>

skal være:
#include "c:\mysql\include\mysql.h"
Avatar billede fuzzy82 Nybegynder
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;
Avatar billede soreno Praktikant
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;
}

?
Avatar billede soreno Praktikant
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++
Avatar billede fuzzy82 Nybegynder
16. april 2003 - 11:52 #6
ja - det gør jeg!
Avatar billede segmose Nybegynder
16. april 2003 - 11:54 #7
my_socket er nok ikke defineret, includer en passende socket.h,
Avatar billede fuzzy82 Nybegynder
16. april 2003 - 11:55 #8
Dvs. at jeg ikke kan bruge dem sammen med gcc??
Avatar billede fuzzy82 Nybegynder
16. april 2003 - 11:57 #9
segmose << Hvad mener du med en passende socket.h?? Jeg er /lidt/ c++ noob!!
Avatar billede soreno Praktikant
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.
Avatar billede soreno Praktikant
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"
Avatar billede arne_v Ekspert
16. april 2003 - 12:11 #12
Bare inkluder windows.h ovenover, så virker det.

[jeg har lige testet med dev-cpp]
Avatar billede soreno Praktikant
16. april 2003 - 12:18 #13
Arne:
Hvordan linker du ?
Jeg får nemlig et par "undefined reference to".
Avatar billede arne_v Ekspert
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.
Avatar billede arne_v Ekspert
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 !
Avatar billede arne_v Ekspert
16. april 2003 - 12:31 #16
_chkstk

hvad f..... det så er ?
Avatar billede arne_v Ekspert
16. april 2003 - 12:34 #17
Der er en vejledning til at slippe af med _chkstk på:

http://www.mysql.com/doc/de/Windows_client_compiling.html

Se "Posted by Monaco Olivier on Thursday February 27 2003, @2:41am"
indlæget.
Avatar billede fuzzy82 Nybegynder
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.
Avatar billede arne_v Ekspert
16. april 2003 - 13:35 #19
Det burde være nok bare at inkludere windows.h !
Avatar billede fuzzy82 Nybegynder
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>
Avatar billede arne_v Ekspert
16. april 2003 - 15:55 #21
Svært at sige.

Vildt gæt:

mangler libmySQL.dll i din PATH ?
Avatar billede fuzzy82 Nybegynder
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??
Avatar billede arne_v Ekspert
16. april 2003 - 19:48 #23
NULL burde være OK jævnfør:

http://www.mysql.com/doc/en/mysql_init.html
Avatar billede arne_v Ekspert
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) ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester