function ExecQuery(
const Datenbank,
query: Ansistring;
var Cols: TCols;
var Rows: TRows): Boolean;
var
j, i, field_count, row_count: Integer;
mySQL_Field: PMYSQL_FIELD;
tablename:
String;
MYSQL_ROW: PMYSQL_ROW;
begin
SetLength(Cols, 0);
// Datenbank auswählen
ErrorCode := mysql_select_db(LibHandle, PAnsiChar(AnsiString(Datenbank)));
if ErrorCode = 0
then
begin
// Query ausführen
if mysql_real_query(LibHandle, PAnsiChar(
query), Length(
query))<>0
then begin
raise Exception.Create(mysql_error(LibHandle));
exit;
end
else
begin
// Query speichern
mySQL_Res := mysql_store_result(LibHandle);
if mySQL_Res<>
nil
then begin
// zurückgelieferte Anzahl der Spalten
ColCount := mysql_num_fields(mySQL_Res);
SetLength(Cols, ColCount);
SetLength(Rows, ColCount, 0);
SetLength(Cols, ColCount);
// Spalten-Array füllen
for i := 0
to ColCount - 1
do
begin
mySQL_Field := mysql_fetch_field_direct(mySQL_Res, i);
Cols[i] := mysql_field_name(mySQL_Field);
end;
// Anzahl der betroffenen Zeilen ermitteln
AffectedRows := mysql_num_rows(mySQL_Res);
SetLength(Rows, ColCount, AffectedRows);
// neu ->
// Zeilen-array füllen
// alle Zeilen ...
for j := 0
to AffectedRows - 1
do
begin
// ... werden eingelesen
MySQL_Row := mysql_fetch_row(mySQL_Res);
// alle Spalten ...
for i := 0
to ColCount - 1
do
begin
// ... werden in Rows[] übertragen
Rows[i, j] := MySQL_Row[i];
end;
end;
// gespeicherte Abfrage wieder freigeben
mysql_free_result(MySQL_Res);
end
end
end;
result := ErrorCode = 0;
end;