Suchen / Filter ??

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

Moderator: Moderatoren

Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Koverhage »

Aber auch kein USE, oder übersehe ich da was ?
Gruß
Klaus
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 »

Hi Klaus,

die Datei ist vorher auf, sonst könnte doch auch in KdGruppe kein dbsetfilter klappen
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von UliTs »

Bertram Hansen hat geschrieben:...@ 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.
Wobei zu erwähnen ist, dass Friedhelm stark erkältet war, so dass wir anderen auch mal intensiv zu Wort kommen konnten. Friedhelm konnte einfach nicht mit unserer Lautstärke mithalten 8) .
Tom hat geschrieben:Kommt mir bekannt vor. 8)
Ja, wobei ein paar Gedankenfehler eliminiert wurden.
Rolf Ramacher hat geschrieben:Hallo zusammen,
nachdem nund das gelöst ist. habe ich jetzt ein problem, das refrehsall() nicht funtk. anscheinend ist die Datenbank zu.
Rolf, kommt denn eine Fehlermeldung?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Koverhage »

ok, habe mich täuschen lassen, aber was macht
SET EXCLUSIVE ON
in der Function ?

Du wirst die Datei vorher irgendwo schließen
Gruß
Klaus
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 »

Hi Uli

die Meldung kommt beim oAnsBrowse:refreshAll() nach dem auf ruf der funktion kdGruppe() - Ich kann den refreshall auch in kdgruppe zum schluss vor dem Return setzen. das gleiche in grün.Warum ist die Datenbank zu. es gibt kein Close ?
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
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 »

wurde irgendwo der Selectbereich geändert ?
Gemischter Zugriff mit ALIAS-> und einfach im aktuellen Selectbereich ...

ich verlasse mich nie auf den aktuellen Selectbereich, sondern speichere die Infos nach dem USE und IF ! neterr() in eine numerische Variable und referenziere immer mit dieser:
(nStammdaten)-> ... wenn ich Funktionen aufrufe übergebe ich diese Variable, so bin ich sicher vor Seiteneffekten.
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 ??

Beitrag von Rolf Ramacher »

Hubert ich arbeite NIE mit Selectbereichen,nr 9 oder so ähnlich ich spreche die Datenbanken immer direkt an.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von UliTs »

Rolf Ramacher hat geschrieben:die Meldung kommt beim oAnsBrowse:refreshAll() nach dem auf ruf der funktion kdGruppe()
Wie lautet denn die Meldung?
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
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 »

Sorry, ich kann ja auch nur allgemein raten ;-)

Im Listing von Re: Suchen / Filter ?? Mi, 12. Mär 2014 13:11

steht z.B. deine Funktion noch mit einem CLOSE ALL am Ende ... weiter unten nicht mehr. DIESES würde auf jeden Fall die fehlende Datei erklären, weil einfach ALLES dicht gemacht wird was DBF angeht :wink:
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 // DAS HAT HIER NICHTS ZU SUCHEN !

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
und oben das SET EXCLUSIVE ON hat in der Funktion nichts zu suchen, da
1. keine Dateien geöffnet werden
2. es am Ende der Funktion nicht auf den ursprungszustand gesetzt wird
3. den Befehl nimmt man einmalig am Anfang und danach nur noch USE EXCLUSIVE oder USE SHARED direkt.

wie gesagt, wenn das CLOSE DATA noch drin steht, ist das eine Erklärung ansonsten ...
Nochwas, wenn eine Funktion KEINE Datei öffnet, dann hat sie diese auch nicht zu schließen ;-)
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Suchen / Filter ??

Beitrag von Tom »

und oben das SET EXCLUSIVE ON hat in der Funktion nichts zu suchen
Vorsichtig ausgedrückt. EXCLUSIVE ON/OFF wirkt sich auf alle nachfolgenden Dateioperationen im jeweiligen Thread (oder, wenn nicht mit Threads gearbeitet wird, in der gesamten Applikation) aus. Ich kann mir absolut keine sinnvolle "vorübergehende" Verwendung dieses Schalters vorstellen. Wenn nötig, ist ein USE ... EXCLUSIVE anzuwenden. Wenn man das aber innerhalb von normalen Auswertungen macht (und nicht nur in Service- und Wartungsfunktionen), verhindert man dadurch für alle Instanzen, die mit der fraglichen Tabelle arbeiten wollen, dass sie auf diese zugreifen können.

Ansonsten werden ich mich an der Fehlersuche in Rolfs Code nicht mehr beteiligen, bis er endlich mal dazu übergeht, vernünftige und nachvollziehbare Informationen zu seinen Problemen zu liefern - im absolut traumhaften Idealfall sogar mit nachvollziehbarem Testcode. Außerdem sei ihm dringend angeraten, sich mal intensiv mit Systematiken des Debuggings auseinanderzusetzen, sich hier im Forum mal darüber zu informieren, wie man das Fehlersystem nutzen kann, um Informationen über Tabellenzustände zu erhalten - und seinen Code zu entspaghettisieren. :wink:
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 »

