Suchen / Filter ??
Moderator: Moderatoren
- Rolf Ramacher
- 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 ??
Hi Klaus,
die Datei ist vorher auf, sonst könnte doch auch in KdGruppe kein dbsetfilter klappen
die Datei ist vorher auf, sonst könnte doch auch in KdGruppe kein dbsetfilter klappen
-
- 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 ??
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 .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.
Ja, wobei ein paar Gedankenfehler eliminiert wurden.Tom hat geschrieben:Kommt mir bekannt vor.
Rolf, kommt denn eine Fehlermeldung?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.
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Koverhage
- 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 ??
ok, habe mich täuschen lassen, aber was macht
Du wirst die Datei vorher irgendwo schließen
in der Function ?SET EXCLUSIVE ON
Du wirst die Datei vorher irgendwo schließen
Gruß
Klaus
Klaus
- Rolf Ramacher
- 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 ??
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 ?
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 ?
- brandelh
- 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 ??
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.
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
Hubert
- Rolf Ramacher
- 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 ??
Hubert ich arbeite NIE mit Selectbereichen,nr 9 oder so ähnlich ich spreche die Datenbanken immer direkt an.
-
- 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 ??
Wie lautet denn die Meldung?Rolf Ramacher hat geschrieben:die Meldung kommt beim oAnsBrowse:refreshAll() nach dem auf ruf der funktion kdGruppe()
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- brandelh
- 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 ??
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
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
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
und oben das SET EXCLUSIVE ON hat in der Funktion nichts zu suchen, daso 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
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
Hubert
- Tom
- 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 ??
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.und oben das SET EXCLUSIVE ON hat in der Funktion nichts zu suchen
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.
Herzlich,
Tom
Tom
- Rolf Ramacher
- 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 ??
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.
auch nochaml anbei das Hauptmodul Proc Main
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 ungltig
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)
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