Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   drop database (https://www.delphipraxis.net/211302-drop-database.html)

bernhard_LA 27. Aug 2022 12:25

Datenbank: MSSQL • Version: 12 • Zugriff über: ADO

drop database
 
wir versuchen während der Ausführung unserer unit tests die benutzen Testdatenbanken zu löschen.
Was wäre die beste Code Erweiterung um sinnvoll auf eine "database in use" Fehlermeldung zu reagieren



Delphi-Quellcode:
   

    SqlStr := ' drop database ' + DatabaseName;
    aDatabaseConnection.Execute('use master');
    aDatabaseConnection.Execute(SqlStr);

Bernhard Geyer 27. Aug 2022 12:53

AW: drop database
 
Den Drop haben wir bei uns nicht drin, da das anlegen der DB(Spaces) + Zuweisung der User mit Berechtigung für unsere App eine Aktion der DB-Admins ist.
Wir setzen erst auf mit Create/drop table

Uwe Raabe 27. Aug 2022 12:59

AW: drop database
 
Für Unit-Tests versuche ich die Verwendung zentral genutzter Datenbanken zu vermeiden. Für MS-SQL funktioniert da ganz gut SQL Server Express LocalDB

himitsu 27. Aug 2022 13:43

AW: drop database
 
Es gibt doch bestimmt ein SELECT, um die aktiven Connections zu bekommen und dann zu trennen, vor dem DROP.

HolgerX 27. Aug 2022 20:03

AW: drop database
 
Hmm...

Setze doch zunächst folgenden SQL ab:

ALTER DATABASE <Databasename> SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

Damit wird die Datenbank auf SingleUser = Deine aktuelle gesetzt und alle anderen Connections zurück gesetzt und gekickt...
Dann kannst Du die DB löschen da niemand anderes mehr auf der DB sein kann!!

Quick an dirty, aber läuft.

Wenn Du die Sessions anderer Clients auslesen willst dann braucht dein Login-User erweiterte Rechte..

TigerLilly 29. Aug 2022 07:50

AW: drop database
 
Wie Uwe sagt: besser keine DBs verwenden, wo andere auch dranhängen können. Die werden nämlich keine Freude haben, wenn ihnen wer die DB unterm Hintern wegzieht. :-/
Wir verwenden für Unit-Test - wenn ein definierter DB-Zustand Voraussetzung ist, eine eigene DB je Testlauf. Die BAK-Datei enthält den Datenbestand + der Testlauf zieht sich die DB mit einem eindeutigen Namen hoch + entfernt sie anschließend wieder.


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