Tôi đang sử dụng các thành phần ZEOS để kết nối với cơ sở dữ liệu MDB (cũ).
Tôi đang thực hiện truy vấn đọc nhiều dữ liệu để kết nối với một cơ sở dữ liệu khác.Trên truy vấn rất chậm, làm cách nào để chỉ ra phần trăm tiến trình
Có cách nào để biểu thị tiến độ dưới dạng phần trăm không?
procedure TForm13.ActionReadInMemoryExecute(Sender: TObject);
var
QueryLine: string;
FullQuery: string;
Tablename: string;
i: integer;
begin
i:= 0;
TableMeter.DisableControls;
try
TableMeter.First;
FullQuery:= '';
while not TableMeter.eof do begin
Tablename:= TableMeter.FieldByName('tabelnaam').AsString;
QueryLine:= ReplaceStr(ImportQuerySjabloon, cTabelname, Tablename);
FullQuery:= FullQuery + QueryLine;
if (TableMeter.RecNo < (TableMeter.RecordCount -1)) then begin
FullQuery:= FullQuery + ' UNION ALL ';
end;
TableMeter.Next;
end; {while}
QueryImportMeterreadings.Close;
QueryImportMeterreadings.SQL.Text:= FullQuery;
QueryImportMeterreadings.Open; <<-- takes a long time
finally
TableMeter.EnableControls;
end;
end;
Có cách nào để chỉ ra sự tiến bộ của truy vấn, hoặc tôi chỉ có thể làm được điều này nếu tôi chia tay các truy vấn cá nhân và loại bỏ các UNION
's.
Mất khoảng 1 phút để chạy, liên quan đến 8 công đoàn.
Tôi không thấy bất kỳ sự kiện mà tôi có thể sử dụng cho mục đích này:
Hoặc nên tôi giả một OnCalcField trên một sân trong Query để làm điều này (không chắc chắn nếu điều đó thậm chí sẽ làm việc trên nguyên tắc).
Hoặc đính kèm một chuỗi? nope, cung cấp cho hoạt động không được hỗ trợ trên Access DB
Như tôi đã đề cập trong nhận xét bên dưới, dựa trên câu trả lời của user1031312, bạn có thể đặt dữ liệu vào lưới chuỗi thay thế, trừ khi bạn phụ thuộc vào chức năng của DBGrid. Nếu một TStringGrid là OK, tôi có thể cho bạn một ví dụ tốt nếu cần thiết để phân chia các truy vấn và kết hợp các kết quả trong cùng một lưới ... –
@ JerryDodge, tôi chỉ cần truy cập chỉ đọc, do đó, một stringgrid sẽ làm việc cho tôi. – Johan
Nếu không biết tổng số bản ghi, sẽ rất khó để hiển thị thông tin 'x phần trăm đã hoàn thành' – mjn