Avatar billede don_r Nybegynder
04. marts 2004 - 20:33 Der er 22 kommentarer og
1 løsning

C++ og mysql

Jeg er rimelig ny i c++ og vil gerne bruge mysql til database fra mit program. Jeg har downloadet c++ API (mysql++). Og har prøvet følgende eks. fra mysql's website. Men den fejler ved linien #include <sqlplus.hh>. Hvad skal gøres ?.

#include <iostream>
#include <iomanip>
#include <sqlplus.hh>
 
int main() {
  Connection con("mysql_cpp_data");
  ...mere følger
  return 0;
}
Avatar billede don_r Nybegynder
04. marts 2004 - 20:34 #1
Har selvfølgelig også installeret mysql ;o)
Avatar billede laffe Nybegynder
04. marts 2004 - 21:23 #2
Hej don_r

Har du angivet stien til header filen ?

Hedder header filen ikke #include <sqlplus.h> istedet for #include <sqlplus.hh>


mvh Laffe
Avatar billede arne_v Ekspert
04. marts 2004 - 21:24 #3
Jeg har aldrig kunnet få mysql++ til at virke.

MySQL C API virker fint fra C++.

ODBC virker fint fra C++.
Avatar billede don_r Nybegynder
04. marts 2004 - 22:36 #4
arne_v kan du forklare hvordan jeg gør det med C API. Gider ikke med ODBC.
Avatar billede arne_v Ekspert
04. marts 2004 - 22:39 #5
Et simpelt eksempel (som jeg har postet før):

#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;
}
Avatar billede arne_v Ekspert
04. marts 2004 - 22:40 #6
Command line build med MS VC++ 6.0:

cl /DSOCKET=int /I\mysql\include mysqltest.c ..\mysql\lib\opt\libmysql.lib
Avatar billede arne_v Ekspert
04. marts 2004 - 22:42 #7
Command line build med BC++B 5.5:

coff2omf \mysql\lib\opt\libmysql.lib .\libmysql.lib
bcc32 -DSOCKET=int -I\mysql\include mysqltest.c libmysql.lib
Avatar billede don_r Nybegynder
04. marts 2004 - 22:43 #8
Jeg får en unable to open "mysql.h"
Avatar billede arne_v Ekspert
04. marts 2004 - 22:44 #9
Så:

1) definer SOCKET=int (jeg har aldrig gidet finde ud af hvad for en .h fil jeg
  skal include for at undgå dette)

2) be compileren søge efter header filer i \mysql\include

3) be linkerne bruge \mysql\lib\opt\libmysql.lib

(og med Borland skal man lige konvertere fra COFF til OMF)
Avatar billede arne_v Ekspert
04. marts 2004 - 22:45 #10
Du skal lige have bedt compileren kigge i det rigtige directory efter mysql.h
Avatar billede don_r Nybegynder
04. marts 2004 - 22:48 #11
Jeg ved godt at jeg er tung, men kan du forklare hvordan jeg gør de forskellige ting og hvorfor jeg skal gøre det ;o)
Avatar billede arne_v Ekspert
04. marts 2004 - 22:51 #12
Hvilken compiler bruger du ?
Avatar billede arne_v Ekspert
04. marts 2004 - 22:52 #13
#1 ved jeg ikke

#2 er fordi at du skal fortælle din compiler/linker hvor mysql.h og libmysql.lib ligger
Avatar billede don_r Nybegynder
04. marts 2004 - 22:54 #14
Jeg bruger borland c++ builder 5.5
Avatar billede don_r Nybegynder
04. marts 2004 - 23:02 #15
Jeg tror jeg har fået opfyldt punkt 2 og 3
Avatar billede don_r Nybegynder
04. marts 2004 - 23:02 #16
definer SOCKET=int skal det gøres med en typedef ?
Avatar billede arne_v Ekspert
04. marts 2004 - 23:06 #17
Ja.

Men også med en:

#define SOCKET int

aller øverst i programmet.
Avatar billede arne_v Ekspert
04. marts 2004 - 23:06 #18
Har du konverteret fra COFF til OMF ?
Avatar billede don_r Nybegynder
04. marts 2004 - 23:10 #19
COFF til OMF sidste mangler jeg :O) Har ingen ide
Avatar billede arne_v Ekspert
04. marts 2004 - 23:19 #20
Det er linien:

coff2omf \mysql\lib\opt\libmysql.lib .\libmysql.lib

der gør det.

Du skal nok lave det i en DOS box.

Og husk at holde styr på hvilken libmysql.lib er COFF og hvad for en der er OMF.
Avatar billede arne_v Ekspert
04. marts 2004 - 23:20 #21
Der er iøvrigt en fjerde ting.

Den DLL der ligger ved siden af lib filen skal være i PATH når du kører
dit program.
Avatar billede arne_v Ekspert
04. marts 2004 - 23:20 #22
Og et svar
Avatar billede arne_v Ekspert
04. marts 2004 - 23:21 #23
(og jeg er snart på vej i seng)
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