[gelöst] Datenbank-Anbindung
Verfasst: 20.01.2016 12:12
Hallo miteinander
Bin frisch registriert nachdem ich mir PureBasic erworben habe.
Ich beschäftige mich privat vor allem mit Datenbanken, früher vor allem MS Access und seit einiger Zeit mit Libre0ffice/OpenOffice. In MS Access kann man keine Executables erstellen ohne wieder viel Geld auszugeben und LibreOffice läuft für meinen Geschmack reichlich unstabil und Executables sind nicht möglich. Darum bin ich auf PureBasic gestossen und möchte mich einarbeiten.
Und schon habe ich das erste Problem: Der Datenbank-Zugriff. Meine Suche hier und im englischen Forum hat wenig bis gar nichts erbracht.
Zuerst versuchte ich es bei LibreOffice in der Meinung das sei eine ODBC-Datenbank. Hat nicht funktioniert. Also habe ich es mit MS Access versucht, die definitiv eine ODBC-Datenbank ist. Auch hier Fehlanzeige. Mit dem Befehl "UseODBCDatabase()" bekomme ich die Meldung "OpenDatabase() fehlgeschlagen". Wenn ich den Befehl in "UseSQLiteDatabase()" umwandle gibt es keine Datenbank-Fehlermeldung, dafür gibt es eine DatabaseQuery()-Fehlermeldung.
Es wäre auch möglich die Datenbank-Dateien in .csv- oder .txt-Dateien umzuwandeln und damit zu arbeiten. Das habe ich versucht und es funktioniert. Allerdings ist das ein eher mühsamer Weg und in der MessageRequester-Ausgabe werden für Umlaute nur "?" ausgegeben.
Ich füge mein eigenes Programm hinzu zur Kontrolle, welches auch noch Listenbefehle enthält, und dann noch eines, welches ich aus einem Forum habe, ohne genau zu wissen was ich da tue. Hat auch nicht funktioniert. Was mache ich falsch? Es ist sehr wohl möglich, dass ich grundsätzlich etwas nicht verstanden habe! Die Dokumentation für diese Art Probleme ist etwas dürftig. Ich wäre sehr dankbar um Hilfe.
Zuerst mein eigenes Programm:
Jetzt noch das zweite:
Bin frisch registriert nachdem ich mir PureBasic erworben habe.
Ich beschäftige mich privat vor allem mit Datenbanken, früher vor allem MS Access und seit einiger Zeit mit Libre0ffice/OpenOffice. In MS Access kann man keine Executables erstellen ohne wieder viel Geld auszugeben und LibreOffice läuft für meinen Geschmack reichlich unstabil und Executables sind nicht möglich. Darum bin ich auf PureBasic gestossen und möchte mich einarbeiten.
Und schon habe ich das erste Problem: Der Datenbank-Zugriff. Meine Suche hier und im englischen Forum hat wenig bis gar nichts erbracht.
Zuerst versuchte ich es bei LibreOffice in der Meinung das sei eine ODBC-Datenbank. Hat nicht funktioniert. Also habe ich es mit MS Access versucht, die definitiv eine ODBC-Datenbank ist. Auch hier Fehlanzeige. Mit dem Befehl "UseODBCDatabase()" bekomme ich die Meldung "OpenDatabase() fehlgeschlagen". Wenn ich den Befehl in "UseSQLiteDatabase()" umwandle gibt es keine Datenbank-Fehlermeldung, dafür gibt es eine DatabaseQuery()-Fehlermeldung.
Es wäre auch möglich die Datenbank-Dateien in .csv- oder .txt-Dateien umzuwandeln und damit zu arbeiten. Das habe ich versucht und es funktioniert. Allerdings ist das ein eher mühsamer Weg und in der MessageRequester-Ausgabe werden für Umlaute nur "?" ausgegeben.
Ich füge mein eigenes Programm hinzu zur Kontrolle, welches auch noch Listenbefehle enthält, und dann noch eines, welches ich aus einem Forum habe, ohne genau zu wissen was ich da tue. Hat auch nicht funktioniert. Was mache ich falsch? Es ist sehr wohl möglich, dass ich grundsätzlich etwas nicht verstanden habe! Die Dokumentation für diese Art Probleme ist etwas dürftig. Ich wäre sehr dankbar um Hilfe.
Zuerst mein eigenes Programm:
Code: Alles auswählen
EnableExplicit
#DATENBANK = 1
Define.i iAnzahl
Define.s sTabelle, sAusgabe
NewList Artikel.s()
Declare Fehlerbehandlung(Ergebnis.i, Text.s)
UseODBCDatabase()
Fehlerbehandlung(OpenDatabase(#DATENBANK, "D:\Daten\BIBLIO\BIBLIO Test\Database1.accdb", "", ""), "OpenDatabase() fehlgeschlagen.")
OpenDatabase(#DATENBANK, "D:\Daten\BIBLIO\BIBLIO Test\Database1.accdb", "", "")
If DatabaseQuery(#DATENBANK, "SELECT * FROM Artikel")
iAnzahl = 0
While NextDatabaseRow(#DATENBANK)
AddElement(Artikel())
Artikel() = GetDatabaseString(#DATENBANK, 0)
iAnzahl = iAnzahl + 1
Wend
FinishDatabaseQuery(#DATENBANK)
CloseDatabase(#DATENBANK)
ForEach Artikel()
Debug Artikel()
Next
Debug "Anzahl Datensätze: " + Str(iAnzahl)
Else
Fehlerbehandlung(DatabaseQuery(#DATENBANK, "SELECT * FROM Artikel"), "DatabaseQuery() fehlgeschlagen.")
EndIf
Procedure Fehlerbehandlung(Ergebnis.i, Text.s)
If Ergebnis = 0
MessageRequester("Fehler", Text, #PB_MessageRequester_Ok)
End
EndIf
EndProcedure
Code: Alles auswählen
;uses AgeRange.mdb as the data source, downloadable from:
;1. http://www.ms-access2010.com/tutorials/download.html (samples database zip file)
;2. https://dl.dropboxusercontent.com/u/171258023/AgeRange.mdb
UseODBCDatabase()
#ODBC_ADD_DSN = 1
dbFile$ = OpenFileRequester("Select database", GetCurrentDirectory(),
"Access Files|*.mdb;*.accdb", 0)
If dbFile$
If SQLConfigDataSource_(#Null, #ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb, *.accdb)",
"Server=127.0.0.1; Description=dbDescription; " +
"DSN=dbSourceName; DBQ=" + dbFile$ + "; UID=; PWD=;")
If OpenDatabase(0, "dbSourceName", "", "", #PB_Database_ODBC)
;reading from the [tblEmployess] table
If DatabaseQuery(0, "Select * From tblEmployees")
While NextDatabaseRow(0)
Debug GetDatabaseString(0, 2) + " " + GetDatabaseString(0, 1)
Wend
Else
MessageRequester("ODBC", DatabaseError())
EndIf
CloseDatabase(0)
Else
MessageRequester("ODBC", DatabaseError())
EndIf
Else
MessageRequester("ODBC", "ODBC initialisation error!")
EndIf
EndIf