Seite 1 von 1

Was ist falsch an dieser Abfrage?

Verfasst: Do, 08.03.2012 17:07
von arkadiuszpaluszek
Hallo!

Ich möchte aus meiner Tabelle mit Leistungen welche abgerechnet werden sollen diejenigen rausfiltern, die noch nicht abgerechnet worden sind - bei abgerechneten Leistungen hat das Feld "abgerechnet" den Wert "1". Also beinhaltet mein Makro folgenden SQL-Befehl:

Code: Alles auswählen

mySQL="SELECT ""gesamtpreis"" FROM ""kunden_leistungen"" WHERE ""id_kunde""="+id_kunde+" AND ""abgerechnet""<>1 "
Ich bekomme genau 0 Ergebnisse zurück! :) Wenn ich diesen Befehl ziemlich genau in der gleichen Form wie oben beim Erstellen einer Abfrage direkt in der Datenbankdatei eingfebe, bekomme ich meine Ergebnisse, aber hier stört er sich irgendwie an "<>1" - das Problem hatte ich ja auch schon als ich in meinem Formular genau diese Bedingung als Filter setzen wollte. Dort habe ich mit dem Assistenten für Abfragen "nicht wie '1' " eingegeben, aber wie lautet das in SQL? "NOT LIKE '1' " oder "!=1" mag er ja auch nicht.

Der Fehler liegt eindeutig irgendwo in der letzten Bedingung, denn sobald diese auskommentiert wird:

Code: Alles auswählen

mySQL="SELECT ""gesamtpreis"" FROM ""kunden_leistungen"" WHERE ""id_kunde""="+id_kunde
'+" AND ""abgerechnet""!=1"
läuft es! :?

Gruß

Arek

Re: Was ist falsch an dieser Abfrage?

Verfasst: Do, 08.03.2012 18:18
von F3K Total
Hi,
bei mir (embeddet HSQLDB) läuft dies, wobei die Spalte abgerechnet eine integer ist:

Code: Alles auswählen

Sub S_Sql_Abfrage
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
Datenquelle=DatabaseContext.getByName(ThisDatabaseDocument.URL)'Hier wird der aktuelle Datenbankname ermittelt
Verbindung = Datenquelle.GetConnection("","")' ("Benutzername","Passwort")
SQL_Anweisung = Verbindung.createStatement()
sSql = "SELECT ""gesamtpreis"" FROM ""kunden_leistungen"" where  ""abgerechnet"" <> 1 and ""id_kunde"" =1"
SQL_Abfrage = SQL_Anweisung.executequery(sSql)
if SQL_Abfrage.next then msgbox SQL_Abfrage.getdouble(1)
end sub
ist abgerechnet eine boolean Spalte geht dies:

Code: Alles auswählen

sSql = "SELECT ""gesamtpreis"" FROM ""kunden_leistungen"" where  ""abgerechnet"" <> true and ""id_kunde"" =1"
Gruß R

Re: Was ist falsch an dieser Abfrage?

Verfasst: Do, 08.03.2012 22:32
von arkadiuszpaluszek
Bei mir ging es aber auch mit Deinem Ausdruck nicht (gut, war eigentlich das Gleiche wie mein SQL Ausdruck) - und damit war klar, dass der Unterschied wohl in der Datenbank liegen muss, wenn es bei Dir dennoch funktionierte. Es hat dann geklappt damit:

Code: Alles auswählen

mySQL="SELECT ""gesamtpreis"" FROM ""kunden_leistungen"" where  (""abgerechnet"" <> 1 OR ""abgerechnet"" IS NULL) and ""id_kunde"" ="+id_kunde
Ich bin davon ausgegangen, dass NULL - kein Eintrag - auch anders ist als "1" - doch so wie ich es jetzt interpretieren würde, kann beim Vorliegen des Werts NULL bzw. eben beim Fehlen eines Wertes gar kein Vergleich stattfinden - also wird auch nicht zurückgegeben, dass der Wert anders als "1" wäre.

Wieder was gelernt! Danke dafür, dass Du es bei Dir getestet hast!

Viele Grüße

Arek