Eine SQLite Datenbank in eine weitere Einfügen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Eine SQLite Datenbank in eine weitere Einfügen

Beitrag von Velindos »

Hallo Leute,

ich möchte an eine bestehende SQLite Datenbank eine weitere gleich SQLite Datenbank einfügen!

; Bestehend öffnen

Code: Alles auswählen

If OpenDatabase(DB_Bestehend, Database_Bestehend$, "", "", #PB_Database_SQLite)
  ; Dazu Database öffnen!
  If OpenDatabase(DB_Dazu, Database_Dazu$, "", "", #PB_Database_SQLite)
    ; Query
    DatabaseQuery(DB_Bestehend, "Select * From Velindos")
    ; Abfrage und Dazu geben!
    While NextDatabaseRow(DB_Bestehend)
      ???? holen und einfügen nach Record
      
      
      
      
    Wend 
  EndIf
  FinishDatabaseQuery(DB_Dazu)
  CloseDatabase(DB_Dazu)
  FinishDatabaseQuery(DB_Bestehend)
  CloseDatabase(DB_Bestehend)
EndIf
Hat jemand damit bereits Erfahrung!

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
mk-soft
Beiträge: 3700
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Eine SQLite Datenbank in eine weitere Einfügen

Beitrag von mk-soft »

Wenn du Zwei Datenbanken (also zwei Dateien von Type SQLite) hast, Kannst/must du diese halt auch zwei mal mit OpenDataBase öffnen.
Steht ja nichts nicht da gegen mehrere Datenbanken zu öffnen.
Es müssen aber die Daten immer über Dein Programm laufen. Eine Quer-Kommunikation zwischen den Datenbanken mit SQL-Befehlen ist nicht möglich.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Eine SQLite Datenbank in eine weitere Einfügen

Beitrag von Velindos »

Hallo mk-soft!

Verstehe ich das Richtig, das ich beide Öffne und die Variablen einzeln Einlese und diese an die Zielbase einzel Übergebe und anschliessen ein Update fahre.
Es müssen aber die Daten immer über Dein Programm laufen
Es gibt also keinen Befehl wo ich den gesamten Base Record nehme und ihn in die andere Base Schreibe?

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Bisonte
Beiträge: 2429
Registriert: 01.04.2007 20:18

Re: Eine SQLite Datenbank in eine weitere Einfügen

Beitrag von Bisonte »

Nein. Du musst einen Datensatz selbst auslesen und dann kannst du ihn in die andere DB schreiben. So war das von meinen Vorrednern gemeint.
Einen Befehl gibt es für sowas nicht. Auch nicht in SQL92 selbst.
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Eine SQLite Datenbank in eine weitere Einfügen

Beitrag von Kiffi »

hiermit geht's am schnellsten (Attach -> 1 x Insert Into -> Detach):

Code: Alles auswählen

EnableExplicit

UseSQLiteDatabase()

Procedure CheckDatabaseUpdate(Database, Query$)
  Protected Result
  Result = DatabaseUpdate(Database, Query$)
  If Result = 0
    Debug DatabaseError()
  EndIf
  ProcedureReturn Result
EndProcedure

Define DatabaseFile_Source.s = GetTemporaryDirectory() + "test1.db"
Define DatabaseFile_Target.s = GetTemporaryDirectory() + "test2.db"

DeleteFile(DatabaseFile_Source)
DeleteFile(DatabaseFile_Target)

Define FF, DB_Source, DB_Target

; Create test-databases

If FileSize(DatabaseFile_Source) = -1
  FF = CreateFile(#PB_Any, DatabaseFile_Source)
  If FF
    CloseFile(FF)
    DB_Source = OpenDatabase(#PB_Any, DatabaseFile_Source, "", "")
    If DB_Source
      DatabaseUpdate(DB_Source, "CREATE TABLE food (name CHAR(50), weight INT)")
      CheckDatabaseUpdate(DB_Source, "INSERT INTO food (name, weight) VALUES ('apple', '10')")
      CheckDatabaseUpdate(DB_Source, "INSERT INTO food (name, weight) VALUES ('pear', '5')")
      CheckDatabaseUpdate(DB_Source, "INSERT INTO food (name, weight) VALUES ('banana', '20')")
      CloseDatabase(DB_Source)
    EndIf
  EndIf
EndIf

If FileSize(DatabaseFile_Target) = -1
  FF = CreateFile(#PB_Any, DatabaseFile_Target)
  If FF
    CloseFile(FF)
    DB_Target = OpenDatabase(#PB_Any, DatabaseFile_Target, "", "")
    If DB_Target
      DatabaseUpdate(DB_Target, "CREATE TABLE food (name CHAR(50), weight INT)")
      CloseDatabase(DB_Target)
    EndIf
  EndIf
EndIf

; ---

DB_Source = OpenDatabase(#PB_Any, DatabaseFile_Source, "", "")

If DB_Source
  
  DB_Target = OpenDatabase(#PB_Any, DatabaseFile_Target, "", "")
  
  If DB_Target
    
    DatabaseUpdate(DB_Source, "ATTACH DATABASE '" + DatabaseFile_Target + "' AS AttachedDatabase")
    
    CheckDatabaseUpdate(DB_Source, "INSERT INTO AttachedDatabase.food SELECT * FROM food")
    
    If DatabaseQuery(DB_Target, "SELECT * FROM food")
      
      While NextDatabaseRow(DB_Target)
        Debug GetDatabaseString(DB_Target, 0)
      Wend
      
      FinishDatabaseQuery(DB_Target)
      
    EndIf
    
    DatabaseUpdate(DB_Source, "DETACH DATABASE AttachedDatabase")
    
    CloseDatabase(DB_Target)
    
  Else
    Debug "Can't open DatabaseFile_Target"
  EndIf
  
  CloseDatabase(DB_Source)
  
Else
  
  Debug "Can't open DatabaseFile_Source"
  
EndIf
Grüße ... Peter
Hygge
Benutzeravatar
mk-soft
Beiträge: 3700
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Eine SQLite Datenbank in eine weitere Einfügen

Beitrag von mk-soft »

Cool :allright:

Man kann also in die Basis Datenbank weiter externe Datenbanken einhängen...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Eine SQLite Datenbank in eine weitere Einfügen

Beitrag von Velindos »

Hallo Kiffi!

Hab´s EINGEBAUT und Funzt!

DANKE, Kiffi!

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Eine SQLite Datenbank in eine weitere Einfügen

Beitrag von Velindos »

Hallo Leute,
momentan lese und Schreibe ich nach den Spalten der Base.
Gibt es eine Möglichkeit den gesamten Record einzulesen und
über eine Varibale weiterzugeben!

Code: Alles auswählen

Source_key = "12"
; LESEN nach RECORD
If OpenDatabase(Source, Database_File$, "", "", #PB_Database_SQLite)
  DatabaseQuery(Source, "Select * From Velindos WHERE ID ="+ Source_key)
  While NextDatabaseRow(Source)
    ; [Record lesen, aber wie???] 
    SQL_Record$ = Get.....(Source,0)
  Wend
  FinishDatabaseQuery(Source)
  CloseDatabase (Source)
Else
  MessageRequester("Database", "Fehlende Database")
EndIf

Code: Alles auswählen

; Schreiben nach RECORD
If OpenDatabase(Target, Database_File$, "", "", #PB_Database_SQLite)
  ; Bild laden
  SetDatabaseBlob(Target, 0, *ImageMemory, ImageMemSize)
  ; BASE
  DatabaseUpdate(Target,SQL_Record$)
  ;Datenbank schliessen
  CloseDatabase(Target)
Else
  MessageRequester("Database", "Fehlende Database")
EndIf
Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Eine SQLite Datenbank in eine weitere Einfügen

Beitrag von Kiffi »

verstehe ich jetzt nicht. Nun doch nicht mit Attach / Detach?
Hygge
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Eine SQLite Datenbank in eine weitere Einfügen

Beitrag von Velindos »

Hallo Kiffi!
Attach / Detach? Doch/Doch/Doch..
Spass bei Seite! Eingie Base´s übernehme ich wie oben. Aber und jetzt kommt´s, sortiere ich die Base in einem Listicon und möchte Sie in einen Rutsch übernehmen ...

Da die Bases gleich sind wäre es ein Vorteil mit Record zu arbeiten, wenn´s geht!

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Antworten