Avatar billede krukken Juniormester
06. april 2004 - 16:01 Der er 25 kommentarer og
1 løsning

Forbind til Mysql og udtræk af data

Jeg har følgende kode på:
*****************************
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include "c:\mysql\include\mysql.h"
using namespace std;

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", "", "", "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);
   

}
*********************************
Får jeg kører dette får jeg følgende linkfejl:
test error LNK2019: unresolved external symbol _mysql_close@4 referenced in function _main

test error LNK2019: unresolved external symbol _mysql_free_result@4 referenced in function _main

test error LNK2019: unresolved external symbol _mysql_fetch_lengths@4 referenced in function _main

Og der er så 10 ialt - hvad er der galt og hvordan får jeg trukket de data ude af min mysql-database?

Jeg arbejder i .Net og sidder på en windowsmaskine
Avatar billede arne_v Ekspert
06. april 2004 - 16:03 #1
Du mangler at linke mod MySQL lib.

libmysql.lib (dynamisk) eller mysqlclientlib.lib (statisk)
Avatar billede krukken Juniormester
06. april 2004 - 16:07 #2
Hvordan gør jeg det?
Avatar billede arne_v Ekspert
06. april 2004 - 16:15 #3
Jeg formoder at du bruger IDE'en.

De skal tilføjes til opsætningen.

Noget a la:

project
settings
linker
libraries
Avatar billede jonas82 Nybegynder
06. april 2004 - 16:15 #4
I "solution explorer" højreklik på dit projekt.
- vælg properties.
- Vælg linker
- Vælg comandline
- skriv "libmysql.lib" i additional options

Der er sikkert andre måder, men det virker for mig i VS.NET
Avatar billede krukken Juniormester
06. april 2004 - 16:17 #5
IDE?
Avatar billede krukken Juniormester
06. april 2004 - 16:18 #6
test fatal error LNK1104: cannot open file 'libmysql.lib'
Avatar billede krukken Juniormester
06. april 2004 - 16:20 #7
test fatal error LNK1104: cannot open file 'C:\mysql\bin\libmysql.lib'
Avatar billede jonas82 Nybegynder
06. april 2004 - 16:22 #8
Prøv at kopiere libmysql.lib ind i roden af dit projekt.
Avatar billede arne_v Ekspert
06. april 2004 - 16:30 #9
Den plejer at ligge som:

C:\mysql\lib\opt\libmysql.lib

men check !
Avatar billede krukken Juniormester
06. april 2004 - 16:51 #10
Så tror jeg at jeg fik hul igennem - men der udskriver intet. Og det burde den gøre for der er at a i database.

Hvis jeg sætter bruger og password får jeg denne besked:
Fejl: Access denied for user: 'h@localhost' (Using password: YES)

Det betyder vel at der er forbindelse til database ikke?
Avatar billede krukken Juniormester
06. april 2004 - 16:57 #11
Jeg får en fejl er:
if(!mysql_query(mysql_handle, "INSERT INTO maalinger(channel, value) VALUES (78,234.4)")){
           
    cout << "Fejl: " << mysql_error(mysql_handle);
    Sleep(20000);
    exit(1);
    }else
Avatar billede arne_v Ekspert
06. april 2004 - 16:57 #12
Det vil jeg mene.

En ting som jeg savner lidt i din kode er nogle endl.
Avatar billede arne_v Ekspert
06. april 2004 - 16:58 #13
Hvilken fejl ?

Hvilke data typer har felterne channel og value ?
Avatar billede krukken Juniormester
06. april 2004 - 16:58 #14
Jeg får en fejl fra de linier som jeg har skrevet:

Men den udskriver kun:

"Fejl:  "

og ikke mere?
Avatar billede krukken Juniormester
06. april 2004 - 16:59 #15
double og int
Avatar billede krukken Juniormester
06. april 2004 - 17:00 #16
omvendt
Avatar billede arne_v Ekspert
06. april 2004 - 17:13 #17
int mysql_query(MYSQL *mysql, const char *query)

Return Values
Zero if the query was successful. Non-zero if an error occurred

så OK => returner nul => gå ind i din fejl kode
Avatar billede krukken Juniormester
06. april 2004 - 18:47 #18
Hvordan får jeg sat mine egen værdier ind i Mysql-sætningen? Altså så jeg indsætter int value1 og double value2?

    if(mysql_query(mysql_handle, "INSERT INTO table(dyr,navn) VALUES (value1,value2)"))
    {           
        cout << "Fejl: " << mysql_error(mysql_handle);
    }
Avatar billede arne_v Ekspert
06. april 2004 - 18:48 #19
Du formaterer SQL kommandoen med sprintf !
Avatar billede arne_v Ekspert
06. april 2004 - 18:49 #20
Avatar billede krukken Juniormester
06. april 2004 - 18:52 #21
Tak :-) Jeps - jeg havde faktisk købt den ene;-)
Avatar billede krukken Juniormester
06. april 2004 - 19:03 #22
Hvad hedder %d når det er en double med 2 decimaler?
Og hvad med en int?

Så er pointene vist dine;-)
Avatar billede arne_v Ekspert
06. april 2004 - 19:06 #23
%d for int
%f for double
%s for char array (string)
%5d for int med 5 pladser (leading spaces)
%05d for int med 5 pladser (leading zeroes)
%6.2f for double xxx.xx
etc.
Avatar billede arne_v Ekspert
06. april 2004 - 19:06 #24
Og et svar
Avatar billede krukken Juniormester
06. april 2004 - 19:07 #25
Ligger du et svar?
Avatar billede arne_v Ekspert
06. april 2004 - 19:08 #26
Allerede sket
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