Wie kann ich auf eine Firebird Datenbank zugreifen?
Wie kann ich auf eine Firebird Datenbank zugreifen?
Hallo Zusammen,
ich besitze seit geraumer Zeit PureBasic und schaue auch des öfteren hier in das PureBoard rein.
Ich finde es toll, dass man auch als Anfänger viele Fragen stellen kann, ohne
gleich krumm angesehen zu werden. Manchmal steht man halt einfach auf dem Schlauch.
Leider stehe ich auch im Moment auf dem Schlauch:
Ich habe mittels ODBC Zugriff auf eine Firebird Datenbank.
Nun habe ich hier im Board schon einige Beispiele für den Zugriff auf Access ,..
gefunden.
Leider weis ich nicht wie ich es umsetzen soll, dass ich Zugriff auf die
Firebird-Datenbank erhalte, Daten auslesen, bearbeiten und zurückschreiben kann.
Wäre toll, wenn mir hier jemand eine Hilfestellung geben könnte, schön wäre
auch ein Codeschnippsel oder so.
Schon mal vielen Dank für Eure Hilfe und Geduld mit mir.
Viele Grüße
ich besitze seit geraumer Zeit PureBasic und schaue auch des öfteren hier in das PureBoard rein.
Ich finde es toll, dass man auch als Anfänger viele Fragen stellen kann, ohne
gleich krumm angesehen zu werden. Manchmal steht man halt einfach auf dem Schlauch.
Leider stehe ich auch im Moment auf dem Schlauch:
Ich habe mittels ODBC Zugriff auf eine Firebird Datenbank.
Nun habe ich hier im Board schon einige Beispiele für den Zugriff auf Access ,..
gefunden.
Leider weis ich nicht wie ich es umsetzen soll, dass ich Zugriff auf die
Firebird-Datenbank erhalte, Daten auslesen, bearbeiten und zurückschreiben kann.
Wäre toll, wenn mir hier jemand eine Hilfestellung geben könnte, schön wäre
auch ein Codeschnippsel oder so.
Schon mal vielen Dank für Eure Hilfe und Geduld mit mir.
Viele Grüße
Rein theoretisch....
Wenn du den ODBC Treiber hast kann man doch eigentlich die
Database Befehle nutzen...
Oder seh ich das verkehrt ?
Ich denke mal das Firebird ebenfalls die SQL Syntax benutzt... daher dürfte das
dann ja nicht so dramatisch sein...
Wie gesagt rein theoretisch...
Wenn du den ODBC Treiber hast kann man doch eigentlich die
Database Befehle nutzen...
Oder seh ich das verkehrt ?
Ich denke mal das Firebird ebenfalls die SQL Syntax benutzt... daher dürfte das
dann ja nicht so dramatisch sein...
Wie gesagt rein theoretisch...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Hallo nexus72,
ich kenne und nutze Firebird nicht. Aber wie Bisonte korrekt erwähnte, sollte
bei existierender OBDC-Verbindung der Zugriff auf die Datenbank von PB
aus kein Problem darstellen.
Kennst Du Dich generell mit Datenbankzugriffen aus?
Grüße ... Kiffi
ich kenne und nutze Firebird nicht. Aber wie Bisonte korrekt erwähnte, sollte
bei existierender OBDC-Verbindung der Zugriff auf die Datenbank von PB
aus kein Problem darstellen.
Kennst Du Dich generell mit Datenbankzugriffen aus?
Code: Alles auswählen
If OpenDatabase(0, ODBCDatenbankName$, Benutzer$, Passwort$)
[...]
a²+b²=mc²
Hallo Bisonte,
hallo Kiffi,
danke für Eure schnelle Antwort.
Leider krieg ich das in PureBasic (benutze 4.10) noch nicht so richtig hin mit dem
Zugriff auf diese Firebird Datenbank. Hab mir die Bsp. für Zugriff auf Access
Datenbank angesehen, krieg es irgendwie nicht richtig hin.
Die ODBC Benutzer DSN hab ich manuell eingerichtet. Obwohl das schön
wäre, wenn ich das irgendwann auch mit PureBasic realisieren könnte.
Also wenn ich die ODBC Verbindung eingerichtet habe könnte ich also
mit den Befehlen schon drauf zugreifen? Muss ich noch eine zusätzliche
Bibiliothek installieren? (.. schaue mal in die Hilfe)
Also die Tabellen Namen auslesen und dann den Inhalt der Tabellen?
Sorry, wenn ich mich noch schwer tue damit.
Wäre schön wenn Ihr vielleicht so ein Beispiel mal hättet, das ich mich
darin einarbeiten könnte.
Wahrscheinlich gibt es schon einige. Werde mal suchen.
Schon mal vielen Dank für Eure Hilfe
Viele Grüße
hallo Kiffi,
danke für Eure schnelle Antwort.
Leider krieg ich das in PureBasic (benutze 4.10) noch nicht so richtig hin mit dem
Zugriff auf diese Firebird Datenbank. Hab mir die Bsp. für Zugriff auf Access
Datenbank angesehen, krieg es irgendwie nicht richtig hin.
Die ODBC Benutzer DSN hab ich manuell eingerichtet. Obwohl das schön
wäre, wenn ich das irgendwann auch mit PureBasic realisieren könnte.
Also wenn ich die ODBC Verbindung eingerichtet habe könnte ich also
mit den Befehlen schon drauf zugreifen? Muss ich noch eine zusätzliche
Bibiliothek installieren? (.. schaue mal in die Hilfe)
Also die Tabellen Namen auslesen und dann den Inhalt der Tabellen?
Sorry, wenn ich mich noch schwer tue damit.
Wäre schön wenn Ihr vielleicht so ein Beispiel mal hättet, das ich mich
darin einarbeiten könnte.
Wahrscheinlich gibt es schon einige. Werde mal suchen.
Schon mal vielen Dank für Eure Hilfe
Viele Grüße
Hallo nexus72,
um Tabellennamen auszulesen und DSN dynamisch erstellen (und auch
wieder entfernen) zu können, empfiehlt sich die PBOSL_ExDatabase lib:
http://www.purebasic.fr/german/viewtopi ... 831#143831
(bitte kompletten Thread durchlesen, weil mk-soft einige wichtige
Erweiterungen / Änderungen gemacht hat)
Grüße ... Kiffi
um Tabellennamen auszulesen und DSN dynamisch erstellen (und auch
wieder entfernen) zu können, empfiehlt sich die PBOSL_ExDatabase lib:
http://www.purebasic.fr/german/viewtopi ... 831#143831
(bitte kompletten Thread durchlesen, weil mk-soft einige wichtige
Erweiterungen / Änderungen gemacht hat)
zeig mal ein wenig Code.nexus72 hat geschrieben:krieg es irgendwie nicht richtig hin.
Grüße ... Kiffi
a²+b²=mc²
Hallo Kiffi,
ich habe arbeite gerade einen CodeSchnippsel durch, den ich anfüge.
Ist das O.K. das ich den Anfüge und noch Fragen dazu stelle, wenn
es bei dem Debuggen nicht funktioniert??? Oder darf ich das nicht
in dem Forum. Habe es so aufgefasst, dass ich den Code verwenden darf!!??
Habe im Code noch Änderungen vorgenommen, da er bei mir nicht
funktionierte. Warum?? Könntest Du da noch mal drüber sehen?
Es gibt noch eine Fehlermeldung, die ich nicht wegkriege:
In Zeile:
sql.s = Tabelle()\Suchstring ; !!!!! Hier erscheind ein Fehler: The linked list doesn't have a current element
Hier der gefundene Code:
Wenn dieser Codeschnippsel funktioniert, werde ich versuchen ihn auf
den Zugriff für die Firebird-Datenbank umzusetzen.
Ist die Vorgehensweise wohl O.K.? Oder sollte ich anders an das
Problem herangehen?
Vielen Dank und viele Grüße
ich habe arbeite gerade einen CodeSchnippsel durch, den ich anfüge.
Ist das O.K. das ich den Anfüge und noch Fragen dazu stelle, wenn
es bei dem Debuggen nicht funktioniert??? Oder darf ich das nicht
in dem Forum. Habe es so aufgefasst, dass ich den Code verwenden darf!!??
Habe im Code noch Änderungen vorgenommen, da er bei mir nicht
funktionierte. Warum?? Könntest Du da noch mal drüber sehen?
Es gibt noch eine Fehlermeldung, die ich nicht wegkriege:
In Zeile:
sql.s = Tabelle()\Suchstring ; !!!!! Hier erscheind ein Fehler: The linked list doesn't have a current element
Hier der gefundene Code:
Code: Alles auswählen
;-TOP
; Kommentar : Datenbank Anzeiger über SQL für ACCESS, EXCEL, DBASE und TEXT
; : Variables Fenster und Anzeige aller vorhandenen Tabellen
; Version : v1.03 / v1.02 / v1.01 / v1.00
; Author : Michael Paulwitz
; : Nur Mithilfe vieler anderer Authoren insbesondere Michael Kastner
;
; Datei : Datenbank Viewer.pb
; Erstellt : 11.04.2007
; Geändert : 19.04.2007 ; Eingabe von Benutzernamen und Passwort
; Geändert : 17.07.2007 ; Eingabe eines Tabellentrennungszeichens bei TXT Dateien
; Sprache : Purebasic 4.10 Beta 2 Windows
; ***************************************************************************************
Enumeration 1
#ODBC_ADD_DSN ; // Add data source
#ODBC_CONFIG_DSN ; // Configure (edit) Data source
#ODBC_REMOVE_DSN ; // Remove data source
#ODBC_ADD_SYS_DSN ; // add a system DSN
#ODBC_CONFIG_SYS_DSN ; // Configure a system DSN
#ODBC_REMOVE_SYS_DSN ; // remove a system DSN
#ODBC_REMOVE_DEFAULT_DSN ; // remove the default DSN
EndEnumeration
; ***************************************************************************************
Structure Tabelle
Tabellenname.s
Suchstring.s
EndStructure
Global NewList Tabelle.Tabelle ()
Procedure Trennzeichen (databasename.s)
Enumeration
#Window_0
#Radio_1
#Radio_2
#Radio_3
#Radio_4
#Text_0
; #Button_0
#String_0
EndEnumeration
If OpenWindow(#Window_0, 257, 83, 306, 160, "Tabellentrennzeichen der ASCII Tabelle", #PB_Window_SystemMenu); | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
OptionGadget(#Radio_1, 60, 50, 80, 30, "Tabulator")
OptionGadget(#Radio_2, 60, 80, 80, 30, "Komma")
OptionGadget(#Radio_3, 60, 110, 80, 30, "Semikolon")
OptionGadget(#Radio_4, 140, 50, 60, 30, "Zeichen")
SetGadgetState(#Radio_1, 1)
Tabstring$=Chr(9)
TextGadget(#Text_0, 20, 20, 280, 20, "Welches Tabellentrennzeichen soll verwendet werden?")
ButtonGadget(#Button_0, 210, 110, 70, 30, "Okay")
StringGadget(#String_0, 210, 50, 20, 20, "?")
SendMessage_(GadgetID(#String_0), #EM_LIMITTEXT, 1, 0)
EndIf
Repeat ; Start of the event loop
Event = WaitWindowEvent() ; This line waits until an event is received from Windows
GadgetID = EventGadget() ; Is it a gadget event?
If Event = #PB_Event_Gadget
If GadgetID = #Radio_1
Tabstring$ = Chr(9)
ElseIf GadgetID = #Radio_2
Tabstring$ = ","
ElseIf GadgetID = #Radio_3
Tabstring$ = ";"
ElseIf GadgetID = #Button_0
If GetGadgetState(#Radio_4)
Tabstring$ = GetGadgetText(#String_0)
EndIf
Event = #PB_Event_CloseWindow
EndIf
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
CreateFile (37,GetPathPart(databasename)+"schema.ini")
WriteStringN(37, "["+GetFilePart(databasename)+"]")
If Tabstring$ = "," : WriteStringN(37, "DecimalSymbol=.") : EndIf
WriteStringN(37, "Format=Delimited("+Tabstring$+")")
CloseFile(37)
EndIf
EndProcedure
Procedure.s AddDSN(databasename.s, user.s = "", pass.s = "", driver.s = "") ; Result DSN
Protected name.s, strDriver.s, strAttributes.s
Protected L.l, result.l
Protected *buffer.Character
; Databasename erzeugen (DSN)
name.s = "Pure_Viewer"
; Bei fehlenden driver automatisch wählen
If driver = ""
driver = GetExtensionPart(databasename)
EndIf
; Datenbanktreiber auswählen
Select UCase(driver)
Case "ACCESS", "MDB"
strDriver.s = "Microsoft Access Driver (*.mdb)"
; Attributes zustellen
strAttributes.s = "Server=APServer;Description=" + name
strAttributes.s + ";DSN=" + name
strAttributes.s + ";DBQ=" + databasename
strAttributes.s + ";UID=" + user
strAttributes.s + ";PWD=" + pass + ";"
Case "EXCEL", "XLS"
strDriver.s = "Microsoft Excel Driver (*.xls)"
; Attributes zustellen
strAttributes.s = "Server=APServer;Description=" + name
strAttributes.s + ";DSN=" + name
strAttributes.s + ";DBQ=" + databasename
strAttributes.s + ";UID=" + user
strAttributes.s + ";PWD=" + pass + ";"
Case "DBASE", "DBF"
strDriver.s = "Microsoft dBase Driver (*.dbf)"
; Attributes zustellen
strAttributes.s = "Server=APServer;Description=" + name
strAttributes.s + ";DSN=" + name
strAttributes.s + ";DBQ=" + GetPathPart(databasename)
strAttributes.s + ";UID=" + user
strAttributes.s + ";PWD=" + pass + ";"
Case "TEXT", "TXT", "CSV"
strDriver.s = "Microsoft Text Driver (*.txt; *.csv)"
; Attributes zustellen
strAttributes.s = "Server=APServer;Description=" + name
strAttributes.s + ";DSN=" + name
strAttributes.s + ";DBQ=" + GetPathPart(databasename)
strAttributes.s + ";UID=" + user
strAttributes.s + ";PWD=" + pass + ";"
Trennzeichen (databasename)
Default
strDriver.s = driver
EndSelect
*buffer = @strAttributes
For L = 0 To Len(strAttributes) - 1
If *buffer\c = ';'
*buffer\c = 0
EndIf
*buffer + 1
Next L ; Check the next byte
result = SQLConfigDataSource_(0, #ODBC_ADD_DSN, strDriver, @strAttributes) ; Call the function you need from the ODBC library with the right details
If result
ProcedureReturn name
Else
ProcedureReturn ""
EndIf
EndProcedure
Procedure.l RemoveDSN(databasename.s, user.s = "", pass.s = "", driver.s = "")
Protected name.s, strDriver.s, strAttributes.s
Protected L.l, result.l
Protected *buffer.Character
; Databasename erzeugen
;name = GetFilePart(databasename)
;name = Left(name, Len(name) - 4)
;name = "Pure" + name
name.s = "Pure_Viewer"
; Bei fehlenden driver automatisch wählen
If driver = ""
driver = GetExtensionPart(databasename)
EndIf
; Datenbanktreiber auswählen
Select UCase(driver)
Case "ACCESS", "MDB"
strDriver = "Microsoft Access Driver (*.mdb)"
Case "EXCEL", "XLS"
strDriver = "Microsoft Excel Driver (*.xls)"
Case "DBASE", "DBF"
strDriver = "Microsoft dBase Driver (*.dbf)"
Case "TEXT", "TXT", "CSV"
strDriver = "Microsoft Text Driver (*.txt; *.csv)"
DeleteFile(GetPathPart(databasename)+"schema.ini")
Default
strDriver = driver
EndSelect
; Attributes zustellen
strAttributes = "DSN=" + name + ";"
*buffer = @strAttributes
For L = 0 To Len(strAttributes) - 1
If *buffer\c = ';'
*buffer\c = 0
EndIf
*buffer + 1
Next L ; Check the next byte
result = SQLConfigDataSource_(0, #ODBC_REMOVE_DSN, strDriver, @strAttributes) ; Call the function you need from the ODBC library with the right details
ProcedureReturn result
EndProcedure
Procedure.s GetTables(Datenbank)
Protected hwnd.l, r1.l, len.l
Protected *buffer
Protected result.s
hwnd = PeekL(IsDatabase(Datenbank) + 4)
result.s = ""
If hwnd
r1 = SQLTables_(hwnd,0,0,0,0,0,0,0,0) & $FFFF
If r1 = 0 Or r1 = 1
*buffer = AllocateMemory(256)
SQLBindCol_(hwnd,3,1,*buffer,256,@len)
While SQLFetch_(hwnd) & $FFFF = 0
AddElement(Tabelle())
result = RemoveString(PeekS(*buffer, len), "'")
Tabelle()\Tabellenname.s = Left(result,Len(result)-1)
Tabelle()\Suchstring.s="Select * From ["+PeekS(*buffer, len)+"]"
Wend
FreeMemory(*buffer)
EndIf
EndIf
;result = RemoveString(result, "'")
ProcedureReturn result
EndProcedure
Procedure.s PasswortBox(CallerID.l,def$,def2$)
Shared Benutzer$,Passwort$
;
; Remember which window (if any) called this InputBox.
;
If CallerID<>0 : CallerNum=EventWindow() : EndIf
;
box=OpenWindow(999,0,0,357,120,"Eingabe von Benutzernamen und Passwort",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If box=0 Or CreateGadgetList(box)=0 : ProcedureReturn "" : EndIf
;
TextGadget(996,10,8,265,20,"Bitte Text eingeben:")
ButtonGadget(997,218,8,60,23,"OK",#PB_Button_Default)
ButtonGadget(998,288,8,60,23,"Cancel")
TextGadget(995,10,36,265,20,"Benutzername?")
StringGadget(999,9,52,339,20,def$,#ES_MULTILINE|#ES_AUTOVSCROLL) ; Flags stop "ding" sounds.
TextGadget(994,10,76,265,20,"Passwort?")
StringGadget(1000,9,92,339,20,def2$,#ES_MULTILINE|#ES_AUTOVSCROLL) ; Flags stop "ding" sounds.
SendMessage_(GadgetID(999),#EM_SETSEL,0,Len(def$)) ; Select all of def$ (if declared).
SendMessage_(GadgetID(1000),#EM_SETSEL,0,Len(def2$)) ; Select all of def$ (if declared).
;
If CallerID<>0
EnableWindow_(CallerID,#False) ; Disable caller until our InputBox closes ("modal" effect).
EndIf
SetWindowPos_(WindowID(999),#HWND_TOPMOST,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE) ; InputBox always on top.
;
GetAsyncKeyState_(#VK_RETURN)
GetAsyncKeyState_(#VK_ESCAPE) ; Clear key buffers before loop.
SetForegroundWindow_(WindowID(999)) : SetActiveGadget(999) ; Activate InputBox and its StringGadget.
MessageBeep_(#MB_ICONQUESTION) ; Play a sound prompt for the user (not supported on Win XP!).
;
Repeat
Sleep_(1) : ev=WindowEvent() : id=EventGadget() : where=GetForegroundWindow_()
ret=GetAsyncKeyState_(#VK_RETURN)
esc=GetAsyncKeyState_(#VK_ESCAPE)
Until where=box And ((ev=#PB_Event_Gadget And (id=997 Or id=998)) Or ret=-32767 Or esc=-32767 Or ev=#PB_Event_CloseWindow)
;2
If id=997 Or ret=-32767 : Benutzer$=GetGadgetText(999): Passwort$=GetGadgetText(1000) : EndIf ; OK clicked or Return key pressed.
;
CloseWindow(999) ; Close InputBox.
;
If CallerID<>0
EnableWindow_(CallerID,#True) ; Re-enable caller again.
SetForegroundWindow_(CallerID) ; Give focus back to caller.
; And give event control back to caller.
While WindowEvent() : Wend ; Clear events from caller (necessary!).
EndIf
ProcedureReturn def$;text$
EndProcedure
; ***************************************************************************************
;- Start
#Datenbank = 0
Benutzer$ = ""
Passwort$ = ""
; InitDatabase()
UseODBCDatabase() ; !!! Von mir angepasst (anscheinend Befehlsänderung)
Path.s = OpenFileRequester("Bitte Datenbank zum Öffnen auswählen", "", "Datenbank Datei (*.xls;*.mdb;*.dbf;*.txt;*.csv)|*.xls;*.mdb;*.dbf;*.txt;*.csv",0)
Debug UCase(GetExtensionPart(Path.s))
Passwort:
If Passwortfound : PasswortBox(0,Benutzer$,Passwort$) : EndIf
; DSN anlegen
Base.s = AddDSN(Path,Benutzer$,Passwort$)
If Base
If OpenDatabase(#Datenbank, Base, Benutzer$, Passwort$)
; Anpassung der SQL Abfrage
x1.s = UCase(GetExtensionPart(Path.s)) ; !!!! Von mir eingefügt, damit die Select-Anweisung funkitoniert. Verstehe das Problem mit der Select-Anweisung nicht.
Select x1.s
; Select UCase(GetExtensionPart(Path.s)) ; !!!! Von mir auskommentiert, da dies anscheinend nicht funktionierte?? Warum??
Case "ACCESS", "MDB", "EXCEL", "XLS"
GetTables(#Datenbank) ; !!!! Problem evtl. Befehlsänderung?? s. Fehler in Zeile sql.s = Tabelle()\Suchstring
FirstElement(Tabelle())
Case "DBASE", "DBF", "TEXT", "TXT", "CSV"
AddElement(Tabelle())
Tabelle()\Tabellenname.s = GetFilePart(Path.s)
Tabelle()\Suchstring.s = "Select * From "+Path.s
EndSelect
sql.s = Tabelle()\Suchstring ; !!!!! Hier erscheind ein Fehler: The linked list doesn't have a current element
Tabelle.s = Tabelle()\Tabellenname.s
If DatabaseQuery(#Datenbank, sql) ; Ermittelt alle Einträge in der 'employee' Tabelle
Spalten = DatabaseColumns(#Datenbank) - 1
If OpenWindow(0,0,0,600,400,Path.s ,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget) And CreateGadgetList(WindowID(0))
PanelGadget (0, 8, 8,WindowWidth(0)-20, WindowHeight(0)-20)
; Tabellen, seit Ihr alle da?
For n = 1 To CountList (Tabelle())
AddGadgetItem (0, -1, Tabelle.s)
ListIconGadget(n,1,1,WindowWidth(0)-27, WindowHeight(0)-48,"",44,#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#PB_ListIcon_MultiSelect|#PB_ListIcon_HeaderDragDrop)
For Spalte = 0 To Spalten ; Überschrift erstellen
AddGadgetColumn(n,1,DatabaseColumnName(#Datenbank, Spalten-Spalte),80)
Next
index = 1
While NextDatabaseRow(#Datenbank) ; alle Einträge durchlaufen
temp.s = Str(index) + Chr(10)
For Spalte = 0 To Spalten
Select DatabaseColumnType(#Datenbank,Spalte)
Case 1
temp.s = temp.s + Str(GetDatabaseLong(#Datenbank,Spalte)) + Chr(10)
Case 2
temp.s = temp.s + GetDatabaseString(#Datenbank,Spalte) + Chr(10)
Case 3
temp.s = temp.s + Str(GetDatabaseFloat(#Datenbank,Spalte)) + Chr(10)
Case 4
temp.s = temp.s + Str(GetDatabaseDouble(#Datenbank,Spalte)) + Chr(10)
Case 5
temp.s = temp.s + Str(GetDatabaseQuad(#Datenbank,Spalte)) + Chr(10)
Default
temp.s = temp.s + "unknown information/" + Chr(10)
EndSelect
Next Spalte
AddGadgetItem(n,-1,temp)
index + 1
Wend
NextElement(Tabelle())
sql.s = Tabelle()\Suchstring
Tabelle.s = Tabelle()\Tabellenname.s
DatabaseQuery(#Datenbank, sql)
Spalten = DatabaseColumns(#Datenbank) - 1
Next n
Repeat
ev.l= WaitWindowEvent()
If ev = #PB_Event_SizeWindow
; Fenster ich verändere mich
ResizeGadget(0, #PB_Ignore, #PB_Ignore,WindowWidth(0)-20, WindowHeight(0)-20)
For n = 1 To CountList (Tabelle())
ResizeGadget(n, #PB_Ignore, #PB_Ignore,WindowWidth(0)-27, WindowHeight(0)-48)
Next n
EndIf
Until ev = #PB_Event_CloseWindow
EndIf
Else
MessageRequester("Achtung", "Datenbank konnte nicht ausgelesen werden, Fehler: "+DatabaseError(), #PB_MessageRequester_Ok)
EndIf
Else
If Right(DatabaseError(),25) = "Kein zulässiges Kennwort."
Passwortfound + 1
If Passwortfound = 2
MessageRequester("Achtung", "Datenbank konnte nicht geöffnet werden da das Passwort falsch ist", #PB_MessageRequester_Ok)
Else
Goto Passwort
EndIf
Else
MessageRequester("Achtung", "Datenbank konnte nicht geöffnet werden, Fehler: "+DatabaseError(), #PB_MessageRequester_Ok)
EndIf
EndIf
EndIf
; DSN am Ende entfernen
RemoveDSN(Path,Benutzer$,Passwort$)
den Zugriff für die Firebird-Datenbank umzusetzen.
Ist die Vorgehensweise wohl O.K.? Oder sollte ich anders an das
Problem herangehen?
Vielen Dank und viele Grüße
ja, das ist korrekt. Allerdings scheint es so, dass die Lib (und auch der vonnexus72 hat geschrieben:Das Einbinden der PBOSL_ExDatabase lib ist doch so, dass ich diese nur in das
Verzeichnis: PureLibraries kopieren muss, oder?
Dir gepostete Code) Probleme mit Deiner Firebird-Datenbank hat.
Sorry, da kann ich leider nicht weiterhelfen, weil ich (wie geschrieben)
Firebird nicht verwende.
Wenn Du 1.) der ODBC-Datenbankname kennst und 2.) der Name
einer Tabelle, dann kannst Du mal folgenden Code ausprobieren (aus der
PB-Hilfe):
Code: Alles auswählen
If UseODBCDatabase() = 0
MessageRequester("Error", "Can't initialize Database (ODBC v3 or better) environment", 0)
End
EndIf
OpenConsole()
Dim DatabaseType.s(4)
DatabaseType(0) = "Unknown"
DatabaseType(1) = "Numeric"
DatabaseType(2) = "String"
DatabaseType(3) = "Float"
; First, let's see which drivers are attached to the system..
;
If ExamineDatabaseDrivers()
While NextDatabaseDriver()
PrintN(DatabaseDriverName()+" - "+DatabaseDriverDescription())
Wend
EndIf
; Open an ODBC database
;
If OpenDatabaseRequester(0)
PrintN("Database successfully opened !")
PrintN("Type EXIT to quit.")
PrintN("Command example: select * from user;")
Repeat
Print("SQL Command: ")
Command$ = Input()
PrintN("")
Select UCase(Command$)
Case "EXIT"
Quit = 1
Default
If DatabaseQuery(0, Command$)
NbColumns = DatabaseColumns(0)
PrintN("NbColums: " + Str(NbColumns))
For k=0 To NbColumns-1
PrintN(DatabaseColumnName(0, k) + " - " + DatabaseType(DatabaseColumnType(0, k)))
Next
PrintN("")
Print ("Press return to continue") : Input()
PrintN("")
PrintN("Query Result -------------------------------------")
While NextDatabaseRow(0)
PrintN(GetDatabaseString(0, 0))
Wend
PrintN("--------------------------------------------------")
Else
PrintN("Bad Query !")
EndIf
EndSelect
Until Quit = 1
Else
MessageRequester("Info", "Operation canceled", 0)
EndIf
End

Tabellennamen auszulesen ist eine 'Spezialfunktion', die so eigentlich nicht
von den PB-Befehlen unterstützt wird -- es sei denn, Firebird hat (wie z.B.
SQLite oder der MS-SQL-Server) eine Systemtabelle, in der die
Tabellennamen aufgelistet sind. Dann kannst Du diese simpel mit
DatabaseQuery() und dem Query 'Select * From
FirebirdtabelleInDerDieTabellennamenStehen' auslesen.
Grüße ... Kiffi
a²+b²=mc²
Hallo Kiffi,
vielen Dank.
Ich habe gerade Zugriff über den von dir gesandten Code erhalten.
Wenn ich Zugriff per SQL-Code auf eine Tabelle, wie z. B. mit dem
Befehl:
SELECT tblAdresse.* FROM tblAdresse;
in dem Dos-Fenster (während der PB-Code läuft)
funktioniert es.
Gebe ich aber den SQL-Code ein, um alle Tabellennamen
zu erhalten:
Select Name from MSysObjects Where Flags = 0 and ID > 0
funktioniert es weder in einem Zugriff auf eine Access MDB noch auf
eine Firebird FDB.
Habe ich noch etwas vergessen??? Oder ist der Code hierfür nicht
ausgelegt???
Wäre nochmal über eine Hilfestellung dankbar.
Vielen Dank und viele Grüße
vielen Dank.
Ich habe gerade Zugriff über den von dir gesandten Code erhalten.
Wenn ich Zugriff per SQL-Code auf eine Tabelle, wie z. B. mit dem
Befehl:
SELECT tblAdresse.* FROM tblAdresse;
in dem Dos-Fenster (während der PB-Code läuft)
funktioniert es.
Gebe ich aber den SQL-Code ein, um alle Tabellennamen
zu erhalten:
Select Name from MSysObjects Where Flags = 0 and ID > 0
funktioniert es weder in einem Zugriff auf eine Access MDB noch auf
eine Firebird FDB.
Habe ich noch etwas vergessen??? Oder ist der Code hierfür nicht
ausgelegt???
Wäre nochmal über eine Hilfestellung dankbar.
Vielen Dank und viele Grüße
Du darfst nicht auf die MSysObjects-Tabelle in Access zugreifen, weil Du übernexus72 hat geschrieben:Habe ich noch etwas vergessen???
ODBC keine Zugriffsberechtigung dafür hast. Wie man das nun umgehen
kann, ist mir leider nicht bekannt.
Ob es eine MSysObjects-Tabelle auch unter Firebird gibt, weiß ich nicht. Da
müsstest Du Dich in Firebird-Foren oder -Newsgroups schlau machen.
Grüße ... Kiffi
a²+b²=mc²