![]() |
Datenbank: MS Access • Version: 2000 • Zugriff über: TADOConnection
MS Access, ADO: Einfuegen mehrerer Datensaetze
Hallo,
es gibt die DB db.mdb (MS Access 2000), auf die ich ueber eine TADOConnection zugreife. Alles Prima. Der Schlauch, auf dem ich nun zu stehen komme, ist folgender: Ich moechte mehrere Datensaetze auf einmal in eine Tabelle einfuegen, aber
Delphi-Quellcode:
laeszt mich immer nur einen Datensatz hinzufuegen. Ne Schleife drueber zu bauen geht natuerlich, dauert aber ganz schoen lange.
AdoCommand.Execute('INSERT INTO TestTable (IntCol, StrCol) VALUES (1, '''a''')');
Auch sowas wie
Delphi-Quellcode:
friszt ganz schoen Zeit.
for i := 1 to n do
ADOTable.AppendRecord([1, 'a']); end; Wie geht das? VorschuszDank & Grusz, Berni |
Re: MS Access, ADO: Einfuegen mehrerer Datensaetze
Herzlich willkommen in der Delphi-PRAXiS, Berni.
Deine einzige Chance mit JET SQL eine Massen-Einfügung hinzukriegen scheint mir INSERT INTO ... SELECT zu sein. Wie liegen denn die einzufügenden Daten vor? Beim satzweisen Einfügen können verknüpfte datensensitive Controls vorübergehend deaktiviert werden um das Einfügen mit Append/Post deutlich zu beschleunigen. Freundliche Grüße |
Re: MS Access, ADO: Einfuegen mehrerer Datensaetze
Perparet parametrisierte INSERT-Anweisungen sollte auch bei MS Access verbesserungen bringen.
|
Re: MS Access, ADO: Einfuegen mehrerer Datensaetze
Hallo,
Zitat:
Zitat:
Zitat:
Dank & Grusz, Berni |
Re: MS Access, ADO: Einfuegen mehrerer Datensaetze
Zitat:
|
Re: MS Access, ADO: Einfuegen mehrerer Datensaetze
Hallo Berni,
zum Thema JET SQL und Bulk Input müsstest du selbst ein wenig recherchieren, aber wahrscheinlich flutscht es bereits so:
Delphi-Quellcode:
Getippt und nicht getestet.
const
SHSTR: String[11] = 'ShortString'; type TItem = array of TVarRec; var items: array of TItem; procedure TDemoForm.ButtonClick(Sender: TObject); var i: Integer; item: TItem; begin { SetLength(items, 2); for i := Low(items) to High(items) do begin SetLength(item, 2); item[0].VType := vtInteger; item[0].VInteger := Random(10); item[1].VString := @SHSTR; items[i] := item; end; } with ADODataSet do try DisableControls; for i := Low(items) to High(items) do InsertRecord(items[i]); finally EnableControls; end; end; Freundliche Grüße |
Re: MS Access, ADO: Einfuegen mehrerer Datensaetze
Hallo,
Zitat:
Derartige Controls gibt es in diesem Fall nicht. Es geht hier um das Speichern verschiedener Einstellungen (identifiziert durch einen Integer) als String. Haue ich jede Einstellung einzeln mittels
Delphi-Quellcode:
oder
ADOConnection.Execute
Delphi-Quellcode:
in die DB, dauert's halt leider 'n Stueck.
ADOTable.AppendRecord
Dank & Grusz, Berni |
Re: MS Access, ADO: Einfuegen mehrerer Datensaetze
Hallo,
Zitat:
Dann werd ich wohl ein Lock-Flag setzen und das Fuellen der DB in nen Thread auslagern ... M$ schlaegt bzgl JET SQL "INSERT INTO ... SELECT FROM ..." vor, aber ich kriegs leider grad auch nicht gebacken, eine Standalone-Tabelle im Speicher zu erzeugen, die ich vllt. schneller fuellen kann und aus der ich dann die Records rueberkopiere ... Auf jeden Fall danke fuer Eure Muehen, Berni |
Re: MS Access, ADO: Einfuegen mehrerer Datensaetze
Hallo,
2 Überlegungen zu deinem Problem: 1. woher kommen die Daten - wer schreibt diese in das Array? Ist es nicht möglich die Datensätze statt in das Array gleich in die DB zu schreiben? Dann fällt es ev. nicht auf, dass das Schreiben der Daten langsam ist. 2. wenn das nicht geht, probier die Daten zunächst in ein Clientdataset und von diesem in die Access-DB zu schreiben (ev. Provider oder so). Ich weiß nicht, ob das was bringt aber einen Versuch ist es Wert. LG, HiWieGehts |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz