Aktuelle Zeit: 18.10.2018 09:34

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: SQLite kopieren
BeitragVerfasst: 06.11.2017 17:02 
Offline
Benutzeravatar

Registriert: 15.11.2010 10:56
SQLite kopieren

Hallo Leute,

möchte aus meiner aktuellen gewählten Base über ein Listicon sortierte Datensätze in einer
Base_Kopie speichern!

Nun habe ich zwar eine Lösung, aber die Funzt sehr, sehr langsam.

Ausserdem reagiert das Window nicht, geschweige der Focus im ListIconGadget!!!

Code:
Procedure Datenbank_Kopie()
  Protected Target = 2
  Protected Source = 1
  Protected Bildspalte = 5
  Protected SQL.s
 
  Protected LoopZeiger = 0
  Protected Aktueller_Base_Verezichniss$
  Protected Aktueller_Base_Name$
  Protected Kopie_Base_Name$
  Protected Kopie_Base_File$
  Protected Recordzeiger
  ; --------------------------------
  ; #Zuerst den Record aufrufen
  ListIcon_FocusReset()
  ; --------------------------------
  ;{ Neue Base anlegen
  Aktueller_Base_Verezichniss$ = GetPathPart(DatabaseFile$)
  ; ------------------------------
  ; Database FileName
  Aktueller_Base_Name$ = GetFilePart(DatabaseFile$,#PB_FileSystem_NoExtension)
  ; ------------------------------
  ; Filenamen kopieren
  Kopie_Base_Name$ = Aktueller_Base_Name$ + "_Kopie"
  ; ------------------------------
  ; Base File
  Kopie_Base_File$ = Aktueller_Base_Verezichniss$ + Kopie_Base_Name$
  ; ------------------------------
  ; Neue Base Anlegen
  Datenbank_Anlegen(Kopie_Base_File$)
  ; ************* 
  ;Rettung
  Rtg_ListIconzeile = ListIconZeile
  ;}
  ; ************* 
  ;{ SQLite KOPIEREN
  For Recordzeiger = 0 To WahlLetzter
    ;{ Record Zähler einrichten
    ListIcon_Record$ = GetGadgetItemText(#Work_L_ListIcon,Recordzeiger,ListIconSpalteRecord)
    ;}
    ;{ BASE lesen
    If OpenDatabase(Source, DatabaseFile$, "", "", #PB_Database_SQLite)
      DatabaseQuery(Source, "Select * From Velindos WHERE ID ="+ ListIcon_Record$)
      While NextDatabaseRow(Source)
        Read_KEYID$= GetDatabaseString(Source,0)
        Read_STICHWORT$= GetDatabaseString(Source,1)
        ; NOTIZ wegen Richtext
        Read_NOTIZ$ = GetDatabaseString(Source,2)
        Read_NOTIZ$ = ReplaceString(Read_NOTIZ$, "'", "''")
        Read_PFAD$  = GetDatabaseString(Source,3)
        Read_Genre$ =GetDatabaseString(Source,4)
        ; ------------------------------------------------
        ; Bild
        If DatabaseColumnType(Source, Bildspalte) = #PB_Database_Blob
          MemSize = DatabaseColumnSize(Source,Bildspalte)
          If MemSize
            ; AllocateMemory
            *ImageMemory = AllocateMemory(MemSize)
            Debug "MemSize= "+MemSize
            ; Memory
            If *ImageMemory
              If GetDatabaseBlob(Source, Bildspalte, *ImageMemory,MemSize)
                ; ------------------------------------------------
                Debug  "Read_KEYID$= "+Read_KEYID$
                Debug  "Read_STICHWORT$= "+Read_STICHWORT$
                Debug  "Read_NOTIZ$= "+Read_NOTIZ$
                Debug  "Read_PFAD$= "+Read_PFAD$
                Debug  "Read_Genre$= "+Read_Genre$
                Debug  "Read_Ordner$= "+Read_Ordner$
                Debug  "Read_CODEC$= "+Read_CODEC$
                Debug  "Read_Source$= "+Read_Source$
                Debug  "Read_Artikel$= "+Read_Artikel$
                ; --------------------------------
                Debug "LoopZeiger= " +LoopZeiger
              Else
                Debug "GetDatabaseBlob ist fehlgeschlagen"
              EndIf
              ;FreeMemory(*ImageMemory)
            Else
              Debug "Nicht genügend Speicher vorhanden"
            EndIf
          Else
            Debug "picsize is null"
          EndIf
        Else
          Debug "DatabaseColumnType(0, 1) ist kein Blob"
        EndIf
        ; ------------------------------------------------
        Read_Ordner$ = GetDatabaseString(Source,6)
        Read_CODEC$ = GetDatabaseString(Source,7)
        Read_Source$ = GetDatabaseString(Source,8)
        Read_Artikel$ =GetDatabaseString(Source,9)
        ; ------------------------------------------------
      Wend
      FinishDatabaseQuery(Source)
      CloseDatabase (Source)
    Else
      MessageRequester("Database", "Fehlende Database")
    EndIf
    ; ------------------------------------------------
    ;}
    ;{ FOCUS
    ;Zeiger  setzen
    SendMessage_(GadgetID(#Work_L_ListIcon),#LVM_ENSUREVISIBLE,ListIconZeile,0)   
    ; FOCUS auf Zeile
    SetGadgetState(#Work_L_ListIcon, ListIconZeile)
    ; Aktivited
    SetActiveGadget(#Work_L_ListIcon)
    ;}
    ;{ BASE schreiben
    If OpenDatabase(Target, Kopie_Base_File$, "", "", #PB_Database_SQLite)
      ; Bild laden
      SetDatabaseBlob(Target, 0, *ImageMemory, MemSize)
      ; ************* 
      ; SQL String new
      SQL = "Insert Into Velindos (Stichwort, Notiz, Pfad, Genre, myBild, Ordner, Codec, Source, Artikel) Values "
      SQL + " ('"+Read_STICHWORT$+"','"+Read_NOTIZ$+"','"+Read_PFAD$+"','"+Read_GENRE$+"',?,'"+Read_Ordner$+"','"+Read_Codec$+"','"+Read_Source$+"','"+Read_Artikel$+"');"
      ; INSERT BASE
      If DatabaseUpdate(Target, SQL)
        Debug "Datensatz eingefügt"
      EndIf
      ; FreeMemory
      FreeMemory(*ImageMemory)
      CloseDatabase(Target)
    Else
      Debug DatabaseError()
      MessageRequester("Database", "Fehlende Database")
    EndIf
    ;}
  Next
  ;}
 
  ; ************* 
 
  ;{ FERTIG
  ; #Zuerst den Record aufrufen
  ; ===========
  ; ListIcon_FocusReset()
  DatabaseFile$ = Kopie_Base_File$
  ; ===========
  Datenbank_Wahl()
  ; ===========
  ;Rettung
  ListIconZeile = Rtg_ListIconzeile
  ; ===========
  ; Key
  Datenbank_Key()
  ; ===========
  ; #Zuerst den Record aufrufen
  ListIcon_FocusSet()
  ;}
 
EndProcedure


Jemand einen Tip wie ich die Sache beschleunigen kann?

Gruss ... Velindos

_________________
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.43 LTS (32/64-Bit)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQLite kopieren
BeitragVerfasst: 06.11.2017 18:17 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
Velindos hat geschrieben:
Nun habe ich zwar eine Lösung, aber die Funzt sehr, sehr langsam.

das ist kein Wunder, denn für jeder Kopieraktion öffnest und schließt Du sowohl Quell- als auch Zieldatenbank.

Vorschlag: Zu Beginn der Kopieraktion beide Datenbanken öffnen und erst zum Schluss beide schließen. Das sollte schon mal was an Geschwindigkeit bringen.

Den größten Performance-Schub wirst Du allerdings haben, wenn Du alle DatabaseUpdate() - Befehle mit einer Transaktion klammerst.

siehe z.B. hier: http://www.purebasic.fr/german/viewtopic.php?p=342309#p342309

Grüße ... Peter

_________________
einfach ist schwierig


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQLite kopieren
BeitragVerfasst: 06.11.2017 19:38 
Offline
Benutzeravatar

Registriert: 15.11.2010 10:56
Hallo,

habe die Sache abgeändert, funzt sehr langsam!

Code:
Procedure Datenbank_Kopie()
  Protected Target = 2
  Protected Source = 1
  Protected Bildspalte = 5
  Protected SQL.s
 
  Protected LoopZeiger = 0
  Protected Aktueller_Base_Verezichniss$
  Protected Aktueller_Base_Name$
  Protected Kopie_Base_Name$
  Protected Kopie_Base_File$
  Protected Recordzeiger
  ; --------------------------------
  ; #Zuerst den Record aufrufen
  ListIcon_FocusReset()
  ; --------------------------------
  ;{ Neue Base anlegen
  Aktueller_Base_Verezichniss$ = GetPathPart(DatabaseFile$)
  ; ------------------------------
  ; Database FileName
  Aktueller_Base_Name$ = GetFilePart(DatabaseFile$,#PB_FileSystem_NoExtension)
  ; ------------------------------
  ; Filenamen kopieren
  Kopie_Base_Name$ = Aktueller_Base_Name$ + "_Kopie.db"
  ; ------------------------------
  ; Base File
  Kopie_Base_File$ = Aktueller_Base_Verezichniss$ + Kopie_Base_Name$
  ; ------------------------------
  ; Neue Base Anlegen
  Datenbank_Anlegen(Kopie_Base_File$)
  ; *************
  ;Rettung
  Rtg_ListIconzeile = ListIconZeile
  ;}
  ; *************
  If OpenDatabase(Source, DatabaseFile$, "", "", #PB_Database_SQLite)
     
      ;{ SQLite KOPIEREN
      For Recordzeiger = 0 To WahlLetzter-1
        ;{ Record Zähler einrichten
        ListIcon_Record$ = GetGadgetItemText(#Work_L_ListIcon,Recordzeiger,ListIconSpalteRecord)
        ;}
        Debug "Recordzeiger= "+Recordzeiger
        ;{ BASE lesen
        DatabaseQuery(Source, "Select * From Velindos WHERE ID ="+ ListIcon_Record$)
        While NextDatabaseRow(Source)
          Read_KEYID$= GetDatabaseString(Source,0)
          Read_STICHWORT$= GetDatabaseString(Source,1)
          ; NOTIZ wegen Richtext
          Read_NOTIZ$ = GetDatabaseString(Source,2)
          Read_NOTIZ$ = ReplaceString(Read_NOTIZ$, "'", "''")
          Read_PFAD$  = GetDatabaseString(Source,3)
          Read_Genre$ =GetDatabaseString(Source,4)
          ; ------------------------------------------------
          ; Bild
          If DatabaseColumnType(Source, Bildspalte) = #PB_Database_Blob
            MemSize = DatabaseColumnSize(Source,Bildspalte)
            If MemSize
              ; AllocateMemory
              *ImageMemory = AllocateMemory(MemSize)
              Debug "MemSize= "+MemSize
              ; Memory
              If *ImageMemory
                If GetDatabaseBlob(Source, Bildspalte, *ImageMemory,MemSize)
                  ; ------------------------------------------------
                  Debug  "Read_KEYID$= "+Read_KEYID$
                  Debug  "Read_STICHWORT$= "+Read_STICHWORT$
                  Debug  "Read_NOTIZ$= "+Read_NOTIZ$
                  Debug  "Read_PFAD$= "+Read_PFAD$
                  Debug  "Read_Genre$= "+Read_Genre$
                  Debug  "Read_Ordner$= "+Read_Ordner$
                  Debug  "Read_CODEC$= "+Read_CODEC$
                  Debug  "Read_Source$= "+Read_Source$
                  Debug  "Read_Artikel$= "+Read_Artikel$
                  ; --------------------------------
                  Debug "LoopZeiger= " +LoopZeiger
                Else
                  Debug "GetDatabaseBlob ist fehlgeschlagen"
                EndIf
                ;FreeMemory(*ImageMemory)
              Else
                Debug "Nicht genügend Speicher vorhanden"
              EndIf
            Else
              Debug "picsize is null"
            EndIf
          Else
            Debug "DatabaseColumnType(0, 1) ist kein Blob"
          EndIf
          ; ------------------------------------------------
          Read_Ordner$ = GetDatabaseString(Source,6)
          Read_CODEC$ = GetDatabaseString(Source,7)
          Read_Source$ = GetDatabaseString(Source,8)
          Read_Artikel$ =GetDatabaseString(Source,9)
          ; ------------------------------------------------
        Wend
       
        ; ------------------------------------------------
        ;}
        ;{ FOCUS
        ;Zeiger  setzen
        SendMessage_(GadgetID(#Work_L_ListIcon),#LVM_ENSUREVISIBLE,ListIconZeile,0)   
        ; FOCUS auf Zeile
        SetGadgetState(#Work_L_ListIcon, ListIconZeile)
        ; Aktivited
        SetActiveGadget(#Work_L_ListIcon)
        ;}
       
       
        ;{ BASE schreiben
        If OpenDatabase(Target, Kopie_Base_File$, "", "", #PB_Database_SQLite)
          ; *************
          ;PRAGMA schema.journal_mode = DELETE | TRUNCATE | PERSIST | MEMORY | WAL | OFF
          sql.s="PRAGMA journal_mode = MEMORY"
          DatabaseUpdate(Target,sql)
          Debug DatabaseError()
          DatabaseUpdate(Target,"begin transaction")
          ; *************
          ; Bild laden
          SetDatabaseBlob(Target, 0, *ImageMemory, MemSize)
          ; *************
          ; SQL String new
          SQL = "Insert Into Velindos (Stichwort, Notiz, Pfad, Genre, myBild, Ordner, Codec, Source, Artikel) Values "
          SQL + " ('"+Read_STICHWORT$+"','"+Read_NOTIZ$+"','"+Read_PFAD$+"','"+Read_GENRE$+"',?,'"+Read_Ordner$+"','"+Read_Codec$+"','"+Read_Source$+"','"+Read_Artikel$+"');"
          ; INSERT BASE
          If DatabaseUpdate(Target, SQL)
            Debug "Datensatz eingefügt"
          EndIf
          ; FreeMemory
          FreeMemory(*ImageMemory)
        Else
          MessageRequester("Database", "Fehlende Database")
        EndIf
        DatabaseUpdate(Target,"commit")
        CloseDatabase(Target)
       
        ;}
      Next
      ;}
      ; *************
      FinishDatabaseQuery(Source)
      CloseDatabase (Source)
  Else
    Debug DatabaseError()
    MessageRequester("Database", "Fehlende Database")
  EndIf
 
 
  ;{ FERTIG
  ; #Zuerst den Record aufrufen
  ; ===========
  ; ListIcon_FocusReset()
  DatabaseFile$ = Kopie_Base_File$
  ; ===========
  Datenbank_Wahl()
  ; ===========
  ;Rettung
  ListIconZeile = Rtg_ListIconzeile
  ; ===========
  ; Key
  Datenbank_Key()
  ; ===========
  ; #Zuerst den Record aufrufen
  ListIcon_FocusSet()
  ;}
 
EndProcedure


Gruss ... Velindos

_________________
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.43 LTS (32/64-Bit)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQLite kopieren
BeitragVerfasst: 06.11.2017 20:08 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Die Ziel-Datenbank wird immer noch ständig geöffnet und geschlossen...

Dann vielleicht noch die Daten direkt übergeben
Code:
...
DatabaseQuery(Source, "Select * From Velindos WHERE ID ="+ ListIcon_Record$)
While NextDatabaseRow(Source)
  ...
  SetDatabaseString(Target , 0, GetDatabaseString(Source,1))
  SetDatabaseString(Target , 1, GetDatabaseString(Source,2))
  SetDatabaseString(Target , 2, GetDatabaseString(Source,3))
  SetDatabaseString(Target , 3, GetDatabaseString(Source,3))
  ...
  SQL = "Insert Into Velindos (Stichwort, Notiz, Pfad, Genre, myBild, Ordner, Codec, Source, Artikel) Values "
  SQL + " (?,?,?,?,?,?,?,?,?);"
  ; INSERT BASE
  If DatabaseUpdate(Target, SQL)
    Debug "Datensatz eingefügt"
  EndIf
  ...
Wend
...

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQLite kopieren
BeitragVerfasst: 06.11.2017 20:38 
Offline
Benutzeravatar

Registriert: 15.11.2010 10:56
Hallo,
habe die Sache eingefügt. Er überträgt die Sätze, wenn ich die Base mit SQL Manager nachsehe, sehe ich ein Bild! und die einzelnen Datensätze.

Wenn ich jedoch mit dem Velindos zugreife bekommt er keine Bild mehr und stürzt!

Code:
Procedure Datenbank_Kopie()
  Protected Target = 2
  Protected Source = 1
  Protected Bildspalte = 5
  Protected SQL.s
 
  Protected LoopZeiger = 0
  Protected Aktueller_Base_Verezichniss$
  Protected Aktueller_Base_Name$
  Protected Kopie_Base_Name$
  Protected Kopie_Base_File$
  Protected Recordzeiger
  ; --------------------------------
  ; #Zuerst den Record aufrufen
  ListIcon_FocusReset()
  ; --------------------------------
  ;{ Neue Base anlegen
  Aktueller_Base_Verezichniss$ = GetPathPart(DatabaseFile$)
  ; ------------------------------
  ; Database FileName
  Aktueller_Base_Name$ = GetFilePart(DatabaseFile$,#PB_FileSystem_NoExtension)
  ; ------------------------------
  ; Filenamen kopieren
  Kopie_Base_Name$ = Aktueller_Base_Name$ + "_Kopie.db"
  ; ------------------------------
  ; Base File
  Kopie_Base_File$ = Aktueller_Base_Verezichniss$ + Kopie_Base_Name$
  ; ------------------------------
  ; Neue Base Anlegen
  Datenbank_Anlegen(Kopie_Base_File$)
  ; *************
  ;Rettung
  Rtg_ListIconzeile = ListIconZeile
  ;}
  ; *************
  If OpenDatabase(Source, DatabaseFile$, "", "", #PB_Database_SQLite)
    If OpenDatabase(Target, Kopie_Base_File$, "", "", #PB_Database_SQLite)
      ;PRAGMA schema.journal_mode = DELETE | TRUNCATE | PERSIST | MEMORY | WAL | OFF
      sql.s="PRAGMA journal_mode = MEMORY"
      DatabaseUpdate(Target,sql)
      Debug DatabaseError()
      DatabaseUpdate(Target,"begin transaction")
     
      ;{ SQLite KOPIEREN
      For Recordzeiger = 0 To WahlLetzter-1
        ;{ Record Zähler einrichten
        ListIcon_Record$ = GetGadgetItemText(#Work_L_ListIcon,Recordzeiger,ListIconSpalteRecord)
        ;}
        Debug "Recordzeiger= "+Recordzeiger
        ;{ BASE lesen
        DatabaseQuery(Source, "Select * From Velindos WHERE ID ="+ ListIcon_Record$)
        While NextDatabaseRow(Source)
         
          SetDatabaseString(Target , 0, GetDatabaseString(Source,1))
          SetDatabaseString(Target , 1, GetDatabaseString(Source,2))
          SetDatabaseString(Target , 2, GetDatabaseString(Source,3))
          SetDatabaseString(Target , 3, GetDatabaseString(Source,4))
          SetDatabaseString(Target , 4, GetDatabaseString(Source,5))
          SetDatabaseString(Target , 5, GetDatabaseString(Source,6))
          SetDatabaseString(Target , 6, GetDatabaseString(Source,7))
          SetDatabaseString(Target , 7, GetDatabaseString(Source,8))
          SetDatabaseString(Target , 8, GetDatabaseString(Source,9))
          SetDatabaseString(Target , 9, GetDatabaseString(Source,10))
        Wend
       
        ; ------------------------------------------------
        ;}
        ;{ FOCUS
        ;Zeiger  setzen
        SendMessage_(GadgetID(#Work_L_ListIcon),#LVM_ENSUREVISIBLE,ListIconZeile,0)   
        ; FOCUS auf Zeile
        SetGadgetState(#Work_L_ListIcon, ListIconZeile)
        ; Aktivited
        SetActiveGadget(#Work_L_ListIcon)
        ;}
       
       
        ;{ BASE schreiben
        ; *************
        ; *************
        ; Bild laden
        ; SetDatabaseBlob(Target, 0, *ImageMemory, MemSize)
        ; *************
        ; SQL String new
        ;           SQL = "Insert Into Velindos (Stichwort, Notiz, Pfad, Genre, myBild, Ordner, Codec, Source, Artikel) Values "
        ;           SQL + " ('"+Read_STICHWORT$+"','"+Read_NOTIZ$+"','"+Read_PFAD$+"','"+Read_GENRE$+"',?,'"+Read_Ordner$+"','"+Read_Codec$+"','"+Read_Source$+"','"+Read_Artikel$+"');"
        SQL = "Insert Into Velindos (Stichwort, Notiz, Pfad, Genre, myBild, Ordner, Codec, Source, Artikel) Values "
        SQL + " (?,?,?,?,?,?,?,?,?);"
        ; INSERT BASE
        If DatabaseUpdate(Target, SQL)
          Debug "Datensatz eingefügt"
        EndIf
        ; FreeMemory
        ; FreeMemory(*ImageMemory)
       
        ;}
      Next
      ;}
      ; *************
    Else
      MessageRequester("Database", "Fehlende Database")
    EndIf
    DatabaseUpdate(Target,"commit")
    CloseDatabase(Target)
   
   
    FinishDatabaseQuery(Source)
    CloseDatabase (Source)
  Else
    Debug DatabaseError()
    MessageRequester("Database", "Fehlende Database")
  EndIf
 
 
  ;{ FERTIG
  ; #Zuerst den Record aufrufen
  ; ===========
  ; ListIcon_FocusReset()
  DatabaseFile$ = Kopie_Base_File$
  ; ===========
  Datenbank_Wahl()
  ; ===========
  ;Rettung
  ;ListIconZeile = Rtg_ListIconzeile
  ListIconZeile = DataWahlLetzter
  ; ===========
  ; Key
  Datenbank_Key()
  ; ===========
  ; #Zuerst den Record aufrufen
  ListIcon_FocusSet()
  ;}
 
EndProcedure


Gruss ... Velindos

_________________
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.43 LTS (32/64-Bit)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQLite kopieren
BeitragVerfasst: 06.11.2017 20:58 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Für das Bild nicht Set/GetDatabaseString, sondern Set/GetDatabaseBlob

Eben auf die schnelle...

P.S.
Und natürlich alles was zum 'Blob' dazugehört...
AllocateMemory, etc

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQLite kopieren
BeitragVerfasst: 06.11.2017 21:18 
Offline
Benutzeravatar

Registriert: 15.11.2010 10:56
Hallo,

habe die Sache eingefügt, funzt nicht!

Update: Wurde geändert

Code:
Procedure Datenbank_Kopie()
  ;{ BASE mit Bild kopieren
  Protected Target = 2
  Protected Source = 1
  Protected Bildspalte = 5
  Protected SQL.s
 
  Protected LoopZeiger = 0
  Protected Aktueller_Base_Verezichniss$
  Protected Aktueller_Base_Name$
  Protected Kopie_Base_Name$
  Protected Kopie_Base_File$
  Protected Recordzeiger
  ; --------------------------------
  ; #Zuerst den Record aufrufen
  ListIcon_FocusReset()
  ; --------------------------------
  ;}
  ;{ Neue Base anlegen
  Aktueller_Base_Verezichniss$ = GetPathPart(DatabaseFile$)
  ; ------------------------------
  ; Database FileName
  Aktueller_Base_Name$ = GetFilePart(DatabaseFile$,#PB_FileSystem_NoExtension)
  ; ------------------------------
  ; Filenamen kopieren
  Kopie_Base_Name$ = Aktueller_Base_Name$ + "_Kopie.db"
  ; ------------------------------
  ; Base File
  Kopie_Base_File$ = Aktueller_Base_Verezichniss$ + Kopie_Base_Name$
  ; ------------------------------
  ; Neue Base Anlegen
  Datenbank_Anlegen(Kopie_Base_File$)
  ; *************
  ;Rettung
  Rtg_ListIconzeile = ListIconZeile
  ;}
  ; *************
  If OpenDatabase(Source, DatabaseFile$, "", "", #PB_Database_SQLite)
    If OpenDatabase(Target, Kopie_Base_File$, "", "", #PB_Database_SQLite)
      ;PRAGMA schema.journal_mode = DELETE | TRUNCATE | PERSIST | MEMORY | WAL | OFF
      sql.s="PRAGMA journal_mode = MEMORY"
      DatabaseUpdate(Target,sql)
      Debug DatabaseError()
      DatabaseUpdate(Target,"begin transaction")
      ; *************
      ;{ SQLite KOPIEREN
      For Recordzeiger = 0 To WahlLetzter-1
        ;{ Record Zähler einrichten
        ListIcon_Record$ = GetGadgetItemText(#Work_L_ListIcon,Recordzeiger,ListIconSpalteRecord)
        ;}
        Debug "Recordzeiger= "+Recordzeiger
        ;{ BASE lesen
        DatabaseQuery(Source, "Select * From Velindos WHERE ID ="+ ListIcon_Record$)
        While NextDatabaseRow(Source)
          ; ------------------------------------------------
          SetDatabaseString(Target , 0, GetDatabaseString(Source,1))
          SetDatabaseString(Target , 1, GetDatabaseString(Source,2))
          SetDatabaseString(Target , 2, GetDatabaseString(Source,3))
          SetDatabaseString(Target , 3, GetDatabaseString(Source,4))
         
          SetDatabaseString(Target , 5, GetDatabaseString(Source,6))
          SetDatabaseString(Target , 6, GetDatabaseString(Source,7))
          SetDatabaseString(Target , 7, GetDatabaseString(Source,8))
          SetDatabaseString(Target , 8, GetDatabaseString(Source,9))
          SetDatabaseString(Target , 9, GetDatabaseString(Source,10))
          ; ------------------------------------------------
          ; Bild
          If DatabaseColumnType(Source, Bildspalte) = #PB_Database_Blob
            MemSize = DatabaseColumnSize(Source,Bildspalte)
            If MemSize
              ; AllocateMemory
              *ImageMemory = AllocateMemory(MemSize)
              Debug "MemSize= "+MemSize
              ; Memory
              If *ImageMemory
                If GetDatabaseBlob(Source, Bildspalte, *ImageMemory,MemSize)
                  ; --------------------------------
                  Debug "LoopZeiger= " +LoopZeiger
                Else
                  Debug "GetDatabaseBlob ist fehlgeschlagen"
                EndIf
                ;FreeMemory(*ImageMemory)
              Else
                Debug "Nicht genügend Speicher vorhanden"
              EndIf
            Else
              Debug "picsize is null"
            EndIf
          Else
            Debug "DatabaseColumnType(0, 1) ist kein Blob"
          EndIf
          ; ------------------------------------------------
         
         
        Wend
       
        ; ------------------------------------------------
        ;}
        ; *************
        ;{ FOCUS
        ;Zeiger  setzen
        SendMessage_(GadgetID(#Work_L_ListIcon),#LVM_ENSUREVISIBLE,ListIconZeile,0)   
        ; FOCUS auf Zeile
        SetGadgetState(#Work_L_ListIcon, ListIconZeile)
        ; Aktivited
        SetActiveGadget(#Work_L_ListIcon)
        ;}
        ; *************
        ;{ BASE schreiben
        ; *************
        ; SQL String new
        ;           SQL = "Insert Into Velindos (Stichwort, Notiz, Pfad, Genre, myBild, Ordner, Codec, Source, Artikel) Values "
        ;           SQL + " ('"+Read_STICHWORT$+"','"+Read_NOTIZ$+"','"+Read_PFAD$+"','"+Read_GENRE$+"',?,'"+Read_Ordner$+"','"+Read_Codec$+"','"+Read_Source$+"','"+Read_Artikel$+"');"
        SQL = "Insert Into Velindos (Stichwort, Notiz, Pfad, Genre, myBild, Ordner, Codec, Source, Artikel) Values "
        SQL + " (?,?,?,?,?,?,?,?,?);"
        ; *************
        ; Bild laden
        SetDatabaseBlob(Target, 4, *ImageMemory, MemSize)
        ; *************
        ; INSERT BASE
        If DatabaseUpdate(Target, SQL)
          Debug "Datensatz eingefügt"
        EndIf
        ; FreeMemory
        ; FreeMemory(*ImageMemory)
       
        ;}
      Next
      ;}
      ; *************
    Else
      MessageRequester("Database", "Fehlende Database")
    EndIf
    ; *************
    ; Finish TARGET
    DatabaseUpdate(Target,"commit")
    CloseDatabase(Target)
    ; *************
    ; Finish SOURCE
    FinishDatabaseQuery(Source)
    CloseDatabase (Source)
  Else
    Debug DatabaseError()
    MessageRequester("Database", "Fehlende Database")
  EndIf
  ; *************
  ;{ FERTIG
  ; #Zuerst den Record aufrufen
  ; ===========
  ; ListIcon_FocusReset()
  DatabaseFile$ = Kopie_Base_File$
  ; ===========
  Datenbank_Wahl()
  ; ===========
  ;Rettung
  ;ListIconZeile = Rtg_ListIconzeile
  ListIconZeile = DataWahlLetzter
  ; ===========
  ; Key
  Datenbank_Key()
  ; ===========
  ; #Zuerst den Record aufrufen
  ListIcon_FocusSet()
  ;}
EndProcedure


Gruss ... Velindos

_________________
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.43 LTS (32/64-Bit)


Zuletzt geändert von Velindos am 07.11.2017 07:40, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQLite kopieren
BeitragVerfasst: 06.11.2017 22:44 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Code:
; Bild laden
         SetDatabaseBlob(Target, 0, *ImageMemory, MemSize)
        ; *************


Müsste das nicht Index 4 sein? 'SetDatabaseBlob(Target, 4, *ImageMemory, MemSize)'

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQLite kopieren
BeitragVerfasst: 07.11.2017 07:37 
Offline
Benutzeravatar

Registriert: 15.11.2010 10:56
Hallo,
Danke, stimmt! War woll schon genug. Nun habe die Sache geändert wie vorab und die Funzt!

Etwas schneller, jedoch der Focus kommt nicht zur Anzeige.

Gruss ... Velindos

_________________
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.43 LTS (32/64-Bit)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQLite kopieren
BeitragVerfasst: 07.11.2017 11:24 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Jetzt noch das kopieren in einen Thread verlagern und per Postevent den Status an das Hauptprogramm senden.

Somit hängt sich das Fenster nicht auf, 'Programm reagiert nicht'.
Aber verhindern das der Thread nicht zwei mal gestartet werden kann...

P.S. Wenn die Tabelle auch Einträge hat die nicht als String definiert sind, sollte man diese auch nicht String übernehmen.
Dafür gibt es noch Set/GetDatabase[Long,Float, etc]. Somit spart man die Zeit zum umwandeln zu einen String und wieder zurück.

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye