AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Excel ADO - geshwindigkeit ?
Thema durchsuchen
Ansicht
Themen-Optionen

Excel ADO - geshwindigkeit ?

Ein Thema von myicq · begonnen am 27. Sep 2017 · letzter Beitrag vom 1. Okt 2017
Antwort Antwort
myicq

Registriert seit: 5. Jan 2016
70 Beiträge
 
Delphi 6 Professional
 
#1

Excel ADO - geshwindigkeit ?

  Alt 27. Sep 2017, 09:40
Datenbank: Excel XLSX • Version: 2010 • Zugriff über: ADO
Ich muss per ADO Excel zugehen.
Ich benutze zzt folgendes, es geht, aber die Geschwindigkeit wird immer weniger als die Tabelle wächst.
Als ob ".Next" immer von vorne sucht ?


Die Ganze Tabelle muss in DbData[i,j] rein. DbData ist eine Array of Array of Widestring.

Delphi-Quellcode:
// for Excel and ODBC
// Number_Records = .RecordCount.
// Headers_Count = number of fields / columns
// DbImportDB is a different form which has connection components.

begin
    for j := 1 to Number_Records - 1 do
    begin
            DBImportDB.DBTable.Next; /// <<<<
           for i := 0 to Headers.Count - 1 do
            begin
                  main.LogFile('Loading field ' + IntToStr(i), 4, TRUE);
                  if DBImportDB.DBTable.Fields.Fields[i]{FindField(Headers[i])}.Text <> 'then
                    DBData[i, j] := DBImportDB.DBTable.Fields.Fields[i].Value
                   else
                    DBData[i, j] := DBImportDB.DBTable.Fields.Fields[i].Text;
          end;
   end;
end;
Für MS ACCESS benutze ich
Delphi-Quellcode:
    dbimportdb.DBTable.Recordset.MoveFirst;
    ....
       Recordset.MoveFirst;
        while not Recordset.eof do
             ....
        
            recordset.MoveNext;
Das ist mehrfach schneller, ABER Excel liest nur data aus 1. Reihe. Allerdings sovielmal wie RecordCount.


Ist "MoveNext" nicht für Excel erlaubt / möglich ?

Und geht es die ganze .UsedRange auf einmal zu lesen, statt Reihe für Reihe ?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: Excel ADO - geshwindigkeit ?

  Alt 27. Sep 2017, 10:22
Keine Ahnung, wie es bei neueren Versionen von Delphi ist, aber bei ADO nutze ich immer sowas in der Art:
Delphi-Quellcode:
Table.First;
while not Table.EoF do begin
  Variabel := Table.FieldByName('Spaltenname'):AsString;
  Table.Next;
end;
Dabei ist es vollkommen egal, ob über den Connectionstring nun auf Access, Excel, FireBird oder sonst eine Datenbank verwiesen wird.

Der im Programm genutzte Quelltext ist immer gleich, für Excel ist keine Sonderbehandlung nötig.

Sprich: Deine schnelle Methode für Access sollte mit Excel ebenso funktionieren.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Excel ADO - geshwindigkeit ?

  Alt 27. Sep 2017, 10:26
Anstatt ADO kann man auch über ActiveX ein Excel-Dokument öffnen und dann komplette Bereiche in ein Variant-Array kopieren. ADO ist natürlich praktischer wenn man satzweise oder mit SQL arbeiten möchte, aber der ActiveX-Zugriff auf einige tausend Zeilen ist extrem schnell.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#4

AW: Excel ADO - geshwindigkeit ?

  Alt 27. Sep 2017, 10:37
Moin...

Frage:
Ist DBImportDB.DBTable ein TDataSet?

Dann könnte die Lösung folgendermaßen aussehen:
http://www.delphipraxis.net/192080-ado-langsam.html
Siehe Post #3, #15

Geändert von haentschman (27. Sep 2017 um 10:41 Uhr)
  Mit Zitat antworten Zitat
myicq

Registriert seit: 5. Jan 2016
70 Beiträge
 
Delphi 6 Professional
 
#5

AW: Excel ADO - geshwindigkeit ?

  Alt 28. Sep 2017, 22:39
Moin...

Frage:
Ist DBImportDB.DBTable ein TDataSet?

Dann könnte die Lösung folgendermaßen aussehen:
http://www.delphipraxis.net/192080-ado-langsam.html
Siehe Post #3, #15
DANKE für die Hinweise! Werde ich demnächst probieren.

Ich glaube, wie im Post#3 vorgeschlagen, das ActiveX ohne Excel installiert zu haben, nicht möglich ist ? Ich werde auf dem Rechner gerade NICHT excel / Office zu verfügung haben. Nur MDAC. / ADO.
  Mit Zitat antworten Zitat
myicq

Registriert seit: 5. Jan 2016
70 Beiträge
 
Delphi 6 Professional
 
#6

AW: Excel ADO - geshwindigkeit ?

  Alt 1. Okt 2017, 20:12
Moin...

Frage:
Ist DBImportDB.DBTable ein TDataSet? (JA, ist es..)

Dann könnte die Lösung folgendermaßen aussehen:
http://www.delphipraxis.net/192080-ado-langsam.html
Siehe Post #3, #15
Das hat die Geschwindigkeit immens erhöht, bei 90.000 Records von etwa 1 Minute bis zu wenige Sekunden. DANKE!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz