Suchen / Filter ??

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21189
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Suchen / Filter ??

Beitrag von Manfred »

sach bloß :lol:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Bertram Hansen »

Jan hat geschrieben:Was ist denn jetzt gestern auf dem XUG-Treffen als Lösung gefunden worden?

Jan
Leider war KEIN Rolf da.
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Jan »

Bertram Hansen hat geschrieben:Leider war KEIN Rolf da.
grmpf!

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2935
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Wolfgang Ciriack »

Vielleicht dürft ihr die Lösungen nicht so schnell hintereinander posten. Lasst doch mal einen Tag dazwischen, damit sie auch gelesen werden können.
Viele Grüße
Wolfgang
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Jan »

Tja. Nun war Rolf schon mehrfach wieder hier im Forum. Ohne hier irgendeine Nachricht zu hinterlassen. Mir fallen spontan mehrere Gründe für ein:
  • Der Punkt ist inzwischen vollkommen egal, das muß man uns aber nicht sagen
  • Er ist genervt von unseren Aufforderungen doch bitte endlich mal zu lesen, was hier geschrieben wird
  • Er hat die Lösung anhand unserer Antworten gefunden und schämt sich dafür, das er nicht schon vorher mal gelesen hat
  • Er hat die Lösung wie auch immer selber schon gefunden, was man uns aber nicht sagen muß
  • Ein anderes Projekt/Problem ist größer als dieses hier, dieses hier wird erstmal nach hinten geschoben
  • Er versteht überhaupt nicht was wir von ihm wollen und redet daher nicht mehr mit uns darüber
Wie auch immer: Warum haben so viele Leute sich eigentlich so viele konstruktive Gedanken um sein Problem gemacht (inzwischen immerhin 5 Seiten lang), wenn das sowieso alles nur für die Tonne war? Ich kann Hubert nur zu gut verstehen und überlege mir bei Rolf nächsten Problem, ob ich mir überhaupt die Zeit nehme, die Frage durchzulesen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Rolf Ramacher »

Hallo zusammen,

@Tom ich habe deinen code eingebaut und auf meine Db abgestimmt. Ich habe in diesem Test-system 3 Kundensätze angelegt. Er findet aber immer alle 3 Datensätze, auch wenn ich im Suchfeld
eine Gruppe eingebe die gar nicht existiert. auch beim umsetzen cVergleich:=lower(alltrim(cGrp)) - spielt keine Rolle

habe ich irgendwo noch etwas übersehen ???

Code: Alles auswählen

Function KdGruppe(cGrp)

LOCAL nZaehler := 0, cVergleich :=cGrp
LOCAL aVergleich := {}

SET EXCLUSIVE ON

IF "," $ cVergleich
  DO WHILE "," $ cVergleich
    aAdd(aVergleich,GetTextFromCommaText(@cVergleich))
  ENDDO
  ELSE
ENDIF
aAdd(aVergleich,AllTrim(Lower(cVergleich)))

msgbox(var2lchar( aVergleich))


TmpAdr->(DbSetFilter({||RolfSuche(TmpAdr->grpname,aVergleich)}))

TmpAdr->(DbGoTop())

DO WHILE !TmpAdr->(Eof())
  nZaehler ++
  TmpAdr->(DbSkip(+1))
ENDDO

MsgBox(AllTrim(Str(nZaehler))+' Datensätze gefunden')

CLOSE DATA

RETURN NIL

FUNCTION RolfSuche(cFeldInhalt,aVergleich)
LOCAL aSuchFelder := {}, i, n
IF "," $ cFeldInhalt
  DO WHILE "," $ cFeldInhalt
    aAdd(aSuchFelder,GetTextFromCommaText(@cFeldInhalt))
  ENDDO
ENDIF
aAdd(aSuchFelder,AllTrim(Lower(cFeldInhalt)))
n:=Len(aSuchFelder)
FOR i := 1 TO n
  IF Lower(Trim(aSuchFelder[i])) $ aVergleich
    RETURN .T.
  ENDIF
