Was ist falsch an dieser Abfrage?

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

arkadiuszpaluszek
****
Beiträge: 117
Registriert: So, 09.05.2010 09:53
Wohnort: Coburg
Kontaktdaten:

Was ist falsch an dieser Abfrage?

Beitrag 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
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Was ist falsch an dieser Abfrage?

Beitrag 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
arkadiuszpaluszek
****
Beiträge: 117
Registriert: So, 09.05.2010 09:53
Wohnort: Coburg
Kontaktdaten:

Re: Was ist falsch an dieser Abfrage?

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