Verträglichkeit MySQL mit Borland
-
Hallo,
mache gerade meine ersten Versuche mit den MySQL Bibliotheken. Eine Abfrage bekomme ich auch hin, die Daten werden bei meinem Testprogramm ersteinmal in einer Memo-Box ausgegeben was auch funktioniert.
Ich möchte jetzt aber die Daten in ein StringGrid schreiben. Wenn ich in meiner Funktion, die die Daten vom SQL-Server abholt, eine Zuweisung auf das StringGrid schreibe, bekomme ich bei Ausführen der Funktion eine Zugriffsverletzung bei der Zeile:free(string);
In einem anderen Programmteil funktioniert der Zugriff auf das StringGrid ohne Probleme.
Hier mal mein Code:
// Daten aus SQL Datenbank abfragen void __fastcall TForm1::Button3Click(TObject *Sender) { unsigned long anzahl_reihen; unsigned int i; MYSQL_ROW row; MYSQL_RES *mysql_res; char *query, *string; char *select = "SELECT * FROM namen"; char text[255]; // Bleibt diese Zeile in dieser Funktion bekomme ich die Fehlermeldung der // Zugriffsverletzung // StringGrid1->Cells[1][1] = "Hallo"; query =(char *) malloc(strlen(select)+1); strcpy(query, select); // Anfrage an den Datenbankserver mysql_query(mysql, query); mysql_check_error(); // Daten der Abfrage abholen mysql_res = mysql_store_result(mysql); mysql_check_error(); // Anzahl der gefundenen Datensätze ermitteln anzahl_reihen = (unsigned long) mysql_num_rows (mysql_res); sprintf (text, "Anzahl gefunden: %l", anzahl_reihen); Memo1->Lines->Add(text); // Gefundenen Datensatz bzw. Datensätze ausgeben while ((row = mysql_fetch_row (mysql_res)) != NULL) { // Einzelne Spalten der Zeile ausgeben for (i = 0; i < mysql_num_fields(mysql_res); i ++) { snprintf (text, 255, "%s ",row[i]); Memo1->Lines->Add(text); } } // Speicherplatz wieder freigeben mysql_free_result(mysql_res); free(string); free(query); }Danke für jede Hilfe
Thomas
-
Ich sehe nirgendwo die Zeile, wo Du den Speicher reservierst. Ergo darfst Du auch keinen freigeben.
Ach so, malloc und free sind C-Style, bei C++ nimmt man new und delete. Und statt char könnte man AnsiString verwenden.Grüße Joe_M.
-
Oh, *schäm*
naja, hab so lange am Code rumgefummelt bis ich was übersehen haben.Vielleicht kann mir dann ja noch jemand was zu dieser Fehlermeldung, bzw. der Behebung sagen:
[C++ Fehler] my_list.h(33): E2015 Mehrdeutigkeit zwischen 'LIST' und 'Bde::LIST'
'Bde' hört für mich nach Borland Database Komponenten an, die ich aber eigentlich nicht in meinem Projekt benutze. Oder gehört das StringGrid dazu?
my_list.h ist eine Header-Datei der MySQL-Bibliothek
-
Hallo Thomas,
konntest Du das Problem mit der Mehrdeutigkeit zwischen dem MySQL List Aufruf und dem Bde::List Aufruf schon lösen?
Grüße CF
-
Hallo,
ich würde ebenfalls gerne eine MySQL DB ansprechen. Hatte auch schon einige Code schnippsel zu der Mysql.h bei google gefunden.Könnt ihr mir sagen wo ich sie kostenfrei downloaden kann?
Bzw könnt ihr sie (und andere die evtl dabei gehören) an C.Schneider@gmx.org schicken? (Wenn sie kostenlos sein sollte).
Danke.
-
wenn es nicht zwingend kostenfrei sein soll, kann ich nur mySQLDAC empfehlen.
-
d0x schrieb:
Hallo,
ich würde ebenfalls gerne eine MySQL DB ansprechen. Hatte auch schon einige Code schnippsel zu der Mysql.h bei google gefunden.Könnt ihr mir sagen wo ich sie kostenfrei downloaden kann?
bis bald
akari