also das Close Data ist weg. Dieser Fehler tritt auf nachdem das suchen und filter nach den Gruppen funktioniert hat. Aber ich kann mir nicht erklären warum die Datenbank dann auf einmal zu ist.

Code: Alles auswählen

-----------------------------------------------------------------------------

------------------------------------------------------------------------------
FEHLERPROTOKOLL von "C:\CRM\kunde.exe" Datum: 13.03.2014 18:52:28

Xbase++ Version     : Xbase++ (R) Version 1.90.331
Betriebssystem      : Windows  06.01 Build 07601 Service Pack 1
------------------------------------------------------------------------------
oError:args         :
           -> NIL
oError:canDefault   : N
oError:canRetry     : J
oError:canSubstitute: N
oError:cargo        : NIL
oError:description  : Datenbank-Alias existiert nicht/ist ungltig
oError:filename     : 
oError:genCode      :         66
oError:operation    : KDNR
oError:osCode       :          0
oError:severity     :          2
oError:subCode      :       8021
oError:subSystem    : BASE
oError:thread       :          1
oError:tries        :          1
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von (B)FIELDBLOCK(0)
Aufgerufen von XBPCOLUMN:DRAWROW(558)
Aufgerufen von (B)XBPBROWSE:DRAWROW(2037)
Aufgerufen von XBPBROWSE:DRAWROW(2037)
Aufgerufen von XBPBROWSE:FORCESTABLE(1103)
Aufgerufen von XBPBROWSE:HANDLEEVENT(1455)
Aufgerufen von XBPBROWSE:REFRESHROWS(2237)
Aufgerufen von XBPBROWSE:REFRESHALL(2161)
Aufgerufen von KDGRUPPE(29)
Aufgerufen von (B)MAIN(101)
Aufgerufen von MAIN(219)
auch nochaml anbei das Hauptmodul Proc Main

Code: Alles auswählen

Proc Main (cSatz)
   LOCAL nEvent, mp1, mp2
   LOCAL oDlg, oXbp, drawingArea, aEditControls := {}, aPos:={}, aSize:={}, cGrp:="", cSubject:="Betreff"
	Local cVerz:=CurDrive()+":\"+CurDir(), aBrPos:=Array(2), cEmail:="", cAnrede:="", oAStatic

	Privat cUser:="", aSpalt:=Array(18), cEingabeText:="", cArtnr:="", nKdnr:=0

	aSpalt[1] := "Kunde-Nr"
	aSpalt[2] := "Firma"
	aSpalt[3] := "Name"
	aSpalt[4] := "Vorname"
	aSpalt[5] := "Anrede"
	aSpalt[6] := "Strasse"
	aSpalt[7] := "PLZ"
	aSpalt[8] := "Ort"
	aSpalt[9] := "Telefon 1"
	aSpalt[10] := "Telefon 2"
	aSpalt[11] := "Handy"
	aSpalt[12] := "Email 1"
	aSpalt[13] := "Email 2"
	aSpalt[14] := "Telefax"
	aSpalt[15] := "Webseite"
	aSpalt[16] := "Geburtsdatum"
	aSpalt[17] := "Gründung"
	aSpalt[18] := "Gruppen"

	If empty(cSatz)
		msgbox("Parameterübergabe falsch!"+CRLF+"Bitte das Programm über CRM-Modul starten")
		Return
	Endif 

	cUser:=cVerz+"\user"+cSatz
	oDlg:=DialogErzeugen({50,50},{800,600},"Kunden-Bearbeitung","UP","m")
	drawingArea := oDlg:drawingArea
   drawingArea:setFontCompoundName( "9.Arial")

	aSize:=oDlg:CurrentSize()
	aPos:={40,aSize[2]-100}

	Copy File "adr.dbf" to (cUser+"\Tmpadr.dbf")
	Copy File "adr.fpt" to (cUser+"\Tmpadr.fpt")

	use (cUser+"\TmpAdr") New Exclusive

	oStatic := XbpStatic():new( oDlg,, aPos,  {700, 20} ) 
	oStatic:options := XBPSTATIC_TEXT_LEFT 
   oStatic:caption := "Gesucht werden kann nach: allen Feldern ausser der Gruppenzuordnung und Notizen"
   oStatic:create() 

	aPos[02]-=50
	oEingStatic := XbpStatic():new( oDlg,, aPos,  {120, 20} ) 
	oEingStatic:options := XBPSTATIC_TEXT_LEFT
   oEingStatic:caption := cEingabeText
   oEingStatic:create() 

	aPos[01]+=130
	oSleSuche := xbpSle():new(oDlg,,aPos,{140,20},,.F.) 
	oSleSuche:keyboard := {|nKey,mp2,obj| browseSearch(obj, oAnsBrowse, cArtnr)} 
	oSleSuche:create()
	oSleSuche:Show()

	aPos[01]+=180
	oStatic := XbpStatic():new( oDlg,, aPos,  {120, 20} ) 
	oStatic:options := XBPSTATIC_TEXT_LEFT 
   oStatic:caption := "Gruppensuche"
   oStatic:create() 

	aPos[01]+=130
	aRueck:=ErzeugenXbparts(oXbp,oDlg,aPos,{300,20},cGrp,0,"c","sle")
	oSleGrp:=aRueck[1]
