Seite 1 von 2
Abfrage mit Bedingung
Verfasst: Di, 22.11.2011 08:01
von saccara
Hallo
Ich möchte eine Filterung mit einer Bedingung.
Dazu muss die Bedingung (Markierfeld Ja/Nein Boolean) erfüllt sein und alle Datensätze auflisten, bei denen info1 oder info2 leer ist.
Tabelle sieht so aus:
ID____Bedingung____info1____info2
1.____ja____________5_______1__
2.____nein__________3__________
3.____ja____________2__________
praktisch soll Datensatz id 3. angezeigt werden.
Ohne die Bedingung würde das so aussehen.
oForm.filter = "( `Datenbank`.`info1` IS NULL OR `Datenbank`.`info2` = IS NULL)"
Aber mit Einbindung der Bedingung, habe ich nur eine Lösung über eine Tabellenansicht gefunden, bei der ein editieren nicht möglich ist.
Ist das überhaubt möglich, da es sich um eine verschachtelte Abfrage handelt?
Hat da einer ne Idee.
Danke
Sacca
Re: Abfrage mit Bedingung
Verfasst: Di, 22.11.2011 08:53
von gogo
Lösung über eine Tabellenansicht gefunden, bei der ein editieren nicht möglich ist
Tabelle oder Formular?
Code: Alles auswählen
"( `Datenbank`.`info1` IS NULL OR `Datenbank`.`info2` = IS NULL)"
... wird wegen dem "=" Probleme machen - einfach weglassen.
Re: Abfrage mit Bedingung
Verfasst: Di, 22.11.2011 09:07
von saccara
richtig, hatte das heute früh nur noch schnell reingehackt, deshalb hat sich der Fehler eingeschlichen.
Das "=" muss natürlich weg.
sacca
Re: Abfrage mit Bedingung
Verfasst: Di, 22.11.2011 11:48
von DPunch
Aloha
Code: Alles auswählen
oForm.filter = "(`Datenbank`.`Bedingung` = 'ja' AND (`Datenbank`.`info1` IS NULL OR `Datenbank`.`info2` IS NULL))"
Funktioniert nicht?
(= 'ja' unter Umständen ersetzen durch = 1, je nach Spaltendefinition)
Re: Abfrage mit Bedingung
Verfasst: Di, 22.11.2011 21:17
von saccara
Entweder habe ich hier nen Fehler drin, oder das funktioniert nicht.
oForm.filter = "(`Artikel-Datenbank`.`sprache` = 'deutsch' AND(`Artikel-Datenbank`.`EAN:` IS NULL OR `Artikel-Datenbank`.`mpn` IS NULL ))"
sprache, ean:, und mpn sind alle strings.
Es kommt keine Filterung zustande.
sacca
Re: Abfrage mit Bedingung
Verfasst: Di, 22.11.2011 21:34
von DPunch
Aloha
Bist Du in einem Formular?
Wenn ja, hast Du
gesetzt?
Bedenkst Du Groß-/Kleinschriebung?
Re: Abfrage mit Bedingung
Verfasst: Di, 22.11.2011 21:47
von saccara
jup, ich kann mal den ganzen code posten.
- sub Abfrage_Filter_setzen
Dim oSuchFeld4 as variant
Dim oTypFeld4 as variant
Dim oDoc4 as variant
Dim oForm as variant
oDoc4 = ThisComponent
oForm = oDoc4.DrawPage.Forms.GetByName("MainForm") 'oder getByIndex()
oSuchFeld4 = oForm.getByName("Abfrage_Filter_Menu")
sSuchwort4 = oSuchFeld4.text
If sSuchwort4="Nicht im Shop" then sSuchwort4 ="( `Artikel-Datenbank`.`Produkt-URL` IS NULL AND `Artikel-Datenbank`.`Sprache` = 'deutsch' )"
If sSuchwort4="Googledaten fehlen" then sSuchwort4 ="(`Artikel-Datenbank`.`Sprache` = 'deutsch' AND(`Artikel-Datenbank`.`EAN:` IS NULL OR `Artikel-Datenbank`.`mpn` IS NULL ))"
If sSuchwort4="Bemerkungen" then sSuchwort4 ="( `Artikel-Datenbank`.`Bemerkung:` IS NOT NULL )"
oForm.filter = sSuchwort4
oForm.ApplyFilter=true
oForm.reload()
end sub
genaugenommen, soll über ein markierfeld dem produkt bescheinigt werden, ob es bei google gelistet werden soll und dann soll über einen filter herausgefunden werden, ob noch google relevanten Daten (wie ean, mpn o.ä.) fehlen.
Habe aber jetzt bissl rumprobiert und das Markierfeld durch die Bedingung (Sprache) ersetzt, um den Fehler zu finden.
Es sind noch einige andere Bedingungen notwendig, aber ich habe die erstmal rausgelöscht, wegen Fehlersuche und wegen der Übersichtlichkeit.
Es geht praktisch nur um die Verschachtelung (2. If...then Anweisung) .
Die anderen Funktionieren prima.
Gruß
sacca
Re: Abfrage mit Bedingung
Verfasst: Di, 22.11.2011 22:53
von DPunch
Aloha
Sieht auf den ersten Blick so aus, als würde Base geschachtelte Bedingungen nicht korrekt erkennen.
Bliebe die Möglichkeit, den zugrundeliegenden SQL-Befehl des Formulars zu ändern, oder mit einem Workaround ala
Code: Alles auswählen
If sSuchwort4="Googledaten fehlen" then sSuchwort4 ="(`Artikel-Datenbank`.`Sprache` = 'deutsch' AND IF(CHAR_LENGTH(`Artikel-Datenbank`.`EAN:`),1,0)+IF(CHAR_LENGTH(`Artikel-Datenbank`.`mpn:`),1,0) < 2)"
zu arbeiten.
Oder vielleicht kennt auch jemand, der mehr Ahnung von Base hat, einen anderen Weg.
Re: Abfrage mit Bedingung
Verfasst: Di, 22.11.2011 22:57
von saccara
geht auch nicht so richtig
sacca
danke trotzdem
Re: Abfrage mit Bedingung
Verfasst: Di, 22.11.2011 22:59
von DPunch
saccara hat geschrieben:geht auch nicht so richtig
Und das soll was heissen...?
Re: Abfrage mit Bedingung
Verfasst: Di, 22.11.2011 23:04
von saccara
es passiert nix
gibt keinen Fehler, aber es funzt auch nix mehr, als wenn das makro abgeschmiert ist.
Mit bleibt nur, in den den entwurfsmodus zu wechseln und erneut beginnen.
Dann kommt allerdings die Fehlermeldung:
Re: Abfrage mit Bedingung
Verfasst: Di, 22.11.2011 23:08
von saccara
sry, war falsches Bild,
hier das richtige
Re: Abfrage mit Bedingung
Verfasst: Di, 22.11.2011 23:17
von DPunch
Womit arbeitest Du?
Deine ursprünglichen Codeausschnitte liessen eine MySQL-Datenbank vermuten (und dort funktioniert der von mir gepostete Workaround wie gewünscht, das habe ich gerade mit einem Base-Formular + MySQL-DB getestet, Win XP + OOo 3.2.1).
Re: Abfrage mit Bedingung
Verfasst: Di, 22.11.2011 23:25
von saccara
Ist openoffice Base, oder besser gesagt LibreOffice Base.
Aber ich glaube, ich habe ne Lösung.
Ich erstelle ne Abfrage mit dem Assistenten, der prüft, ob EAN,mpn etc vorhanden sind oder nicht und wechsel dann per Makro von der Haupttabelle (Artikel-Datenbank) in die Abfragetabelle.
Aus dieser lässt sich bequem per Makro, alle Artikel rausfiltern, die die Bedingung (in dem Fall Sprache="deutsch") erfüllen.
Ist nur die Frage, wie ich von der Tabelle auf die Abfrage wechsel.
Ich befasse mich erst seit paar Wochen mit dem Thema, deshalb Entschuldigung für mögliche newbee-Fehler.
sacca
Re: Abfrage mit Bedingung
Verfasst: Di, 22.11.2011 23:43
von DPunch
Mit Base-Formular + embedded HSQLDB funktioniert für mich auch
Code: Alles auswählen
oForm.Filter = """A"" = 'deutsch' AND (""B"" IS NULL OR ""C"" IS NULL)"
einwandfrei.
Insofern kann ich Dir da leider nicht weiterhelfen.