Seite 1 von 1

DatabaseQuery schlägt fehl

Verfasst: 27.04.2007 13:55
von batzilla
Ich steh hier im Moment auf dem Schlauch...

in meinem Programm führe ich folgendes durch:

Code: Alles auswählen

; Datenbankumgebung initialisieren
If InitDatabase() = 0
	MessageRequester("Fehler", "Datenbankumgebumg (ODBC v3 oder höher benötigt) konnte nicht initialisiert werden!")
 	End
EndIf

; Datenbank öffnen
If OpenDatabase(#Datenbank, #DBName, #DBUser, #DBPass) = 0
	MessageRequester("Fehler", "Kann die folgende Abfrage nicht ausführen: " + DatabaseError())
EndIf
Zusätzlich gibt es eine Prozedur in der ich eine Tabelle meiner Datenbank abfragen möchte. Diese Abfrage schlägt fehl:

Code: Alles auswählen

Procedure getUserRole(UserName.s)
  table.s = "Benutzer"
  sqlCommand.s = "SELECT * FROM " + table.s + " WHERE BENUTZERKENNUNG = '" + UCase(UserName.s) + "'"
  If DatabaseQuery(#Datenbank, sqlCommand.s) <-- hier tritt der Fehler auf!
    NextDatabaseRow(#Datenbank)
    Debug GetDatabaseString(#Datenbank, 0)
  EndIf
EndProcedure
In der markierten Zeile tritt dann folgender Fehler auf:
ERROR: InitDatabase() must be called before use the Database commands.

Ich rufe aber doch schon InitDatabase() in meinem Programm auf, und andere Prozeduren in meinem Programm funktionieren ähnlich wie die oben gezeigte. Also nur einmal InitDatabase() in meinem Programm und alle Prozeduren laufen klaglos, bis auf die oben gezeigte Prozedur.

Kann mich mal jemand vom Schlauch holen?

Danke.

Verfasst: 27.04.2007 14:43
von bobobo
Check Deinen Code

Irgendwie wird wohl Initdatabase() nicht vor dem Aufruf der Prozedur
getUserRole(UserName.s) aufgerufen

Die Fehlermeldung sollte hier eigentlich nicht irreführen und korrekt sein.

ömm .. eventuell hast Du die Prozeduren in Threads laufen, dann
muss die Zeilennummer der Fehlermeldung nicht unbedingt korrekt sein.

Der Code an sich scheint mir ok zu sein.

Verfasst: 27.04.2007 15:09
von batzilla
hmm...

Mein Programm sah bisher so aus:

Code: Alles auswählen

variablen
declarationen

procedure1
procedure2
procedure3
procedure4
procedure5
etc

initDatabase() etc...
hab das jetzt wie folgt aufgebaut:

Code: Alles auswählen

variablen
declarationen

initDatabase() etc...

procedure1
procedure2
procedure3
procedure4
procedure5
etc
Nun kein Fehler beim DatabaseQuery mehr. Komisch. Ich dachte, es reicht die Prozeduren am Anfang zu deklarieren, dann wäre die Reihenfolge egal. Irre ich mich?

Verfasst: 27.04.2007 19:29
von Sicro
Hallo batzilla,

ohne vorherigem Aufruf des Befehls "InitDatabase" sind die zugehörigen Befehle nicht bekannt. Du möchtest diese aber in deinen Prozeduren schon verwenden. Deshalb kommt es zu einem Fehler.

Mfg DerProgger

Verfasst: 27.04.2007 22:03
von batzilla
Aber ich hatte doch auch schon vorher Prozeduren, die vor dem eigentlichen InitDatabase() im Quelltext standen.

Code: Alles auswählen

variablen
declarationen

prozedur1 mit z.B. DatabaseQuery(...)

InitDatabase()
OpenDatebase(...)
Das hat auch schon immer funktioniert. Nur bei der neuen Prozedur wie im ersten Beitrag bereits gepostet gabs plötzlich die Fehlermeldung obwohl ich auch schon vorher in anderen Prozeduren Datenbankfunktionen aufgerufen habe. Versteh ich nicht.

Verfasst: 28.04.2007 01:35
von Sicro
Du hast Recht. Ich habe gerade probeweise ein Code geschrieben, der grundsätzlich deiner Vorgehensweise entspricht und er hat funktioniert. Der Fehler muss also irgendwo anders liegen.

Könntest du noch einen kleinen, kompilierbaren Code posten, der den selben Fehler aufweist? Wäre sehr hilfreich für die Fehlerfindung. Vielleicht kommst du dadurch auch schon selber auf die Spur. :wink:

Mfg DerProgger

Verfasst: 28.04.2007 17:12
von Konne
Tut es denn ohne debugger?

Verfasst: 29.04.2007 12:51
von batzilla
Wollte grad testen ob der Fehler auch ohne Debugger auftritt...

Hab dazu den Code wieder in die ursprüngliche Reihenfolge gebracht und nun funktioniert er!? Hexenwerk...

:shock: