SQLite kopieren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: SQLite kopieren

Beitrag von mk-soft »

Habe mal eine Hilfsfunktion geschrieben.

Habe aber noch nicht getestet ob das hier geht 'SetDatabaseBlob(Target, TargetIdx, 0, 0) ; <- Geht das ?'

Code: Alles auswählen

; ***************************************************************************************

; SetDatabase helper by mk-soft
; Version v1.01
; Date 07.11.2017

Define NewList *SetDatabaseMemory()

Procedure SetDatabaseValue(Source, SourceIdx, Target, TargetIdx)
  Protected result, type.i, size.i
  Shared *SetDatabaseMemory()
  
  type = DatabaseColumnType(Source, SourceIdx)
  result = #True
  Select type
    Case #PB_Database_Long
      SetDatabaseLong(Target, TargetIdx, GetDatabaseLong(Source, SourceIdx))
    Case #PB_Database_String
      SetDatabaseString(Target, TargetIdx, GetDatabaseString(Source, SourceIdx))
    Case #PB_Database_Float
      SetDatabaseFloat(Target, TargetIdx, GetDatabaseFloat(Source, SourceIdx))
    Case #PB_Database_Double
      SetDatabaseDouble(Target, TargetIdx, GetDatabaseDouble(Source, SourceIdx))
    Case #PB_Database_Quad
      SetDatabaseQuad(Target, TargetIdx, GetDatabaseQuad(Source, SourceIdx))
    Case #PB_Database_Blob
      size = DatabaseColumnSize(Source, SourceIdx)
      If size
        AddElement(*SetDatabaseMemory())
        *SetDatabaseMemory() = AllocateMemory(size)
        If *SetDatabaseMemory()
          If GetDatabaseBlob(Source, SourceIdx, *SetDatabaseMemory(), size)
            SetDatabaseBlob(Target, TargetIdx, *SetDatabaseMemory(), size)
          Else
            SetDatabaseBlob(Target, TargetIdx, 0, 0) ; <- Geht das ?
            result = #False
            Debug "Error SetDatabaeValue (Blob): No Blob Data"
          EndIf
        Else
          SetDatabaseBlob(Target, TargetIdx, 0, 0) ; <- Geht das ?
          result = #False
          Debug "Error SetDatabaeValue (Blob): Out of Memory"
        EndIf
      Else
        SetDatabaseBlob(Target, TargetIdx, 0, 0) ; <- Geht das ?
        result = #False
        Debug "Error SetDatabaeValue (Blob): No Blob Data"
      EndIf
  EndSelect
  ProcedureReturn result
EndProcedure

Procedure SetDatabaseFreeMemory()
  Shared *SetDatabaseMemory()
  ForEach *SetDatabaseMemory()
    If *SetDatabaseMemory()
      FreeMemory(*SetDatabaseMemory())
    EndIf
  Next
  ClearList(*SetDatabaseMemory())
EndProcedure

; ***************************************************************************************
Nach dem Aufruf DatabaseUpdate(...) die SetDatabaseFreeMemory() aufrufen um den allokierten Speicher for die Blob-Daten wieder frei zu geben
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten