Datenbank nicht initialisiert?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Cabble
Beiträge: 32
Registriert: 24.01.2009 13:48
Wohnort: Mecklenburg-Vorpommer O.o
Kontaktdaten:

Datenbank nicht initialisiert?

Beitrag 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?
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag 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" !
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​​
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag 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.
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​​
Benutzeravatar
Cabble
Beiträge: 32
Registriert: 24.01.2009 13:48
Wohnort: Mecklenburg-Vorpommer O.o
Kontaktdaten:

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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!
Benutzeravatar
Cabble
Beiträge: 32
Registriert: 24.01.2009 13:48
Wohnort: Mecklenburg-Vorpommer O.o
Kontaktdaten:

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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ß!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Cabble
Beiträge: 32
Registriert: 24.01.2009 13:48
Wohnort: Mecklenburg-Vorpommer O.o
Kontaktdaten:

Beitrag 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?
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag 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())
Antworten