Datenbank (Datei) löschen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: Datenbank (Datei) löschen

Beitrag von marcelx »

SUPER - mit ein Delay funktionniert
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: Datenbank (Datei) löschen

Beitrag von marcelx »

Zu früh gefreut, es geht nicht immer
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Datenbank (Datei) löschen

Beitrag von NicTheQuick »

Ich vermute immer noch den Virenscanner dahinter. Oder andauernde Aufräumarbeiten der SQLite-Engine im Hintergrund und vielleicht wartet 'CloseDatabase()' nicht bis die beendet wurden. Vor allem bei einer großen Datenbank könnte das der Grund sein.
Bild
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Datenbank (Datei) löschen

Beitrag von mk-soft »

Funktioniert hier unter Windows 10 und PB v5.73 und v6.00 einwandfrei.

Aber vielleicht das mal lesen ...

Link: https://www.sqlite.org/c3ref/close.html

Vielleicht hat Nic recht.


Versuch mal ...

Update

Code: Alles auswählen

; **** SQL Datenbank schliessen ***

Import ""
  sqlite3_close(*sqlite3)
EndImport

#SQLITE_OK = 0
#SQLITE_BUSY = 5

Structure udtDatabaseObject
  i.i[0]
EndStructure

Procedure CloseSQLiteDatabase(Database, Timeout = 20000)
  Protected r1, id, time, *db_object.udtDatabaseObject
  
  If Not IsDatabase(Database)
    ProcedureReturn 0
  EndIf
  
  id = DatabaseID(Database)
  *db_object = IsDatabase(Database)
  Repeat
    r1 = sqlite3_close(id)
    If r1 = #SQLITE_OK
      *db_object\i[4] = 0 ; Set handle to Nil (Offset 4)
      Break
    ElseIf r1 = #SQLITE_BUSY
      If time = 0
        Debug "Datenbank in bearbeitung, bitte warten ... "
      EndIf
      time + 100
      Delay(100)
      If time > Timeout ; Millisekunden
        Debug "Fehler Datenbank schliessen Timeout!"
        Break
      EndIf
    Else
      Debug "Fehler Datenbank schliessen Fehlercode " + r1
      Break
    EndIf
  ForEver
  CloseDatabase(Database)
EndProcedure

; ****
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: Datenbank (Datei) löschen

Beitrag von marcelx »

Guten Morgen

ich probiere dein code und bekomme die Meldung "Ungültiger Speicherzugriff" (unter v5.31) bei

*db_object\i[4] = 0 ; Set handle to Nil (Offset 4)
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Datenbank (Datei) löschen

Beitrag von TroaX »

Haha lol ich Depp. Warum einfach, wenn es auch kompliziert geht:

Code: Alles auswählen

While DeleteFile(GetTemporaryDirectory()+Filename+".db") <> 0 ; Schleife läuft, bis die Datei gelöscht werden kann
  Delay(1) ; Schleife gibt Prozessorzeit frei und friert das Programm nicht direkt ein
Wend
; Kommst du hier an, ist die Datei gelöscht!!
Hach das kommt davon, wenn man fast nur noch mit PWA und Backends herumspielt. Dann kommt man auf so banale Lösungen nicht. :bounce:

Was ich aber nicht so ganz verstehe. Warum erzeugst du eine Datenbank, arbeitest mit dieser, aber löscht sie im selben Atemzug wieder, wenn du fertig bist? Macht das nicht ein wenig den Sinn von Datenbanken kaputt? Wenn nur Daten drin stehen, die du während der Ausführung des Programms benötigst, aber nicht permanent speichern willst, macht es meiner Meinung mehr Sinn, diese im RAM zu lassen.
Zuletzt geändert von TroaX am 19.01.2022 11:46, insgesamt 1-mal geändert.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Datenbank (Datei) löschen

Beitrag von NicTheQuick »

Du solltest vielleicht noch einen Timeout einbauen, falls es mal wirklich nicht geht oder die Datei schon gelöscht bzw. nie erstellt wurde. Man weiß ja nie. Aber ansonsten hängst du ja in einer Schleife fest. Das Delay(1) ist für meinen Geschmack auch etwas zu kurz, aber um die CPU-Nutzung niedrig zu halten, reicht es vermutlich trotzdem.
Bild
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Datenbank (Datei) löschen

Beitrag von TroaX »

NicTheQuick hat geschrieben: 19.01.2022 11:46 Du solltest vielleicht noch einen Timeout einbauen, falls es mal wirklich nicht geht oder die Datei schon gelöscht bzw. nie erstellt wurde. Man weiß ja nie. Aber ansonsten hängst du ja in einer Schleife fest. Das Delay(1) ist für meinen Geschmack auch etwas zu kurz, aber um die CPU-Nutzung niedrig zu halten, reicht es vermutlich trotzdem.
Na ich wollte jetzt nu nicht alles vorkauen. :mrgreen:
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: Datenbank (Datei) löschen

Beitrag von marcelx »

So einfach ist es nicht.
Das Löschen ist immer fehlerhaft. in so eine loop lauft auf Ewigkeit.
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: Datenbank (Datei) löschen

Beitrag von marcelx »

Zur Erläuterung:
DB werden in eine Programm erzeugt.
Diese vorhandene Datenbanken werden als List angezeigt.
Der benutzen kann die Daten aus eine DB per doppelklick ansehen und z.B. die Daten drucken, ändern und so. und die DB löschen
Win-10, PB 5.31 (Windows - x86)
Antworten