NEXT
RETURN .F.

FUNCTION GetTextFromCommaText(c)
LOCAL cRetText := Lower(AllTrim(Left(c,At(",",c)-1)))
c := SubStr(c,At(",",c)+1)
RETURN cRetText
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Jan »

Sorry, ich kann nicht anders, und breche viel zu schnell schon wieder meine selbst auferlegte Schweigepflicht zu diesem Thema: Einen Filter .T. oder .F. setzen - welchen Sinn macht das bitte genau?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Tom »

Jan - wovon redest Du? Der Filter setzt auf die Funktion "RolfSuche", die .T. oder .F. antwortet, je nachdem, ob im aktuellen Datensatz Treffer sind oder nicht. Das ist doch richtig so, oder? :oops:
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21189
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Suchen / Filter ??

Beitrag von Manfred »

Das ist prima, wenn einer eine Frage frägen tut und alle anderen bekloppt dabei werden. :badgrin:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von brandelh »

Hallo Manfred :badgrin:
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21189
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Suchen / Filter ??

Beitrag von Manfred »

deshalb ja "einer". Ich bin mir der Sache schon bewußt.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Jan »

Tom,

Du hast relativ sicher Recht. Ich hatte nur in meinem Brass gegenüber Rolfs permanenten Verweigerungen nur gesehen, das er da unten eine Schleife durchläuft, die nur .T. oder .F. zurückgibt. Aber der Sinn soll wohl sein festzustellen, ob der aktuelle Satz der Filterbedingung entspricht oder nicht.

Alos wenn das wirklich so ist, dann ist das erstens doppeltgemoppelt, was er da macht, denn genau diese Sachen arbeitet er doch vorher schon aus und übergibt die sogar in aVergleich. Außerdem dürfte das eine ganz enorme Bremse sein. Ein Filter ist ja schon langsam, aber auf diese Weise geht das wohl vollkommen in die Knie. Und drittens ist der Code Humbug, denn er zerbröselt den String undspeichert die bestandteile in aVergleich, dann zerbröselt er den String in der Filterbedingung noch mal und vergleicht jedes Element mit aVergleich. Das muß ja immer wahr sein. Und viertens hat Rolf schon wieder/immer noch nichts gelesen von dem, was wir heir ausgearbeitet haben, macht es noch komplizierter und noch falscher.

Leute, ich fang gleich an zu kotzen!

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Tom »

Äh, Jan.

Dieser Code ist von mir.

Und er ist zwar hier und da ein bisschen redundant, aber richtig. Man muss ihn schon verstehen. Beide Situationen - das Kundenfeld und das Suchfeld - können unsortierte Aufzählungen enthalten, und dem trägt dieses Konstrukt Rechnung.
Herzlich,
Tom
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Rolf Ramacher »

Hallo Jan,

weshalb ich manchmal keine Nachricht hinterlassen habe, ist ganz einfach. da ich an anderen Dingen beschäftigt war. Der jetztige code ist von Tom, den er hier gepostet hat. Ich verstehe nicht warum er immer alle Sätze findet.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21189
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Suchen / Filter ??

Beitrag von Manfred »

Da wir hier gerade vom Filter sprechen. Jan hatte doch vorhin auch eine komische Entdeckung gemacht, die wir am Telefon verfolgt hatte. Nur das wir das alles Schritt für Schritt am Debugger nachvollzogen, bzw auseinandergewurstelt hatten. Ohne diese Vorgehensweise wären wir da sehr wahrscheinlich nie drauf gekommen.

Rolf versuche es doch einfach mal so, indem Du den Filter über den Debugger Schritt für Schritt setzt und dann das Ergebnis beobachtest. Vielleicht liegt es ja an was ganz anderem.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von brandelh »

