Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQLite, ZeosDB - drop table - Database is locked (https://www.delphipraxis.net/212714-sqlite-zeosdb-drop-table-database-locked.html)

cltom 20. Mär 2023 16:38

Datenbank: SQLite • Version: 3.41.1 • Zugriff über: ZeosDB

SQLite, ZeosDB - drop table - Database is locked
 
Hallo,
um den Typ eines Feldes zu ändern, hab ich folgendes Skript, das ich via TZSQLProcessor ablaufen lassen möchte:

Code:
CREATE TABLE "FCustomer_new" (
   "MeasurementID"  VARCHAR(255) NOT NULL,
   "AccountName"  VARCHAR(255),
   "City"  VARCHAR(55),
   "Country"  VARCHAR(55),
   "Site"  VARCHAR(55),
   "Units"  VARCHAR(55),
   PRIMARY KEY("MeasurementID")
);
INSERT INTO
FCustomer_new
(MeasurementID, AccountName, City, Country, Site, Units)
SELECT
MeasurementID, AccountName, City, Country, Site, Units
FROM FCustomer;
DROP TABLE FCustomer;
ALTER TABLE FCustomer_new RENAME TO FCustomer;
Beim drop table kommt die Meldung "Database locked". Nun findet man dazu viele Hilferufe im Netz, ich hab bis dato keinen gefunden, der eine Lösung zeigt. Es scheint, als wäre das INSERT noch nicht abgeschlossen.

Danke für Hinweise!

Delphi.Narium 20. Mär 2023 16:41

AW: SQLite, ZeosDB - drop table - Database is locked
 
Hinter das Insert mal ein Commit gemacht?

cltom 20. Mär 2023 16:45

AW: SQLite, ZeosDB - drop table - Database is locked
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1520119)
Hinter das Insert mal ein Commit gemacht?

ja, hatte ich probiert, da kommt die Meldung ebenso. Der Unterschied nur, dass die neue Tabelle bereits angelegt wird. Ohne das Commit wird die Änderung noch nicht geschrieben.

So sieht der Teil aus, mit dem ich das Skript übergebe:

Delphi-Quellcode:
var
procedure TDatabaseExchange.ExecuteSQLFromFile(SQLFileName: string);
  zpr : TZSQLProcessor;
begin
  zpr := TZSQLProcessor.Create(nil);
  zpr.Connection := zco_db;
  zpr.Script.Clear;
  zpr.LoadFromFile(SQLFileName);
  zco_db.StartTransaction;
  try
    zpr.Execute;
  except
    zco_db.Rollback;
  end;
  zco_db.Commit;
end;

cltom 31. Mär 2023 08:06

AW: SQLite, ZeosDB - drop table - Database is locked
 
Als Ergänzung/sanfter push: das gleiche Skript läuft problemlos im DBBrowser durch. Es scheint also irgendwas mit der ZeosDB-Anbindung zu haben?

Jumpy 31. Mär 2023 08:59

AW: SQLite, ZeosDB - drop table - Database is locked
 
Kannst du nicht die Reihenfolge umkehren:

Rename F_Customer zu F_Customer_Old
Erzeuge die neue leere F_Customer Tabelle
Kopiere die Daten von F_Customer_Old nach F_Customer (neu)
Lösche F_Customer_Old

Wenn das auch meckert muss man das letzt löschen ggf. in eine eigene Funktion/Script dass dann in einer neuen Transaktion läuft packen.

cltom 1. Apr 2023 06:14

AW: SQLite, ZeosDB - drop table - Database is locked
 
Zitat:

Zitat von Jumpy (Beitrag 1520504)
Kannst du nicht die Reihenfolge umkehren:

Rename F_Customer zu F_Customer_Old
Erzeuge die neue leere F_Customer Tabelle
Kopiere die Daten von F_Customer_Old nach F_Customer (neu)
Lösche F_Customer_Old

Wenn das auch meckert muss man das letzt löschen ggf. in eine eigene Funktion/Script dass dann in einer neuen Transaktion läuft packen.

Bei der Reihenfolge hab ich mich an das hier gehalten: https://www.sqlite.org/lang_altertable.html. Da ist die obige Reihenfolge explizit als nicht korrekt angegeben.

Zwei Skripts hintereinander kann ich versuchen. Also das löschen als eigenes Skript nachschalten. Wollte nur verstehen, warum das so nicht geht.

cltom 3. Apr 2023 14:34

AW: SQLite, ZeosDB - drop table - Database is locked
 
hmm, selbst wenn ich das ganze Skript aufteile auf zwei Skripts und das umbenennen und löschen aufteile, kommt die Meldung. Muss man die Connection nach dem ersten Skript schließen und eine zweite wieder aufmachen für das rename und drop table?

QuickAndDirty 4. Apr 2023 15:37

AW: SQLite, ZeosDB - drop table - Database is locked
 
Kann man mit ZeosDB Locktype und Isolation-level einstellen?

cltom 9. Jun 2023 14:53

AW: SQLite, ZeosDB - drop table - Database is locked
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1520664)
Kann man mit ZeosDB Locktype und Isolation-level einstellen?

Isolation-Level kann man offenbar einstellen ja!

cltom 9. Jun 2023 14:54

AW: SQLite, ZeosDB - drop table - Database is locked
 
Als Auflösung: hab nun zwei Skripts gemacht und mache die ZConnection vor jedem Skript auf und wieder zu. So klappt es.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10: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