*	oSleGrp:setinputFocus:={|| sortiere(18)}
	oSleGrp:dataLink := {|x| IIf( x==NIL, cGrp, cGrp := x ) } 

	aPos[01]+=310
   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 := {|| oAnsBrowse:=KDGruppe(cGrp,oAnsBrowse) ) }


	aBrPos[01]:=20
	aBrPos[02]:=250
	oAnsBrowse := GuiBrowseDb( oDlg,aBrPos, {aSize[01]-50,400} ) 		// {900,400}
   FOR i=1 TO FCount()-2
		cField:=FieldName( i ) 
		If i = 16
	 		oBrowseCol:=oAnsBrowse:addColumn(FieldBlock(cField),10,aSpalt[i],,) 
		Else
	 		oBrowseCol:=oAnsBrowse:addColumn(FieldBlock(cField),,aSpalt[i],,) 
		Endif
		oAnsBrowse:itemSelected:={|| AdrBearb(oDlg,"bea"),oAnsBrowse:=AdrLaden(cUser,oAnsBrowse) }
		oBrowseCol:Heading:LbClick := &("{||Sortiere("+Ltrim(Str(i,5,0))+"),oAnsBrowse:RefreshAll()}")

   NEXT i

	aRueck:=ErzeugenXbparts(oAStatic,oDlg,{50,100},{300,20},"",0,"l","static"," ")
	oAStatic:=aRueck[1]
	oAStatic:hide()

   oXbp := XbpPushButton():new( drawingArea, , {20,050}, {90,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "NEU"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| AdrBearb(oDlg,"neu",cSatz),oAnsBrowse:=AdrLaden(cUser,oAnsBrowse)  }

   oXbp := XbpPushButton():new( drawingArea, , {120,050}, {90,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Ändern"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| AdrBearb(oDlg,"bea",cSatz),oAnsBrowse:=AdrLaden(cUser,oAnsBrowse)  }

   oXbp := XbpPushButton():new( drawingArea, , {220,050}, {90,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Löschen"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| AdrLoesch(),oAnsBrowse:=AdrLaden(cUser,oAnsBrowse) }

   oXbp := XbpPushButton():new( drawingArea, , {320,050}, {90,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Drucken"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| AdrDrucken(oDlg ),oAnsBrowse:=AdrLaden(cUser,oAnsBrowse) }


   oXbp := XbpPushButton():new( drawingArea, , {420,050}, {90,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Angebot "
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| RgBearb(oDlg,"ang",cSatz),oAnsBrowse:=AdrLaden(cUser,oAnsBrowse) }

   oXbp := XbpPushButton():new( drawingArea, , {520,050}, {90,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Rechnung"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| Rgbearb(oDlg,"rg",cSatz),oAnsBrowse:=AdrLaden(cUser,oAnsBrowse) }

   oXbp := XbpPushButton():new( drawingArea, , {630,050}, {90,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Offene Posten"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| OP(oDlg,"rg" ),oAnsBrowse:=AdrLaden(cUser,oAnsBrowse) }

   oXbp := XbpPushButton():new( drawingArea, , {730,050}, {110,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Mahnung drucken"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| DruckMahn(oDlg ),oAnsBrowse:=AdrLaden(cUser,oAnsBrowse) }

   oXbp := XbpPushButton():new( drawingArea, , {900,050}, {90,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Zurück"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| PostAppEvent( xbeP_Close ) }

   oXbp := XbpPushButton():new( drawingArea, , {20,020}, {90,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "email"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| cEmail:=TmpAdr->Email1,cAnrede:=alltrim(TmpAdr->Anrede),;
				RunShell( "url.dll,FileProtocolHandler mailto:" + cEmail +"?subject=" + cSubject +"&body="+cAnrede , 'Rundll32.exe' ) }

   oXbp := XbpPushButton():new( drawingArea, , {120,020}, {90,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Brief"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| BriefSchreiben( ) }

   oXbp := XbpPushButton():new( drawingArea, , {220,020}, {90,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Historie"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| Historienanzeige(oDlg),oAnsBrowse:=AdrLaden(cUser,oAnsBrowse) }

   oXbp := XbpPushButton():new( drawingArea, , {320,020}, {90,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Export-CSV"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| Export(oAStatic),oAnsBrowse:=AdrLaden(cUser,oAnsBrowse) }

   oXbp := XbpPushButton():new( drawingArea, , {420,020}, {90,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Import Excel"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| Vorgabe(oDlg,oAStatic),oAnsBrowse:=AdrLaden(cUser,oAnsBrowse) }


	Sortiere(2)

   oDlg:show()
	oAnsBrowse:show()
	SetAppFocus(oAnsBrowse)

   nEvent := xbe_None
   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      oXbp:handleEvent( nEvent, mp1, mp2 )
   ENDDO

	Close Data

Return 
Gruß Rolf

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