Also ich habe mal seinen code genommen, in eine einfache MAIN gehängt, TOMS DBF Aufbau dazu,
SET EXCLUSIVE und CLOSE in der Funktion gelöscht, da diese ja eben NICHT die DBF öffnet und erhalte völlig richtige Werte :!:

Der Code ist umständlich und zumindest die zweite Auflösung unnötig, da ein "hans" $ "horst, hans, emil" auch .t. gibt und 3 Durchläufe spart, aber es funktioniert.

Woran kann es liegen ?

Wenn ein Index beteiligt ist, dann SET OPTIMIZE OFF probieren, je nach Situation wird einfach zuviel OPTIMIERT ! ;-)
Wenn dieser CODE in ANSI eingegeben wird (auch die Umlaute) aber ohne SET CHARSET TO OEM läuft, dann werden die Umlaute intern zu anderen Zeichen und LOWER() / UPPER() können sie nicht mehr umwandeln ! Wenn der Suchbegriff später in der EXE eingegeben wird spielt das natürlich keine Rolle mehr.

Hier nun mein Code, wobei man besser die ZIP entpackt (wegen Zeichensatz und DBF)

Code: Alles auswählen


// WICHTIG, dies ist OEM code. Index und Suchbegriff bekommt Probleme, wenn Konstanten mit Umlauten im ANSI Quellcode geschrieben werden und lower() in OEM EXE !!!

PROCEDURE Main()
   LOCAL aDbStruct := {{'GRPNAME','C',50,0}}, nZaehler := 0
   LOCAL aVergleich := {}

   SET EXCLUSIVE ON

   DbCreate('test.dbf',aDbStruct)
   USE test NEW ALIAS TmpAdr
   APPEND BLANK
   REPLACE grpname with 'Meier, Meinard'
   APPEND BLANK
   REPLACE grpname with 'Otto, Müller'        // bei Test sollte man Umlaute meiden ;-)
   APPEND BLANK
   REPLACE grpname with 'Meinard, Otto, Schulz'
   ?
   ? "Hier sollte 0 stehen:"
   kdGruppe( "NIXDA" )
   ?
   ? "Hier sollte 2 stehen:"
   kdGruppe( "OTTO" )
   ?
   ? "Hier sollte 2 stehen:"
   kdGruppe( "Meier, müller" )
   ?
   ? "Hier sollte 3 stehen:"
   kdGruppe( "Meier, otto" )

   close

   ? "Ende, bitte Taste drücken"

   inkey(20)

return

Function KdGruppe(cGrp)

LOCAL nZaehler := 0, cVergleich :=cGrp
LOCAL aVergleich := {}

// SET EXCLUSIVE ON // WARUM HIER ??? das muss schon vor dem USE stehen ! HB

IF "," $ cVergleich
  DO WHILE "," $ cVergleich
    aAdd(aVergleich,GetTextFromCommaText(@cVergleich))
  ENDDO
  ELSE
ENDIF
aAdd(aVergleich,AllTrim(Lower(cVergleich)))

// msgbox(var2lchar( aVergleich))
? "Vergleichsarray:    ",aVergleich


TmpAdr->(DbSetFilter({||RolfSuche(TmpAdr->grpname,aVergleich)}))

TmpAdr->(DbGoTop())

DO WHILE !TmpAdr->(Eof())
  nZaehler ++
  ? str(nZaehler,3)+".:",TmpAdr->grpname
  TmpAdr->(DbSkip(+1))
ENDDO
? "Datensätze gefunden: ",nZaehler
// MsgBox(AllTrim(Str(nZaehler))+' Datensätze gefunden')

// CLOSE DATA wer nicht öffnet, darf auch nicht schließen !!!       HB

RETURN nZaehler // warum nicht die Anzahl zurückgeben, sieht hier schöner aus ;-)

