Seite 1 von 1

Eine SQLite Datenbank in eine weitere Einfügen

Verfasst: 26.02.2019 19:14
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!

Re: Eine SQLite Datenbank in eine weitere Einfügen

Verfasst: 26.02.2019 19:53
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.

Re: Eine SQLite Datenbank in eine weitere Einfügen

Verfasst: 27.02.2019 11:18
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!

Re: Eine SQLite Datenbank in eine weitere Einfügen

Verfasst: 27.02.2019 19:23
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.

Re: Eine SQLite Datenbank in eine weitere Einfügen

Verfasst: 27.02.2019 22:06
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

Re: Eine SQLite Datenbank in eine weitere Einfügen

Verfasst: 27.02.2019 23:23
von mk-soft
Cool :allright:

Man kann also in die Basis Datenbank weiter externe Datenbanken einhängen...

Re: Eine SQLite Datenbank in eine weitere Einfügen

Verfasst: 02.03.2019 13:48
von Velindos
Hallo Kiffi!

Hab´s EINGEBAUT und Funzt!

DANKE, Kiffi!

Gruss ... Velindos!

Re: Eine SQLite Datenbank in eine weitere Einfügen

Verfasst: 05.03.2019 07:42
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!

Re: Eine SQLite Datenbank in eine weitere Einfügen

Verfasst: 05.03.2019 11:13
von Kiffi
verstehe ich jetzt nicht. Nun doch nicht mit Attach / Detach?

Re: Eine SQLite Datenbank in eine weitere Einfügen

Verfasst: 05.03.2019 11:56
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!