Einzelnen Beitrag anzeigen

AMaurer

Registriert seit: 14. Dez 2010
34 Beiträge
 
Delphi 11 Alexandria
 
#1

D09 MySQL C-API ExecQry

  Alt 16. Mai 2011, 15:19
Datenbank: MySQL • Version: 5.5 • Zugriff über: C-API
Hallo Ihr Experten.

Als Hobbyist steht man manchmal wie ein Ochse vorm Berg ...

Ich habe mich am Tutorial von Michael Puff langgehangelt. Änderungen mussten im Bereich String PAnsiChar vorgenommen werden, da das bekanntlich im D2009 anders läuft.

Ich habe Zugriff auf die DB (MySQL 5.5), kann Daten auslesen im Formular darstellen z. B. edit-Felder.

StringGrid funktioniert wie im Beispiel auch bis auf die Spaltennamen. Hier habe ich explixit folgendes Problem:

Aus Ihrem Tutorial, abgewandelt mit AnsiChar ...
function ExecQuery(const Datenbank, query: AnsiString; var Cols: TCols; var Rows: TRows): Boolean; var
MySQLRes: PMYSQL_RES;
MySQLRow: PMYSQL_ROW;
AffectedRows: Int64;
ColCount: Cardinal;
Field: PMYSQL_FIELD;
i: Integer;
j: Integer;
ErrorCode: Integer;
begin
// Datenbank auswählen
ErrorCode := mysql_select_db(Descriptor, PAnsiChar(Datenbank));
if ErrorCode = 0 then
begin
// Query ausführen
ErrorCode := mysql_real_query(Descriptor, PAnsiChar(query), length(query));
if ErrorCode = 0 then
begin
// Query speichern
MySQLRes := mysql_store_result(Descriptor);
if Assigned(MySQLRes) then
begin
// zurückgelieferte Anzahl der Spalten
ColCount := mysql_num_fields(MySQLRes);
SetLength(Cols, ColCount);
// Spalten-Array füllen
for i := 0 to ColCount - 1 do
begin
Field := mysql_fetch_field_direct(MySQLRes, i);
Cols[i] := Field.name;
...

Field.name bringt Compiler-Fehlermeldung: Record, Objekt oder Klassentyp erforderlich.
Wenn ich die Zeile Cols[i] := Field.Name auskommentiere läuft die Prozedur, die erste Zeile bleibt aber logischerweise in der nachfolgenden Funktion StringGrid füllen leer.

In der Referenz von MySQL-5.5 sind die Funktionen rund um mysql_fetch_field() beschrieben. Dementsprechend soll es .Name geben.

Habt Ihr eine Idee woran das liegt, dass .Name nicht funktioniert?


Danke für Eure Hilfe ...


Viele Grüße

Andreas
  Mit Zitat antworten Zitat