Hallo,
wie in diesem
Thread beschrieben greife ich über eine
ins Excel importierte
DLL auf eine Firebird Datenbank zu. Es funktioniert auch einwandfrei. Ich schreibe eine
Formel in die Excelzelle und die Funktion holt den Wert aus der Datenbank. D.h. aber auch, dass für jede einzelne
Zelle ein Wert aus der Datenbank geholt wird. Dafür wird z.Z. für jeden Wert der Abfrageprozess durchlaufen.
- Transaktion starten
- Abfrageparameter setzen
- Dataset öffnen
- Wert holen
- Dataset schließen
- Transaktion schließen
Delphi-Quellcode:
function TPMValue1(Year, Partner, Entity, Posnr, Bwa : PChar) : Double; stdcall;
begin
Result:=0;
With DModule do
begin
If Not Transaction.Active then
Transaction.StartTransaction;
Dataset.SelectSQL.Text:=sqlTpmValue1;
Dataset.ParamByName('Jahr').AsString:=String(Year);
Dataset.ParamByName('Partner').AsString:=String(Partner);
Dataset.ParamByName('Entity').AsString:=String(Entity);
Dataset.ParamByName('PosNr').AsString:=String(PosNr);
Dataset.ParamByName('Bwa').AsString:=String(Bwa);
Try
Dataset.Open;
Result:=Dataset.FieldByName('DEZ').AsFloat;
Finally
Dataset.Close;
Transaction.Commit;
end;
end; // With DModule do
end;
Das dauert bei 1000 und mehr Werten ziemlich lange.
Weiss jemand wie ich das Beschleunigen kann.
Hinweis: Alle Werte in eine Abfrage packen und die Excelzellen über ein Routine füllen habe ich schon. Geht ziemlich schnell.
Auch bei über 1000 Werten. Ich möchte aber explizit den Weg über die Excelzellenformel gehen.