Seite 1 von 2

Datenbank nicht initialisiert?

Verfasst: 26.01.2009 15:35
von Cabble
Hier ist mein Codeabschnitt:

Code: Alles auswählen

  UseODBCDatabase()
  OpenDatabase(#db1,GetCurrentDirectory() + "unitbase.mdb","","")
  ExamineDatabaseDrivers()
  For i = 1 To 3
  NextDatabaseDriver()
  Debug DatabaseDriverName()
  Debug DatabaseDriverDescription()
  Next
  Debug DatabaseQuery(#db1,"select * from units")
Ich bekomme bei der letzten zeile immer ein "The specified #Database is not initialized." :(

wie kann ich diese Datenbank laden?

Verfasst: 26.01.2009 17:02
von Bisonte
Immer Rückgabewerte Prüfen !

Vermutlich konnte deine Datenbank nicht geladen werden... Vielleicht falscher Pfad...

Daher :

Opendatabase() gibt einen Wert zurück, der sagt ob die DB geöffnet werden konnte oder nicht. (Bei 0 ist sie nicht offen)

Also z.B.:

Code: Alles auswählen

  If UseODBCDatabase()=0
    Debug "Keine Treiber"
    End
  EndIf
  
  If ExamineDatabaseDrivers()
    
    While NextDatabaseDriver()
      Debug DatabaseDriverName()
      Debug DatabaseDriverDescription()
    Wend
  
  EndIf
  
  If OpenDatabase(#db1,GetCurrentDirectory() + "unitbase.mdb","","")
  
    SQ = DatabaseQuery(#db1, "SELECT * FROM units")
  
    If SQ
      Debug GetDatabaseString(#db1,0)
        Else
      Debug DatabaseError()
    EndIf
  
  Else
    Debug "DB nicht offen"
  EndIf
Ist zwar übertrieben, aber dafür sind Rückgabewerte da !

Und es ist ratsam immer zu prüfen (sofern es geht) ob das, was Du gerade gemacht hast, auch von Erfolg gekrönt war. Somit wird das ganze
"Fehlerunanfälliger" !

Verfasst: 26.01.2009 17:11
von ts-soft
OpenDatabase hat geschrieben:Ergebnis = OpenDatabase(#Datenbank, ODBCDatenbankName$, Benutzer$, Passwort$ [, Plugin])
Der zweite Parameter ist also die DSN, nicht der Pfad zur MDB!

Verfasst: 26.01.2009 17:21
von Bisonte
holla... das war mir gar nicht aufgefallen ;) Stimmt. Eine DSN muss auch noch her...

Die PBOSL hat eine ODBC Unterstützung, die ich nur empfehlen kann.

Verfasst: 26.01.2009 17:43
von Cabble
nenene ^^
erstmal danke für die antworten, ABER
ich hab die version 4.3 und da steht OpenDatabase(#Database,DatabaseName$,User$,Password$[,Plugin])
also so steht es wenn man es in der IDE eingibt.
im helpfile steht das bei mir auch wie TS-Soft das geschrieben hat.

Verfasst: 26.01.2009 17:52
von Kaeru Gaman
hm....

Code: Alles auswählen

OpenDatabase(#Datenbank, ODBCDatenbankName$, Benutzer$, Passwort$ [, Plugin]) 

OpenDatabase(#Database,  DatabaseName$     , User$    , Password$ [, Plugin])
wo ist denn da jetzt der Unterschied?

in der Help steht auch nicht beschrieben, ob der Name ein klassischer Filename ist oder der DSN.

aber selbst wenn es der Pfad ist, kann man sich mit GetCurrentDirectory() + ganz schön ins knie schießen...


..... und ganz ganz ganz grundsätzlich:
I R P
Immer Rückgabewerte Prüfen!

Verfasst: 26.01.2009 18:02
von Cabble
ich habs ja schon verstanden mit dem rückgabewert ^_^
kann mir bitte nochmal jemand den lick zu den user libraries geben? da gibt es doch die library oder?

muss ich die datei dann einfach in den ordner pure libraries packen oder soll ich den ganzen ordner irgendwo hinpacken? xD
hab vorher noch nie ne neue library hinzugefügt.

Verfasst: 26.01.2009 18:06
von ts-soft
> wo ist denn da jetzt der Unterschied?
Der Begriff ODBCDatenbankName$ ist Aussagekräftiger!

Um Zugriff per ODBC auf eine Datenbank zu erstellen, muß diese im
ODBC-Administrator (zu finden in der Systemsteuerung) angemeldet
werden.
Bild
Hier wäre z.B. der ODBCDatanbankName "Handicap" zur verfügbar.
Hier muß man also seine Datenbank vorher registrieren, bevor man sie
nutzen kann (es gibt auch entsprechende UserLibs um dies OnTheFly zu
erledigen).

Ansonsten: Immer Prüfen, niemals davon ausgehen das
GetCurrentDirectory() auf das Programmverzeichnis der eigenen Exe
verweist!!! Es verweist auf das aktuelle Verzeichnis, welches nicht mit dem
der eigenen Exe übereinstimmen muß!

Verfasst: 26.01.2009 18:11
von Cabble
so eine library wäre schon viel besser, da ich das programm auch ein paar freunden geben will. und das mit dem current directory is ja am anfang das codes. auch weiter im code gehe ich nicht in andere verzeichnisse.
die access datenbank liegt mit im ordner des programms (wo auch die exe liegt)
kann mir bitte jemand den link zu so einer library geben?

Verfasst: 26.01.2009 18:14
von HeX0R
Cabble hat geschrieben: die access datenbank liegt mit im ordner des programms (wo auch die exe liegt)
Dann macht man das so:

Code: Alles auswählen

GetPathPart(ProgramFileName())