FUNCTION RolfSuche(cFeldInhalt,aVergleich)
LOCAL aSuchFelder := {}, i, n
IF "," $ cFeldInhalt
  DO WHILE "," $ cFeldInhalt
    aAdd(aSuchFelder,GetTextFromCommaText(@cFeldInhalt))
  ENDDO
ENDIF
aAdd(aSuchFelder,AllTrim(Lower(cFeldInhalt)))
n:=Len(aSuchFelder)
FOR i := 1 TO n
  IF Lower(Trim(aSuchFelder[i])) $ aVergleich
    RETURN .T.
  ENDIF
NEXT
RETURN .F.

FUNCTION GetTextFromCommaText(c)
LOCAL cRetText := Lower(AllTrim(Left(c,At(",",c)-1)))
c := SubStr(c,At(",",c)+1)
RETURN cRetText
und hier das Ergebnis:

Code: Alles auswählen

Hier sollte 0 stehen:
Vergleichsarray:     {nixda}
Datensätze gefunden:           0

Hier sollte 2 stehen:
Vergleichsarray:     {otto}
  1.: Otto, Müller
  2.: Meinard, Otto, Schulz
Datensätze gefunden:           2

Hier sollte 2 stehen:
Vergleichsarray:     {meier, müller}
  1.: Meier, Meinard
  2.: Otto, Müller
Datensätze gefunden:           2

Hier sollte 3 stehen:
Vergleichsarray:     {meier, otto}
  1.: Meier, Meinard
  2.: Otto, Müller
  3.: Meinard, Otto, Schulz
Datensätze gefunden:           3
Ende, bitte Taste drücken
Gruß
Hubert
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Suchen / Filter ?? [ERLEDIGT]- dank "Ansgar" XUG Leverus

Beitrag von Rolf Ramacher »

erledigt
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Bertram Hansen »

OK! Der liebe Rolf hat nicht erwähnt, dass wir uns gestern in Leverkusen zu fünft in einem längerem Drama mit glücklichem Ausgang diesem Thema gewidmet haben. :banghead: #-o :D
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Jan »

Wobei mich (und vermutlich auch die anderen an der Diskussion Beteiligten) interessieren würde, was denn nun die Lösung oder das Problem war.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Tom »

Äh, Bertram.

Länger als das Drama hier kann's wohl kaum gewesen sein. :wink:
Herzlich,
Tom
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Bertram Hansen »

@ Jan,
vielleicht stellt ja Rolf die Veränderungen ins Forum. Ich habe leider keinen Code von Ihm.


@ Tom,
das stimmt. Wir haben ca. eine halbe Stunde dafür benötigt und hatten dabei sogar richtig Spaß. Hier im Forum ging das ja über mehrere Tage.
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Rolf Ramacher »

so ist der Code der funkt. den Refresh für den xbpbrowse muß ich wohl noch einbauen.

Code: Alles auswählen

Function KdGruppe(cGrp)

LOCAL nZaehler := 0, cVergleich := cGrp
LOCAL aVergleich := {}

SET EXCLUSIVE ON

IF "," $ cVergleich
  DO WHILE "," $ cVergleich
    aAdd(aVergleich,GetTextFromCommaText(@cVergleich))
  ENDDO
  ELSE
ENDIF
aAdd(aVergleich,AllTrim(Lower(cVergleich)))

msgbox(var2lchar( aVergleich)+TmpAdr->grpname+var2lchar(RolfSuche(TmpAdr->grpname,aVergleich)))


TmpAdr->(DbSetFilter({||RolfSuche(TmpAdr->grpname,aVergleich)}))

TmpAdr->(DbGoTop())

DO WHILE !TmpAdr->(Eof())
  nZaehler ++
  TmpAdr->(DbSkip(+1))
ENDDO

MsgBox(AllTrim(Str(nZaehler))+' Datensätze gefunden')

CLOSE DATA

RETURN NIL

