Syntaxproblem mit m_strFilter
-
Guten Morgen @ ALL !!!

AccessDB - Anbindung mit ODBC Treiber.
Eine Spalte heißt 'Nummer'. Ich möchte filtern, daher habe ich 2 Eingabefelder "Greater" and Smaller"CString snr1gr, snr1kl, sAnd, sGreat, sSmall, sFilter; GetDlgItemText(IDC_FILT_NR1_GR,snr1gr); GetDlgItemText(IDC_FILT_NR1_KL,snr1kl); sAnd=" AND "; sGreat=" >"; sSmall=" <"; sNr="Nummer"; sFilter=sNr+sGreat+snr1gr+sAnd+sNr+sSmall+snr1kl; m_pSet.m_strFilter = sFilter; m_pSet.Open(CRecordset::dynaset,NULL); // Ausgabe m_pSet.Close();Wenn ich per Hand z.B. für sFilter schreibe: m_pSet.m_strFilter = Nummer >3 AND Nummer <10; funzt es super.
Wenn ich in beide Eingabefelder Werte schreibe funzt das auch.Aber: Frage: Wenn ich ein Eingabefeld einfach leer lasse gibt er mir eine Fehlermeldung, dass halt ein Wert fehlt. Einen ähnlichen Filter habe ich an anderer Stelle für Strings ( natürlich nicht 'Von/Bis' aber mit LIKE ). Wenn ich da ein Feld leer lasse setzt er ein '%' und der Filter für dieses Feld ist die gesamte Auswahl. Leider funzt '%' hier nicht. Gibt es einen anderen Character, oder was muss ich eintragen wenn ich nur alle Datensätze größer 3 haben will ( ohne Obergrenze ) aber ohne die Syntax zu verändern.
Ich hoffe meine Problembeschreibung ist verständlich!?
Bitte gebt mir Tipps, vielen Dank an jedwede Lösungsvorschläge!MfG
RunSeb
-
Vielleicht sowas in der Art:
sFilter =sNr+sGreat+snr1gr; if(snr1kl != "") sFilter += sAnd+sNr+sSmall+snr1kl;
-
Jo, das ist zwar a nice idea aber ich habe leider noch nicht erwähnt, das ich insgesamt 9 Spalten habe ( 2x int, 7x float ), also 18 Eingabefelder.
Das sieht dann so aus:
sAnd = " AND "; sgreater = " >"; ssmaller = " <"; sNr1 = "Nummer"; sUkg = "untereKorngrenzeFehlförmigkeit"; sOkg = "obereKorngrenzeFehlförmigkeit"; sPaa = "PartikelanzahlinnerhalbderKorngrenzen"; sFkglb = "FehlkorngrenzeLängeBreite"; sFkgspht = "FehlkorngrenzeSphärität"; sFflb = "FehlförmigkeitLängeBreite"; sFfspht = "FehlförmigkeitSphärität"; sPlk = "Plattigkeit"; sFilter=sNr1+sgreater+snr1gr+sAnd+sNr1+ssmaller+snr1kl+sAnd+ sUkg+sgreater+sukggr+sAnd+sUkg+ssmaller+sukgkl+sAnd+ sOkg+sgreater+sokggr+sAnd+sOkg+ssmaller+sokgkl+sAnd+ sPaa+sgreater+spaagr+sAnd+sPaa+ssmaller+spaakl+sAnd+ sFkglb+sgreater+sfkglbgr+sAnd+sFkglb+ssmaller+sfkglbkl+sAnd+ sFkgspht+sgreater+sfkgsphtgr+sAnd+sFkgspht+ssmaller+sfkgsphtkl+sAnd+ sFflb+sgreater+sfflbgr+sAnd+sFflb+ssmaller+sfflbkl+sAnd+ sFfspht+sgreater+sffsphtgr+sAnd+sFfspht+ssmaller+sffsphtkl+sAnd+ sPlk+sgreater+splkgr+sAnd+sPlk+ssmaller+splkkl; // Die Variablen sind alle deklariert.Wenn ich alle Eingabefelder mit irgendwelchen Werten fülle funzt das super. Aber ich will halt auch mal welche leer lassen können oder sogar z.B. nur nach nummern filtern.
Habe auch schon überlegt leere Eingabefelder mit bestimmten Werten zu versehen z.B. wenn ein größer Eingabefeld leer den Wert '0' zu setzen und bei einem kleiner Eingabefeld den Wert auf eine Obergrenze setzen, die so immens groß ist wo ich weiß das sie eh nie erreicht wird!
Is das elegant? Und was ist wenn die Obergrenze doch überschritten wird? Eher nicht, aber wenn ich keine andere Lösung finde muss ich das wohl so umsetzen? Ach, Fragen über Fragen!
Auf jeden Fall vielen Dank!
MfG
RunSeb
-
Ich mach das jetzt so:

den String sFilter in 9 Strings für jeweils jede Spalte unterteilen.
Bsp für 'Nummer':CString sNummer; if ( snr1gr == "" && snr1kl == "" ) { sNummer=""; } if ( snr1gr != "" && snr1kl != "" ) { sNummer=sNr1+sgreater+snr1gr+sAnd+sNr1+ssmaller+snr1kl+sAnd;} if ( snr1gr == "" ) { sNummer=sNr1+ssmaller+snr1kl+sAnd; } if ( snr1kl == "" ) { sNummer=sNr1+sgreater+snr1gr+sAnd;} // und das halt für jede Spalte und dann sFilter so setzen: sFilter=sNummer+sOKorngrenze+sUKorngrenze/* ... */;Gruß
RunSeb