Seite 2 von 2

Verfasst: 20.05.2007 15:08
von Kiffi
PureBasic4.0 hat geschrieben:Reicht das aus, um DBHandle korrekt zu befüllen?:

Code: Alles auswählen

  DBHandle = SQLiteOpen(#DBName)
  If Not DBHandle 
    MessageRequester("Fehler","Die Datei "+#DBName+" konnte nicht geladen bzw. erstellt werden",#MB_ICONSTOP)
    End
  EndIf
jop, ist OK so. SQLiteInit() hast Du vorher sicherlich auch ausgeführt, oder?
PureBasic4.0 hat geschrieben:Nein, PureBasic mit seinen IMAs!
ich benutze SQLite in etlichen Projekten und habe noch nie einen IMA
bekommen. Zumeist sitzt der Bug vor der Tastatur ;-)

Hier ein kleiner Testcode ohne IMAs:

Code: Alles auswählen

EnableExplicit

XIncludeFile "sqlite.pbi"

Define.l Neu
Define.l i
Define.l dbHandler
Define.SQ3_TABLEMAP Table

#Database="D:\test.db"

SQLiteInit()

If FileSize(#Database) = -1 ; Datenbank noch nicht vorhanden?
  Debug "Datenbank ist (noch) nicht vorhanden"
  Neu = #True
Else
  Debug "Datenbank ist bereits vorhanden"
  Neu = #False
EndIf

dbHandler = SQLiteOpen(#Database) ; Neue Datenbank wird geöffnet / erstellt

If Not dbHandler
  If Neu
    MessageRequester("", "Datenbank konnte nicht erstellt werden")
  Else
    MessageRequester("", "Datenbank konnte nicht geöffnet werden")
  EndIf
  End
EndIf

If Neu
  
  Debug "Tabelle mit Feldern wird erstellt..."
  
  SQLiteExecute(dbHandler, "Create Table myTestTable (Field1, Field2, Field3)")
  
  Debug "Testwerte einfügen..."

  For i = 1 To 10
    SQLiteExecute(dbHandler, "Insert Into myTestTable (Field1, Field2, Field3) Values ('Feld1 Wert" + Str(i) + "', 'Feld2 Wert" + Str(i) + "', 'Feld3 Wert" + Str(i) + "')")
  Next
  i=0
  
EndIf

Debug "Auslesen der Daten..."
SQLiteGetTable(dbHandler, "SELECT * FROM myTestTable", Table)

If Table
  While SQLiteNextRow(Table)
    i + 1 : Debug "Row " + Str(i) + ":"
    While SQLiteNextCol(Table)
      Debug SQLiteValue(Table)
    Wend
  Wend
  SQliteFreeTable(Table) 
EndIf

SQLiteClose(dbHandler)
SQLiteEnd()
Grüße ... Kiffi
Captn. Jinguji: hat geschrieben:Öhmm... braucht man bei SQLITE keine Typ- und Größenangaben für die Columns ?
kann man angeben, braucht man aber nicht. Das ist ja gerade einer der
Riesenvorteile, die SQLite bietet. :-)

// Edit: Der Code wurde um ein fehlendes SQliteFreeTable(Table) erweitert.

Verfasst: 20.05.2007 15:11
von PureBasic4.0
Ja, SQLiteInit() wurde ausgeführt (und abgefragt) hier der code:

Code: Alles auswählen

  If Not SQLiteInit("")
    MessageRequester("Fehler","Die Datei SQLite3.dll wurde nicht gefunden. Bitte installieren Sie dieses Programm neu",#MB_ICONSTOP)
    End
  EndIf
erst mal danke für den code, ich werde den mal durcharbeiten

Verfasst: 20.05.2007 16:30
von PureBasic4.0
@Kiffi: Bei diesem Code gibt es natürlich keinen IMA. Packe doch mal die Funktionen in eine Procedure und rufe diese auf. sag mir, ob du einen IMA bekommen hast.

Verfasst: 20.05.2007 17:01
von Kiffi
PureBasic4.0 hat geschrieben:Bei diesem Code gibt es natürlich keinen IMA.
:mrgreen: sach ich doch!
PureBasic4.0 hat geschrieben:Packe doch mal die Funktionen in eine Procedure und rufe diese auf. sag mir, ob du einen IMA bekommen hast.
brauch ich nicht. Ich programmiere grundsätzlich mit Prozeduren und habe
nur diesen Testcode nicht innerhalb einer solchen gepostet.

Aus diesem Grund würde das noch immer ohne IMA funktionieren, wenn ich
nun den Code in eine Prozedur packen würde.

Der Einfachheit halber würde ich deshalb vorschlagen, dass Du einen kurzen
und lauffähigen Testcode erstellst und hier postest, anhand dessen man den
IMA nachvollziehen kann.

Grüße ... Kiffi

Verfasst: 20.05.2007 17:07
von PureBasic4.0
Hi, Kiffi

Der Code hier ist NICHT Lauffähig, weil IMA (basiert auf deinem Code von oben):

Code: Alles auswählen

XIncludeFile "sqlite.pbi"

Define.l Neu
Define.l i
Global dbHandler.l
Define.SQ3_TABLEMAP Table

#Database="D:\test.db"

SQLiteInit()

If FileSize(#Database) = -1 ; Datenbank noch nicht vorhanden?
  Debug "Datenbank ist (noch) nicht vorhanden"
  Neu = #True
Else
  Debug "Datenbank ist bereits vorhanden"
  Neu = #False
EndIf

dbHandler = SQLiteOpen(#Database) ; Neue Datenbank wird geöffnet / erstellt

If Not dbHandler
  If Neu
    MessageRequester("", "Datenbank konnte nicht erstellt werden")
  Else
    MessageRequester("", "Datenbank konnte nicht geöffnet werden")
  EndIf
  End
EndIf

If Neu
 
  Debug "Tabelle mit Feldern wird erstellt..."
 
  SQLiteExecute(dbHandler, "Create Table myTestTable (Field1, Field2, Field3)")
 
  Debug "Testwerte einfügen..."

  For i = 1 To 10
    SQLiteExecute(dbHandler, "Insert Into myTestTable (Field1, Field2, Field3) Values ('Feld1 Wert" + Str(i) + "', 'Feld2 Wert" + Str(i) + "', 'Feld3 Wert" + Str(i) + "')")
  Next
  i=0
 
EndIf
Procedure Lesen()
  Debug "Auslesen der Daten..."
  SQLiteGetTable(dbHandler, "SELECT * FROM myTestTable", Table)
  
  If Table
    While SQLiteNextRow(Table)
      i + 1 : Debug "Row " + Str(i) + ":"
      While SQLiteNextCol(Table)
        Debug SQLiteValue(Table)
      Wend
    Wend
    SQliteFreeTable(Table)
  EndIf
EndProcedure
lesen()
SQLiteClose(dbHandler)
SQLiteEnd()

Verfasst: 20.05.2007 17:14
von Kiffi
PureBasic4.0 hat geschrieben:Der Code hier ist NICHT Lauffähig, weil IMA

Code: Alles auswählen

Procedure Lesen() 
  Protected Table.SQ3_TABLEMAP
  [...]
jetzt schon :cool:

Schau Dir mal in der Hilfe den Unterschied zwischen Define, Protected und
Global an.

Grüße ... Kiffi

Verfasst: 20.05.2007 17:18
von PureBasic4.0
wow, danke! hat funktioniert