FUNCTION RolfSuche(cFeldInhalt,aVergleich)
LOCAL aSuchFelder := {}, i, n
/*
IF "," $ cFeldInhalt
  DO WHILE "," $ cFeldInhalt
    aAdd(aSuchFelder,GetTextFromCommaText(@cFeldInhalt))
  ENDDO
ENDIF
*/
aAdd(aSuchFelder,AllTrim(Lower(cFeldInhalt)))
msgbox(var2lchar( aSuchfelder )+"//"+trim(cFeldinhalt)  )

//n:=Len(aSuchFelder)
n:=Len(aVergleich)
FOR i := 1 TO n
  //IF Lower(Trim(aSuchFelder[i])) $ aVergleich
  IF aVergleich[i] $ Lower(Trim(cFeldInhalt))
    RETURN .T.
  ENDIF
NEXT
RETURN .F.

FUNCTION GetTextFromCommaText(c)
LOCAL cRetText := Lower(AllTrim(Left(c,At(",",c)-1)))
c := SubStr(c,At(",",c)+1)
RETURN cRetText
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Tom »

Kommt mir bekannt vor. 8)
Herzlich,
Tom
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Rolf Ramacher »

Hallo zusammen,

nachdem nund das gelöst ist. habe ich jetzt ein problem, das refrehsall() nicht funtk. anscheinend ist die Datenbank zu.

hier der Aufruf zu der Function KdGruppe

Code: Alles auswählen

   oXbp := XbpPushButton():new( drawingArea, , aPos, {50,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "GO"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| KDGruppe(cGrp),oAnsBrowse:RefreshAll() }

und in der Func KdGruppe gibt es kein close. Die Func kdgruppe ist etwas weiter oben gepostet
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Rolf Ramacher »

Hier nochmal die Function KdGruppe()

Code: Alles auswählen

Function KdGruppe(cGrp)

LOCAL nZaehler := 0, cVergleich := cGrp
LOCAL aVergleich := {}

SET EXCLUSIVE ON

IF "," $ cVergleich
  DO WHILE "," $ cVergleich
    aAdd(aVergleich,GetTextFromCommaText(@cVergleich))
  ENDDO
  ELSE
ENDIF
aAdd(aVergleich,AllTrim(Lower(cVergleich)))

msgbox(var2lchar( aVergleich)+TmpAdr->grpname+var2lchar(RolfSuche(TmpAdr->grpname,aVergleich)))


TmpAdr->(DbSetFilter({||RolfSuche(TmpAdr->grpname,aVergleich)}))

TmpAdr->(DbGoTop())

DO WHILE !TmpAdr->(Eof())
  nZaehler ++
  TmpAdr->(DbSkip(+1))
ENDDO
TmpAdr->(DbGoTop())
MsgBox(AllTrim(Str(nZaehler))+' Datensätze gefunden')

RETURN NIL

FUNCTION RolfSuche(cFeldInhalt,aVergleich)
LOCAL aSuchFelder := {}, i, n
/*
IF "," $ cFeldInhalt
  DO WHILE "," $ cFeldInhalt
    aAdd(aSuchFelder,GetTextFromCommaText(@cFeldInhalt))
  ENDDO
ENDIF
*/
aAdd(aSuchFelder,AllTrim(Lower(cFeldInhalt)))
msgbox(var2lchar( aSuchfelder )+"//"+trim(cFeldinhalt)  )

//n:=Len(aSuchFelder)
n:=Len(aVergleich)
FOR i := 1 TO n
  //IF Lower(Trim(aSuchFelder[i])) $ aVergleich
  IF aVergleich[i] $ Lower(Trim(cFeldInhalt))
    RETURN .T.
  ENDIF
NEXT
RETURN .F.

FUNCTION GetTextFromCommaText(c)
LOCAL cRetText := Lower(AllTrim(Left(c,At(",",c)-1)))
c := SubStr(c,At(",",c)+1)
RETURN cRetText
kein Close irgendwo
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Antworten