Я получаю данные из базы данных mySQL, используя запрос (фактически TMyQuery от Devart, унаследованный от TDataSet). Обычно я обрабатываю одно поле за раз в while not eof
l oop, используя fieldbyname()
.
Поскольку некоторая обработка является сложной, я вместо этого хотел бы извлечь всю запись и передать ее процедуре, выполняющей обработку каждого поля, находящегося вдали от l oop.
Я думаю, что это может быть связано с методом GetCurrentRecord()
, который, похоже, возвращает указатель на байт, если он переопределен, но тогда я не совсем понимаю, как извлечь мои поля из этого указателя.
Если это возможно, кто-нибудь может показать мне синтаксис для извлечения одной целой записи, передачи ее в качестве параметра и затем извлечения каждого поля?
Структура кода, который я обычно использую
Procedure ProcessTable;
begin
Query1.SQL.Clear;
Query1.SQL.Add(SQL);
Query1.Open;
Query1.first ;
while not Query1.Eof do
begin
var1 := Query1.FieldByName('field1').AsString;
var2 := Query1.FieldByName('field2').AsInteger;
//etc.
Query1.Next;
end;
Query1.close;
end;
Псевдокод того, что я хотел бы сделать
procedure ProcessRecord( TheRecord : PByte );
begin
..
<extract the fields from TheRecord and process them>
..
end;
Procedure ProcessTable;
var
buffer : PByte;
begin
Query1.SQL.Clear;
Query1.SQL.Add(SQL);
Query1.Open;
Query1.first ;
while not Query1.Eof do
begin
buffer := Query1.GetCurrentRecord;
ProcessRecord(buffer);
Query1.Next;
end;
Query1.close
end;