Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO-Tabelle löschen und neu füllen (https://www.delphipraxis.net/136151-ado-tabelle-loeschen-und-neu-fuellen.html)

Frederika 24. Jun 2009 15:44

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!

Privateer3000 24. Jun 2009 15:56

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.

Frederika 24. Jun 2009 16:34

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.

Starstruck 24. Jun 2009 17:25

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:
INSERT INTO Tabelle (Nummer,Status) VALUES (1,'neu'),(2,'neu'),(3,'neu')
Könnt bei 1000 Einträgen ein etwas langer String werden!
Alternativ müsstest Du die DB exklusiv öffnen.

hoika 24. Jun 2009 18:26

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

Privateer3000 25. Jun 2009 06:03

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

mschaefer 25. Jun 2009 08:56

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:

var 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;
Grüße in die Runde // Martin

Frederika 30. Jun 2009 09:12

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 04:53 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