[gelöst] where like bei leeren Zellen (SQL)

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

Moderator: Moderatoren

marc 70
**
Beiträge: 38
Registriert: Mo, 24.09.2012 23:00

[gelöst] where like bei leeren Zellen (SQL)

Beitrag von marc 70 »

nabend,

beim Textvergleich mit like, wenn alle Zellen in der Datenbank gefüllt sind, ist das Ergebnis genau wie es sein soll.

Code: Alles auswählen


         oStatement = oCon.createStatement()
    SQL = "SELECT * FROM ""Kunden""WHERE "
    SQL = SQL & "KundenID LIKE UPPER('"& eLokal1 &"%')"
    SQL = SQL & "and ""Nachname"" LIKE UPPER('"& eLokal2 &"%')"
    SQL = SQL & "and ""Firma"" LIKE UPPER('"& eLokal3 &"%')"
     oListenAbfrage = oStatement.executeQuery(Sql)

 x = 0
               If not isNull(oListenAbfrage) Then
          
             Do while oListenAbfrage.Next
             ReDim Preserve aListe(x)
                aListe(x) = (array(oListenAbfrage.getString(2), _
                                   oListenAbfrage.getString(3), _
                                   oListenAbfrage.getString(4), _....
aber, sobald eine Datenbank-Zelle z.B. in Spalte "Firma" leer ist, fehlt in der Auswertung die ganze Zeile.

wie kann man dass verhindern?
hab es versucht mit

Code: Alles auswählen

...if not isNull ("SELECT ""Firma"" FROM ""Kunden""") then
    SQL = SQL & "and ""Firma"" LIKE UPPER('"& eLokal3 &"%')"
end if...
aber ohne Erfolg

könnte mir da einer weiterhelfen?

gruß marc
Zuletzt geändert von marc 70 am So, 24.02.2013 00:30, insgesamt 2-mal geändert.
AOO411m6(Build:9775) unter WIN7 64bit
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: where like bei leeren Zellen (SQL)

Beitrag von F3K Total »

Hi, ungetestet:

Code: Alles auswählen

...SQL = SQL & "and(""Firma"" LIKE UPPER('"& eLokal3 &"%')" OR ""Firma"" IS NULL)"
Gruß R
marc 70
**
Beiträge: 38
Registriert: Mo, 24.09.2012 23:00

Re: where like bei leeren Zellen (SQL)

Beitrag von marc 70 »

hi,

erst mal danke für die Hilfe, aber dass geht so leider nicht.
die Bedingungen von "LIKE UPPER('"& eLokal3 &"%')" werden dann ignoriert.
Es werden zwar alle Zeilen angezeigt aber dann kann man nicht mehr Filtern.
Sobald "eLokal3" einen Wert hat, verschwinden alle Zeilen.
schade....
(falls es jemand probiert, die Anführungsstrichen vor OR müssen weg)



man könnte ja alle leeren Datenfelder auf die Like angewendet wird, automatisch z.B. mit einen "." füllen lassen,
wenn kein Wert vorhanden, beim schreiben der Datensätze.
Aber ob das im Sinne des Erfinders ist....

noch ne Idee ?

gruß marc
AOO411m6(Build:9775) unter WIN7 64bit
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: where like bei leeren Zellen (SQL)

Beitrag von DPunch »

Servus
marc 70 hat geschrieben:Es werden zwar alle Zeilen angezeigt aber dann kann man nicht mehr Filtern.
Was meinst Du mit filtern? Wo filterst Du und wie?

Der Vorschlag von F3K Total löst genau das Problem, das Du in Deinem Ursprungspost schilderst - was genau ist also Dein Ziel?
Eventuell solltest Du aufklären, was Du erreichen willst - denn noch nichtmal Deine SQL-Abfrage stimmt mit Deinem Anliegen überein (warum sollte eine Zeile mit nicht befüllter Firma auftauchen, wenn Du doch in Deinem SQL formulierst, dass Du nur Datensätze betrachten willst, bei denen ID, Nachname und Firma den Suchkriterien entsprechen?)
marc 70
**
Beiträge: 38
Registriert: Mo, 24.09.2012 23:00

Re: where like bei leeren Zellen (SQL)

Beitrag von marc 70 »

gut, hab mich falsch ausgedrückt, ist kein filtern sonder ein Textvergleiche

also die Datenbank besteht aus 9 Spalten (Komplette Anschrift).
3 spalten KundenID, Nachname, Firma sollen jeweils auf Textvergleiche mit LIKE verglichen werden
Die Zellen in den Spalten Nachname oder Firma sind nicht immer befüllen.(muss ja auch nicht)

Eingabe über Textfelder:
eLokal1 = oDialog2.getControl("TextField1").text (KundenID)
eLokal2 = oDialog2.getControl("TextField2").text (Nachname)
eLokal3 = oDialog2.getControl("TextField3").text (Firma)

die Ausgabe erfolgt in einer Listbox...

mein Wunsch:
-wenn TextField1-3 leer, dann alle Datensätze anzeigen
-wenn z.B. in TextField3 "b" eingegeben wird, dass dann nur alle Zeilen in den die Firmen mit "b" als Anfangsbuchstabe beginnen, angezeigt werden mit kompletter Anschrift KundenID u.s.w.

so sollte es nicht sein:
bei Eingabe in TextField3 verschwindet der gesamte Datensatz außer die Zeilen bei denen die Zellen in der Spalte "Firma" NULL sind

Code: Alles auswählen

...SQL = SQL & "and(""Firma"" LIKE UPPER('"& eLokal3 &"%') OR ""Firma"" IS NULL)"
gruß marc
AOO411m6(Build:9775) unter WIN7 64bit
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: where like bei leeren Zellen (SQL)

Beitrag von DPunch »

Servus

Also wenn ich Dich richtig verstanden habe, dann musst Du das schon beim Zusammensetzen des SQL einrichten:

Code: Alles auswählen

	eLokal1 = oDialog2.getControl("TextField1").text
	eLokal2 = oDialog2.getControl("TextField2").text
	eLokal3 = oDialog2.getControl("TextField3").text
	SQL = "SELECT * FROM ""Kunden"" WHERE"
	aSqlCrits = Array("1=1")
	counter = 0
	If eLokal1 <> "" Then
		counter = counter + 1
		ReDim Preserve aSqlCrits(counter)
		aSqlCrits(counter) = "UPPER(""KundenID"") LIKE UPPER('" & eLokal1 & "%')"
	End If
	If eLokal2 <> "" Then
		counter = counter + 1
		ReDim Preserve aSqlCrits(counter)
		aSqlCrits(counter) = "UPPER(""Nachname"") LIKE UPPER('" & eLokal2 & "%')"
	End If
	If eLokal3 <> "" Then
		counter = counter + 1
		ReDim Preserve aSqlCrits(counter)
		aSqlCrits(counter) = "UPPER(""Firma"") LIKE UPPER('" & eLokal3 & "%')"
	End If
	SQL = SQL & " " & Join(aSqlCrits," AND ")
marc 70
**
Beiträge: 38
Registriert: Mo, 24.09.2012 23:00

Re: where like bei leeren Zellen (SQL)

Beitrag von marc 70 »

bin sprachlos !
passt alles

DANKE :D
AOO411m6(Build:9775) unter WIN7 64bit
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: where like bei leeren Zellen (SQL)

Beitrag von F3K Total »

Hi,
ich hätte da noch ein Beispiel ohne Makro anzubieten, arbeitet nach dem gleichen Prinzip.

Du musst dir "Country" als Firma denken, hier die Parameterabfrage des Unterformulares "Personen":

Code: Alles auswählen

SELECT "ID", "Name", "Surname", "Date of Birth", "Phone", "Email", "Street Address", "City", "Postal", "Country" FROM "Personen" 
WHERE 
(("ID" LIKE ('%' || :ID || '%')) OR  :ID IS NULL) 
AND 
((LOWER( "Name" ) LIKE ('%' || LOWER ( :Name ) || '%')) OR :Name IS NULL) 
AND
((LOWER( "Country" ) LIKE ('%' || LOWER ( :Country ) || '%')) OR :Country IS NULL)
das über die drei Parameter :ID , :Name , :Country an das Hauptformular "Filter" gebunden ist.

Gruß R
Dateianhänge
Fill_listbox_from_Filter.odb
(35.3 KiB) 122-mal heruntergeladen
marc 70
**
Beiträge: 38
Registriert: Mo, 24.09.2012 23:00

Re: [gelöst] where like bei leeren Zellen (SQL)

Beitrag von marc 70 »

danke @ F3K Total

hab es mir gerade heruntergeladen.
Klappt auch sehr gut.

also noch mal großen Dank, euch beiden, mit den beiden Beispielen ist man gut abgedeckt.

schönen Sonntag noch
gruß marc
AOO411m6(Build:9775) unter WIN7 64bit
Antworten