Seite 1 von 1

Datenbankabfrage klappt nicht

Verfasst: 24.11.2008 18:45
von exit
Hallo,

in den paar Testzeilen unten möchte ich aus einer vorhanden Datenbank ein paar Daten aus der Zeile mit der Auftragsnummer xyz auslesen.

Die Datenbank kann ich aus der Vorgängerversion dieses Testcodes ansprechen. Sobald ich anfange SELECT weiter zu spezifizieren (filtern) bekomme ich Probleme.

Hier bekomme ich nun die Meldung:
[Microsoft][ODBC Microsoft Access Driver] 1 Parameter wurden erwartet, aber es wurden zu wenig Paramter übergeben.

Was ist falsch????

Code: Alles auswählen

If UseODBCDatabase() = 0
  MessageRequester("Error", "Can't initialize Database (ODBC v3 or better) environment", 0)
  End
EndIf

  result = OpenDatabase(0,"Auftraege_WV","admin","")   
 
 
  If result > 0  
      MessageRequester("Hinweis", "Testdatenbank ist offen",#PB_MessageRequester_Ok )  
    Else
      MessageRequester("Fehler", "Testdatenbank konnte nicht geöffnet werden!",#PB_MessageRequester_Ok ) 
  EndIf  
 

  SQL_Abfrage$="SELECT  Qualität, Korn, Breite, Laenge FROM querschneider WHERE Auftrag_Nr = 589504"


  OpenConsole()  
 

  If DatabaseQuery(0, SQL_Abfrage$)  
   
      Qualitaet$ = (GetDatabaseString(0, 4))
      Korn$ = (GetDatabaseString(0, 6))
      Breite$ = (GetDatabaseString(0, 8))
      Laenge$ = (GetDatabaseString(0, 9))
      
 
      PrintN (Qualitaet$ + " / " + Korn$ + " / " +Breite$ + " / " +Laenge$)
 
      CloseDatabase(0)  
  EndIf 

Fehler$ = DatabaseError()

MessageRequester("Fehler",Fehler$)  

Fehler$ = DatabaseError()

;CloseConsole() 

Re: Datenbankabfrage klappt nicht

Verfasst: 24.11.2008 18:58
von Kiffi
auf den ersten Blick fällt mir folgendes auf:

* Bei der Reihenfolge der Felder in Deiner Abfrage müssten die GetDatabaseString()-Anweisungen wie folgt aussehen:

Code: Alles auswählen

      Qualitaet$ = (GetDatabaseString(0, 0))
      Korn$ = (GetDatabaseString(0, 1))
      Breite$ = (GetDatabaseString(0, 2))
      Laenge$ = (GetDatabaseString(0, 3)) 
* Umlaute in Datenbank(-abfragen) sind generell eine schlechte Idee. Ich
weiß nicht, wie Deine Datenbank auf 'Qualität' reagiert und ob ein weiterer
Fehler u.U. hier zu suchen ist.

Grüße ... Kiffi

Verfasst: 24.11.2008 21:07
von exit
Ich habe Qualität mal herausgenommen. Siehe Code unten. Leider bleibt die Fehlermeldung.

Korn$, Breite$ und Laenge$ sind die Spalten 6,8 und 9. Das muss doch gehen oder?.

Wie gesagt, vereinfache ich die Abfrage kann ich auf alle Daten zugreifen. Ich brauche jedoch nur die Daten einer Zeile (Auftrags_Nr).

Code: Alles auswählen

 SQL_Abfrage$="SELECT   Korn, Breite, Laenge FROM querschneider WHERE Auftrag_Nr = 589504"

  OpenConsole()  
 

  If DatabaseQuery(0, SQL_Abfrage$)  
   
      ;Qualitaet$ = (GetDatabaseString(0, 4))
      Korn$ = (GetDatabaseString(0, 6))
      Breite$ = (GetDatabaseString(0, 8))
      Laenge$ = (GetDatabaseString(0, 9))

Verfasst: 24.11.2008 21:40
von Kiffi
exit hat geschrieben:Korn$, Breite$ und Laenge$ sind die Spalten 6,8 und 9.
nein, sind sie nicht. Das sind die Spalten 0, 1 und 2.
Bitte mein Posting oben lesen!

Grüße ... Kiffi

Verfasst: 25.11.2008 02:36
von Bisonte
so ist es....

Wenn du * benutzt, würde das an den stellen sein, die du meinst... also so :

Code: Alles auswählen

SELECT  * FROM querschneider WHERE Auftrag_Nr = 589504" 
dann würdest du die komplette Datenzeile einlesen. Dann wäre dein Qualität
auf Platz 4, dein Korn auf Platz 6 usw.

Aber da Du nach Select spezifizierst, was du als ergebnis haben möchtest, sortiert die
DB das gleich so hin wie es in der Select abfrage drinsteht. Also 0,1,2,3.

sollte das immer noch probleme bereiten, versuche mal das zeichen ` mit anzugeben
(hat bei mir schon öfters daran gehapert. Ähm Chr(96)

das es so aussieht :

Code: Alles auswählen

SELECT  `Qualität`,`Korn`,`Breite`,`Laenge` FROM `querschneider` WHERE `Auftrag_Nr` = 589504" 
Edit : Und wenn das immer noch nicht so will, dann solltest du das Qualit ä t in
der Datenbankstruktur ändern oder Du kannst nur die komplette Zeile mit * einlesen....

Verfasst: 25.11.2008 12:15
von exit
Es funktioniert nun. Ich habe den Code um den Befehl

Code: Alles auswählen

While NextDatabaseRow(0)

.....
erweitert. Nun läuft der Testaufbau und ich kann weitermachen. Ich werde mal anfragen ob man das "ä" von Qualität entfernen kann. Mir werden die Daten nur zur Verfügung gestellt.

Dank Euch beiden für die Hilfe :allright:

Code: Alles auswählen

If UseODBCDatabase() = 0
  MessageRequester("Error", "Can't initialize Database (ODBC v3 or better) environment", 0)
  End
EndIf

  result = OpenDatabase(0,"Auftraege_WV","admin","")   
 
;-------------------------------------------------------- 
  If result > 0  
      MessageRequester("Hinweis", "Testdatenbank ist offen",#PB_MessageRequester_Ok )  
  Else
      MessageRequester("Fehler", "Testdatenbank konnte nicht geöffnet werden!",#PB_MessageRequester_Ok ) 
  EndIf  
;--------------------------------------------------------

 SQL_Abfrage$= "SELECT  Qualität, Korn, Breite, Laenge FROM querschneider WHERE Auftrags_Nr = 589649"
 
;--------------------------------------------------------
  If DatabaseQuery(0, SQL_Abfrage$)  

      While NextDatabaseRow(0)
   
        Qualitaet$ = (GetDatabaseString(0, 0))
        Korn$ = (GetDatabaseString(0, 1))
        Breite$ = (GetDatabaseString(0, 2))
        Laenge$ = (GetDatabaseString(0, 3))
 
      Wend

      Debug Qualitaet$
      Debug Korn$
      Debug Breite$
      Debug Laenge$
 
      CloseDatabase(0)
        
   Else ;- - - - - - - - - - - - - - - - - - - - - - - - 

      Fehler$ = DatabaseError()
      MessageRequester("Meldung",Fehler$)  

  EndIf
;--------------------------------------------------------

Verfasst: 25.11.2008 12:37
von Kiffi
exit hat geschrieben:Es funktioniert nun. Ich habe den Code um den Befehl

Code: Alles auswählen

While NextDatabaseRow(0)

.....
erweitert.
gnii, habe ich glatt übersehen :lol:

Kleine Anmerkung noch: Du solltest Deinen Code so abändern, dass auch
im Fehlerfall die Datenbank geschlossen wird.

Grüße ... Kiffi

Verfasst: 25.11.2008 16:59
von Bisonte
Kiffi hat geschrieben:
exit hat geschrieben:Es funktioniert nun. Ich habe den Code um den Befehl

Code: Alles auswählen

While NextDatabaseRow(0)

.....
erweitert.
gnii, habe ich glatt übersehen :lol:
Uppsala... ich auch :D