MySQL (SELECT * FROM) ... Hilfe.
-
Hast du auch den entsprechenden Pfad eingestellt bzw. direkt angegeben (#include "d:/mysql/include/mysql.h")
Und vorher sollte man anscheinend windows.h einbindenaber benutz mal die Forensuche, da wirst du bestimmt fündig
-
Hm ja habe es direkt mit dem PFad probiert... Geht nicht. Also ich meine: es ergibt das selbe Resultat. Aber ich hab den richtigen Pfad eingestellt... Also es klappt von dem her schon! Nur ich kann überhaupt keine Variablen verwenden. MYSQL_ROW... Da kommen sofort Fehler. Dabei brauche ich das so dringend!
Nein ich finde da leider nichts... Scheint ja ein Lib Problem oder so zu sein kA
-
Probier es doch mal mit der ODBC - oder willst du diese nicht nutzen ???
Da würder der Code ungefähr so aussehen zum auslesen aus zwei Spalten:
// Auslesen!! HSTMT hstmtSelect; /* Allocate the statement handles */ retcode = SQLAllocStmt(hdbc1, &hstmtSelect); if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) { ProcessLogMessages(SQL_HANDLE_STMT, hstmtSelect, "SQLAllocStmt() Failed\n\n", TRUE); return(9); } /* SELECT the result set and bind its columns to local storage */ retcode = SQLExecDirect(hstmtSelect,(SQLCHAR *)"SELECT * FROM test",SQL_NTS); if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) { ProcessLogMessages(SQL_HANDLE_STMT, hstmtSelect, "SQLExecDirect() Failed\n\n", TRUE); return(9); } // Ausgabe !!! // SQLBindCol variables SQLCHAR szName[MAXNAME+1]; SQLINTEGER iName,cbiName; SQLINTEGER cbName; retcode = SQLBindCol(hstmtSelect, (SQLSMALLINT)1, SQL_C_ULONG, &iName, 0, &cbiName); if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) { ProcessLogMessages(SQL_HANDLE_STMT, hstmtSelect, "SQLBindCol() Failed\n\n", TRUE); return(9); } retcode = SQLBindCol(hstmtSelect, (SQLSMALLINT)2, SQL_C_CHAR, szName, MAXNAME, &cbName); if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) { ProcessLogMessages(SQL_HANDLE_STMT, hstmtSelect, "SQLBindCol() Failed\n\n", TRUE); return(9); } while ( (retcode = SQLFetch(hstmtSelect) ) != SQL_NO_DATA ) { if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) { ProcessLogMessages(SQL_HANDLE_STMT, hstmtSelect, "SQLFetch() Failed\n\n", TRUE); return(9); }//*/ retcode = SQLGetData(hstmtSelect, (SQLSMALLINT)1, SQL_C_ULONG, &iName, 0, &cbiName); if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) { ProcessLogMessages(SQL_HANDLE_STMT, hstmtSelect, "SQLGetData() Failed\n\n", TRUE); return(9); }//*/ retcode = SQLGetData(hstmtSelect, (SQLSMALLINT)2, SQL_C_CHAR, szName, MAXNAME, &cbName); if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) { ProcessLogMessages(SQL_HANDLE_STMT, hstmtSelect, "SQLGetData() Failed\n\n", TRUE); return(9); }//*/ printf("id = %d ", iName); printf("Name = %s ", szName); }//while
Vielleicht kommst du ja mit OdBC besser
MfG Unwissender
-
Das ist alles sehr seltsam
- zeig doch mal den ganzen Code; vielleicht findet sich dann jemand, der das bei sich mal testet
-
warum hier odbc wenn mysql so eine schöne c-api hat?
http://www.mysql.com/doc/de/C.html
-
ps: @flenders
falls du den odbc code meinst mit zeigen musst du einfach eine dns zur datenbank anlegen und folgende header includieren:#include <windows.h> #include <stdlib.h> #include <stdio.h> #include <sql.h> #include <sqlext.h>
dazu benötigst du in winapi manie handles:
SQLHANDLE henv; SQLHANDLE hdbc; SQLHANDLE hstmt; RETCODE rc;
und mit denen kann man dann drauf zugreifen
rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); rc = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER); rc = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); rc = SQLConnect(hdbc, (SQLCHAR *)dsn, SQL_NTS, (SQLCHAR *) user, SQL_NTS, (SQLCHAR *) pass, SQL_NTS); rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt); rc = SQLPrepare(hstmt, (SQLCHAR *)Statement, SQL_NTS); rc = SQLExecute(hstmt); rc = SQLFetch(hstmt);
dann kann man wie oben loslegen..
gibt dann übrigens einige eigene datentypen
SQLCHAR m_Id[ID_LEN];
aber vielleicht meintest du auch den mysql problemfall..
-
Ich meinte den Problemfall. Es ist doch seltsam, dass er die Typen nicht anerkennt, obwohl er ja anscheinend alle nötigen header (windows.h und mysql.h) includiert hat - oder sind es noch mehr
Ich habe noch nie was mit MySQL und C gemacht, immer nur mit PHP, deshalb kann ich jetzt hier auch nicht mehr groß weiterhelfen.
@elise: Du kannst da sicher noch den Fehler finden
-
hier gibts eine schöne musterlösung...
http://www.in.tu-clausthal.de/~hoerner/db0102/Musterloesung5.pdf
ps: ein libproblem kann es noch nicht sein, wenn er die datentypen nicht anerkennt und sie als compilerfehler moniert.
die libmySQL.lib muss natürlich mitgelinkt sein.
der mysql server muss schließ und endlich laufen.
sonst fällt mir auch nix ein.
-
was mir in deiner musterlösung auffällt:
MYSQL RES *result=malloc(sizeof(MYSQL RES)); //wofür soll das gut sein´?? //und MYSQL* mysql=malloc(sizeof(MYSQL)); mysql_init(mysql); //kann durch ersetzt werden. MYSQL* mysql=mysql_init(NULL);
-
habe sie eben ergooglet und nicht alles durchgeschaut und den lehrbeauftragten der tu ilmenau getraut.
im grunde muss bei ChrisK erstmal mysql gefunden werden... aber vielleicht läuft es bei ihm ja jetzt...
-
ich brauch für die sachen immer etwas länger! aber die pdf datei sieht sehr interessant aus! ich probiere mich mal und sag dann, wies funktioniert/nicht funktionier! DANKE MAL! bis dann!
-
für DevCPP gibt es auch neuerdings auch ein mysql beispiel1. Simpel gehalten:
/* Name: MySQLClientTest (module) Original Author: Dinesh V. R., dinesh@dvrsol.com Editor: Kip Warner, "decrypted" into Vertigo syntax and prepared for dev Date: 23/03/03 12:38 Description: Example to show usage of MySQL databases. */ // Includes... #include <windows.h> #include <mysql.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> // Database name... char szDB[] = "evolution"; const int nMaxBufSize = 1024; // Entry point... int main(int argc, char *argv[]) { // Variables... MYSQL *myData; MYSQL_RES *res; MYSQL_FIELD *fd; MYSQL_ROW row; int i, j, k, l, x; char aszFlds[25][25]; char szSQL[] = "SELECT * FROM b2users"; // assumed that there is table properties // Try to select database and check for error... if((myData = mysql_init((MYSQL*) 0)) && mysql_real_connect( myData, NULL, NULL, NULL, NULL, MYSQL_PORT, NULL, 0 )) { // Failed... if(mysql_select_db(myData, szDB) < 0) { // Tell user what's going on, close database, then quit... printf("Can't select the %s database!\n", szDB); mysql_close(myData); getch(); return 2; } } // Failed to connect... else { // Tell user what's going on, close database, then quit... printf("Can't connect to the mysql server on port %d!\n", MYSQL_PORT); mysql_close(myData); getch(); return 1; } // Query database with "SELECT * FROM PROPERTIES" command... if(mysql_query(myData, szSQL) == 0) { // I have no idea what he's doing here... res = mysql_store_result(myData); i = (int) mysql_num_rows(res); l = 1; // Display query result... printf("Query: %s\nNumber of records found: %d\n", szSQL, i); // Get the field-specific characteristics here.... for(x = 0; fd = mysql_fetch_field(res); x++) strcpy(aszFlds[x], fd->name); // I have no idea what he is doing here either... while(row = mysql_fetch_row(res)) { // Wtf... j = mysql_num_fields(res); printf( "Record #%d:-\n", l++); for(k = 0 ; k < j ; k++) printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[k], (((row[k]==NULL)||(!strlen(row[k]))) ? "NULL" : row[k])); puts("==============================\n"); } // Free the result... mysql_free_result(res); } // Failed to query database... else printf("Couldn't execute %s on the server !\n", szSQL); // Close connection to database... mysql_close(myData); // Wait for key, then terminate... getch(); return 0; }