![]() |
Datenbank: Access / Excel • Zugriff über: ADO
ADO-Tabelle löschen und neu füllen
Hallo! Ich bin Datenbank-unerfahren und möchte folgendes machen:
>>> Mittels ADO auf eine Tabelle zugreifen, alle Datensätze löschen und x neue Datensätze einfügen. Bisher mache ich das mit TADOCommand mit DELETE und x-mal INSERT Commands. Gibt es einen einfacheren Weg? Wie kann man vermeiden, dass andere auf die Tabelle zugreifen, während ich noch am aufbauen der neuen Tabelle bin? Mir wäre am liebsten, ich könnte die Tabelle irgendwie "blockieren", leeren und neu schreiben in einem Rutsch. Vielen Dank im voraus! |
Re: ADO-Tabelle löschen und neu füllen
Hallo,
im Prinzip nicht. Denn dafür sind ja die commands da. Oder was meinst du damit? Für jedes einfügen muss nunmal ein entsprechendes Commando (SQL) Richtung DB abgesetzt werden. Für Löschen gibt es ja Bedingunen um eine,mehrere oder alle zu löschen. |
Re: ADO-Tabelle löschen und neu füllen
Na ja, ich meine das so: Ich lösche einfach alle Datensätze einer Tabelle und schreibe danach z.B. 1000 neue hinein. Ich möchte nun verhindern, dass eine andere Anwendung währenddessen lesend zugreift und z.B. nur 700 Datensätze sieht, weil die restlichen 300 noch nicht geschrieben sind. Ich suche also eigentlich nach einer Methode, in einem Rutsch alle 1000 Datensätze neu zu schreiben und die Tabelle währenddessen zu blockieren, bis ich fertig bin.
|
Re: ADO-Tabelle löschen und neu füllen
Und warum fügst Du nicht alle Inserts auf einmal in die Tabelle?
etwa so:
SQL-Code:
Könnt bei 1000 Einträgen ein etwas langer String werden!
INSERT INTO Tabelle (Nummer,Status) VALUES (1,'neu'),(2,'neu'),(3,'neu')
Alternativ müsstest Du die DB exklusiv öffnen. |
Re: ADO-Tabelle löschen und neu füllen
Hallo,
das muss einfach im Rahmen einer einzelnen Transaktion erfolgen Connection.StartTransaction / BeginTransaction Delete Inserts Connection.Commit Inwiefern Access in der Realität damit klarkommt, musst du ausprobieren. Heiko |
Re: ADO-Tabelle löschen und neu füllen
Leider unterstützt Access/Jet keine Rechtevergabe per SQL.
Wen du nur Inserts machen willst und keine Updates ist es doch,bis auf Ausnahmefälle, völlig Rille. Anders wäe es bei Updates. Für solche Fälle sieht die Standardkomponente "ADOConnection" lediglich die Attribute: CommitRetaining und AbortRetaining vor, sowie den Isolationlevel. Beide bestimmen das Verhalten während laufender Transaktionen. Grüße |
Re: ADO-Tabelle löschen und neu füllen
Moin, moin,
also mit Ado und Access würde ich das mit Folgendem angehen...
Delphi-Quellcode:
Grüße in die Runde // Martinvar Level: integer; begin // Query bereit machen if ADOQuery.Active then ADOQuery.Active := false ADOQuery. Clear; Level:=ADOConnection1.BeginTrans; try //------------------------- // Datenbankoperationen //------------------------- . . . ADOQuery.Add('Update .... ADOQuery.Exceute . . . //------------------------- //------------------------- ADOConnection1.CommitTrans; except on E:Exception do begin ADOConnection1.RollbackTrans; end; end;//try ADOQuery.Active := false; ADOQuery. Clear; end; |
Re: ADO-Tabelle löschen und neu füllen
Danke für Eure Antworten! Die Lösung mit BeginTrans und CommitTrans werde ich jetzt mal erproben!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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