Abfrage mit Bedingung

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

saccara
*
Beiträge: 18
Registriert: Di, 01.11.2011 22:30

Abfrage mit Bedingung

Beitrag 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
Zuletzt geändert von saccara am Di, 22.11.2011 09:16, insgesamt 1-mal geändert.
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: Abfrage mit Bedingung

Beitrag 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.
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
saccara
*
Beiträge: 18
Registriert: Di, 01.11.2011 22:30

Re: Abfrage mit Bedingung

Beitrag von saccara »

richtig, hatte das heute früh nur noch schnell reingehackt, deshalb hat sich der Fehler eingeschlichen.
Das "=" muss natürlich weg.

sacca
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Abfrage mit Bedingung

Beitrag 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)
saccara
*
Beiträge: 18
Registriert: Di, 01.11.2011 22:30

Re: Abfrage mit Bedingung

Beitrag 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
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Abfrage mit Bedingung

Beitrag von DPunch »

Aloha

Bist Du in einem Formular?
Wenn ja, hast Du

Code: Alles auswählen

oForm.applyFilter = TRUE
gesetzt?
Bedenkst Du Groß-/Kleinschriebung?
saccara
*
Beiträge: 18
Registriert: Di, 01.11.2011 22:30

Re: Abfrage mit Bedingung

Beitrag 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
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Abfrage mit Bedingung

Beitrag 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.
saccara
*
Beiträge: 18
Registriert: Di, 01.11.2011 22:30

Re: Abfrage mit Bedingung

Beitrag von saccara »

geht auch nicht so richtig

sacca

danke trotzdem
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Abfrage mit Bedingung

Beitrag von DPunch »

saccara hat geschrieben:geht auch nicht so richtig
Und das soll was heissen...?
saccara
*
Beiträge: 18
Registriert: Di, 01.11.2011 22:30

Re: Abfrage mit Bedingung

Beitrag 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:
Dateianhänge
Fehler2.jpg
Fehler2.jpg (36.65 KiB) 2042 mal betrachtet
saccara
*
Beiträge: 18
Registriert: Di, 01.11.2011 22:30

Re: Abfrage mit Bedingung

Beitrag von saccara »

sry, war falsches Bild,

hier das richtige
Dateianhänge
fehler3.jpg
fehler3.jpg (39.71 KiB) 2040 mal betrachtet
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Abfrage mit Bedingung

Beitrag 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).
saccara
*
Beiträge: 18
Registriert: Di, 01.11.2011 22:30

Re: Abfrage mit Bedingung

Beitrag 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
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Abfrage mit Bedingung

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