Browse aus anderem thread aktualisieren [ERLEDIGT]

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

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

Browse aus anderem thread aktualisieren [ERLEDIGT]

Beitrag von Manfred »

Hi

Code: Alles auswählen

*                                                                              *
*                                                                              *
*                                                                              *
*                                                                              *
* letzte Änderung:19.02.2011                                                   *
********************************************************************************
* titelsuchen.prg Suchen von Titel/Interpreten im Vostamm                      *
* (c) Manfred Kunz Dezember 2008                                               *
********************************************************************************
#include "appevent.ch"
#include "common.ch"
#include "q:\include\inkey.ch"
#include "Xbp.ch"
********************************************************************************
PROCEDURE titelsuchen()
          LOCAL aPbSize             := {100,20}
          LOCAL aSleSize            := {300,20}
          LOCAL aTextSize           := {70,20}
          LOCAL lRahmen             := .T.
          LOCAL nEvent              := 0
          LOCAL mp1                 := 0
          LOCAL mp2                 := 0
          LOCAL nRahmenEingabeHoehe := 40

          LOCAL oBrowse        := NIL
          LOCAL oDialog        := NIL
          LOCAL oMaske         := masken():new()
          LOCAL oPbEnde        := NIL
          LOCAL oPbStart       := NIL
          LOCAL oRahmenBrowse  := NIL
          LOCAL oRahmenEingabe := NIL
          LOCAL oText          := NIL
          LOCAL oThreadF4      := threadf4():new()
          LOCAL oVideoF4Temp   := videof4temp():new()
          LOCAL oXbp           := NIL

          MEMVAR oVostamm

          oVostamm:felderleeren()

          oDialog       := DialogFenster():new()
          oDialog:title := "Interpret-/Titelsuche"
          oDialog:create()
          oDialog:setFrameState(XBPDLG_FRAMESTAT_MAXIMIZED)

          oRahmenEingabe      := rahmen():new(oDialog,,{5,oDialog:clientsize[2]-nRahmenEingabeHoehe},{oDialog:clientsize[1]-10,nRahmenEingabeHoehe},,,lRahmen)
          oRahmenEingabe:create()
          oRahmenBrowse       := rahmen():new(oDialog,,{5,5},{oDialog:clientsize[1]-10,oDialog:clientsize[2]-nRahmenEingabeHoehe},,,lRahmen)
          oRahmenBrowse:create()

          oText := feldtexte():new(oRahmenEingabe,,{1,5},aTextSize)
          oText:caption := "Interpret:"
          oText:create()

          oVostamm:oV_Darstell              := mk_sle():new(oRahmenEingabe,,{oText:currentsize()[1]+oText:currentPos()[1]+5,5},aSleSize)
          oVostamm:oV_Darstell:bufferlength := Len(oVostamm:v_darstell)
          oVostamm:oV_Darstell:cuebanner    := "Interpret eingeben"
          oVostamm:oV_Darstell:datalink     := {|x| IIf(x==NIL, oVostamm:v_darstell, oVostamm:v_darstell := x ) }
          oVostamm:oV_Darstell:keyboard     := {|nKey,x,o| geaendert("v_darstell",oVostamm,oPbStart) }
          oVostamm:oV_Darstell:create()

          oText := feldtexte():new(oRahmenEingabe,,{oVostamm:oV_darstell:currentsize()[1]+oVostamm:oV_darstell:currentPos()[1],5},aTextSize)
          oText:caption := "Titel:"
          oText:create()

          oVostamm:oV_Titel              := mk_sle():new(oRahmenEingabe,,{oText:currentsize()[1]+oText:currentPos()[1]+5,5},aSleSize)
          oVostamm:oV_Titel:bufferlength := Len(oVostamm:v_Titel)
          oVostamm:oV_Titel:cuebanner    := "Titel eingeben"
          oVostamm:oV_Titel:datalink     := {|x| IIf(x==NIL, oVostamm:v_Titel, oVostamm:v_Titel := x ) }
          oVostamm:oV_Titel:keyboard     := {|nKey,x,o| geaendert("v_titel",oVostamm,oPbStart) }
          oVostamm:oV_Titel:create()

          oPbStart := pushButton():new(oRahmenEingabe,,{oVostamm:oV_titel:currentsize()[1]+oVostamm:oV_titel:currentPos()[1]+10,5},aPbSize)
          oPbStart:activate := {|| IF(! oThreadF4:lGestartet, oVideoF4Temp:schliesse_datenbank(),oVideoF4Temp:db_oeffnen(,,.T.),oThreadF4:start("suchen",oThreadF4,oPbStart,oPbEnde,oBrowse,oVostamm)),oThreadF4:lGestartet := .F.)}
          oPbStart:caption  := "Start"
          oPbStart:create()
          oPbStart:disable()

          oPbEnde := pushButton():new(oRahmenEingabe,,{oPbStart:currentsize()[1]+oPbStart:currentPos()[1],5},aPbSize)
          oPbEnde:caption := "Ende"
          oPbEnde:create()

          oBrowse := mk_browseDb():new(oRahmenBrowse,,{5,5},{oRahmenBrowse:currentsize()[1]-10,oRahmenBrowse:currentsize()[2]-20})
          oBrowse:create()

          IF oMaske:leseBrowseFelder("videof4")
             oVideoF4Temp:db_oeffnen(,,.T.)                                     // muß direkt vor der Erzeugung der Spalten stehen
             oBrowse:erzeugeSpalten(oMaske,{XBP_PP_COMPOUNDNAME,"8.Arial"} )
             SetAppFocus(oVostamm:oV_Darstell)

             DO WHILE nEvent <> xbeP_Close
                nEvent := AppEvent( @mp1, @mp2, @oXbp )
                oXbp:handleEvent( nEvent, mp1, mp2 )
             ENDDO
          ENDIF
          oDialog:destroy()
          oVideoF4Temp:schliesse_datenbank()
          RETURN
********************************************************************************
PROCEDURE geaendert(cWoher,oVostamm,oPbStart)
          IF Upper(cWoher) == "V_DARSTELL"
             IF ! Empty(oVostamm:oV_Darstell:editbuffer())
                oPbStart:enable()
                oVostamm:oV_titel:disable()
             ELSE
                oVostamm:oV_Titel:enable()
                oPbStart:disable()
             ENDIF
          ELSE
             IF ! Empty(oVostamm:oV_titel:editbuffer())
                oPbStart:enable()
                oVostamm:oV_darstell:disable()
             ELSE
                oVostamm:oV_darstell:enable()
                oPbStart:disable()
             ENDIF
          ENDIF
          RETURN
********************************************************************************
PROCEDURE suchen(oThread,oPbStart,oPbEnde,oBrowse,objekt)
          LOCAL cSuch
          LOCAL lWeicheSuche   := .F.
          LOCAL oGenre         := genre():new()
          LOCAL oSysteme       := systeme():new()
          LOCAL oVideoF4Temp   := videof4temp():new()
          LOCAL oVo            := kassette():new()
          LOCAL oVostamm       := fstamm():new()

          MEMVAR oSysPara

          oThread:lGestartet := .T.
          oPbEnde:disable()
          oPbStart:setCaption("Abbruch")
          oGenre:db_oeffnen()
          oSysteme:db_oeffnen()
          oVo:db_oeffnen("idvostamm")
          oVostamm:db_oeffnen()
          oVideoF4Temp:db_oeffnen()
          (oVostamm:nArea)->(DbSetRelation((oGenre:nArea)  ,{|| Str((oVostamm:nArea)->idgenre,8,0)  },,"id" ) )
          (oVostamm:nArea)->(DbSetRelation((oSysteme:nArea),{|| Str((oVostamm:nArea)->idsystem,8,0) },,"id" ) )
          IF ! Empty(objekt:oV_Darstell:editbuffer())
             oVostamm:indexfocus("darst")
             IF "*" $ objekt:oV_Darstell:editbuffer() .OR. "?" $ objekt:oV_darstell:editbuffer()
                objekt:oV_darstell:getData()
                objekt:v_darstell := StrTran(Trim(objekt:v_darstell)," " ,"?") // ein evtl. "*" wird gegen ein "?" ausgetauscht wegen OrdWildSeek
                oPbStart:disable()
                oPbStart:setCaption("Suche..")
                (oVostamm:nArea)->(OrdWildSeek(Upper(objekt:v_darstell)))
                oPbStart:setCaption("Abbruch")
                oPbStart:enable()
                lWeicheSuche := .T.
             ELSE
                cSuch := ConvToAnsiCP(Upper(objekt:oV_darstell:editBuffer()))
                (oVostamm:nArea)->(DbSetScope(SCOPE_TOP   ,cSuch))
                (oVostamm:nArea)->(DbSetScope(SCOPE_BOTTOM,cSuch))
             ENDIF
          ELSE
             oVostamm:indexfocus("titel")
          ENDIF
          IF ! lWeicheSuche
             IF (oVostamm:nArea)->(Eof())
                oSysPara:oMessage:anzeigen("Es wurden keine Einträge gefunden zum Suchbegriff")
                oThread:lGestartet := .F.
             ENDIF
          ENDIF
          DO WHILE .T.
             Sleep(0)
             IF ! oThread:lGestartet
                EXIT
             ENDIF
             erstelleSatz(oVideoF4Temp,oBrowse,oVostamm,oVo,oSysteme,oGenre)
             IF lWeicheSuche
                IF (oVostamm:nArea)->(Found())
                   (oVostamm:nArea)->(OrdWildSeek())
                ELSE
                   oThread:lGestartet := .F.
                ENDIF
             ELSE
                (oVostamm:nArea)->(Dbskip())
                IF (oVostamm:nArea)->(Eof())
                   oThread:lGestartet := .F.
                ENDIF
             ENDIF
          ENDDO .T.
          (oVostamm:nArea)->(DbClearRelation())
          oVideoF4Temp:schliesse_datenbank(.T.) // klappt das hier mit dem .T.
          oPbStart:setCaption("Start")
          oPbEnde:enable()
          oThread:lGestartet := .F.
          RETURN
********************************************************************************
PROCEDURE erstelleSatz(oVideoF4Temp,oBrowse,oVostamm,oVo,oSysteme,oGenre)

          (oVo:nArea)->(DbClearScope())
          (oVo:nArea)->(DbSetScope(SCOPE_BOTH,Str((oVostamm:nArea)->id,8,0)))
          DO WHILE ! (oVo:nArea)->(Eof())
             (oVideoF4Temp:nArea)->(DbAppend())
             (oVideoF4Temp:nArea)->datumleih  := (oVo:nArea)->datumleih
             (oVideoF4Temp:nArea)->datumrueck := (oVo:nArea)->datumrueck
             (oVideoF4Temp:nArea)->ean        := (oVo:nArea)->ean
             (oVideoF4Temp:nArea)->genre      := (oGenre:nArea)->bez
             (oVideoF4Temp:nArea)->interpret  := (oVostamm:nArea)->v_darstell
             (oVideoF4Temp:nArea)->lagertg    := Date()-(oVo:nArea)->datumein+1
             (oVideoF4Temp:nArea)->lagernr    := (oVo:nArea)->lagernr
             (oVideoF4Temp:nArea)->preis      := (oVo:nArea)->preissoll
             (oVideoF4Temp:nArea)->reserve    := (oVo:nArea)->reserve
             (oVideoF4Temp:nArea)->system     := (oSysteme:nArea)->bez
             (oVideoF4Temp:nArea)->titel      := (oVostamm:nArea)->v_titel
             (oVideoF4Temp:nArea)->(DbGoTop())
             oBrowse:refreshAll()
             (oVo:nArea)->(Dbskip())
          ENDDO
          RETURN
Ich habe das Problem, dass der Browse zwar aktualisiert wird, aber vollkommen wirr. Ich denke mal, es liegt daran, dass die eigentliche DBF, die mit dem browse verbunden ist kein DbGoTop() bekommt. Aber wie kann ich das anders lösen? Muß ich die oVideof4Temp in den Zerospace packen um dann in dem Thread an die DBF zu gelangen, oder wie löst man sowas?
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Browse aus anderem thread aktualisieren

Beitrag von Martin Altmann »

Man könnte das mit dem Zerospace erledigen.
Oder einfach das entsprechende PostAppEvent() nutzen, um dem Browse ein Refresh zu senden.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von Manfred »

Hallo Martin

dem browse ein refresh zusenden? Das mache ich ja, aber der bekommt nicht mit, dass sich seine Daten geändert haben. Da müßte ich auch der entsprechenden DBF ein Dbgotop() zukommen lassen.
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Browse aus anderem thread aktualisieren

Beitrag von Martin Altmann »

Na das machst Du doch in Deiner erstelleSatz() - oder nicht?
Wo ist dann das Problem? Ist die Workarea nicht in dem Thread belegt, in dem die Prozedur läuft? Wenn dem so ist, dann klappt das eh' nicht. Dann darfst Du nicht über die Workarea zugreifen, sondern musst an das Objekt per PostAppEvent die entsprechende Aktion posten und diese muss dann darauf reagieren.
Du könntest an das Objekt ja den Befehl für gotop() posten - dazu kannst Du Dir die UserEvents erzeugen und selber definieren. Du musst dann in Deinem Objekt der Datenbank entsprechend auf die UserEvents reagieren.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von AUGE_OHR »

Manfred hat geschrieben:dem browse ein refresh zusenden? Das mache ich ja, aber der bekommt nicht mit, dass sich seine Daten geändert haben. Da müßte ich auch der entsprechenden DBF ein Dbgotop() zukommen lassen.
ein DbAppend() "sollte" den Datensatz zwar sperren aber du hat kein COMMIT.

ich würde nach dem DbAppend() auf NetErr() prüfen und mir die RECNO() holen auf die ich ein DbRLock( nRec ) setzen würde.
mit (oVideoF4Temp:nArea)->(DbGoto(nRec)) bis du dann "wirklich" auf dem Record und hast durch die "Bewegung" den "Cache" weggeschrieben. Nun kannst du ein:refreshCurrent() ausführen.

p.s. die ganze Ausgabe "verlängert" die Zeit erheblich ...
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von Manfred »

Martin Altmann hat geschrieben:Na das machst Du doch in Deiner erstelleSatz() - oder nicht?
Wo ist dann das Problem? Ist die Workarea nicht in dem Thread belegt, in dem die Prozedur läuft? Wenn dem so ist, dann klappt das eh' nicht. Dann darfst Du nicht über die Workarea zugreifen, sondern musst an das Objekt per PostAppEvent die entsprechende Aktion posten und diese muss dann darauf reagieren.
Du könntest an das Objekt ja den Befehl für gotop() posten - dazu kannst Du Dir die UserEvents erzeugen und selber definieren. Du musst dann in Deinem Objekt der Datenbank entsprechend auf die UserEvents reagieren.

Viele Grüße,
Martin
das ist aber eine andere Instanz. Die original DB, die dem browse zugeordnet ist, ist nicht in dem thread. Ich öffnen die DBF im Thread nochmal und schreibe das Ergebnis rein. Aber es nutzt nichts, wenn ich dann auch dort ein go top mache. Der Browser kommt durcheinander.

Aber wie soll ich dem Objekt sagen, dass es seine DBF an den Anfang führt, wenn die DBF in dem Thread nicht zur Verfügung steht. So ähnlich hatte ich es am Anfang. ich meine aber, dass das Objekt da war, aber die DBF war zu, bzw. stand nicht zur Verfügung.
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
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von AUGE_OHR »

Manfred hat geschrieben:Aber wie soll ich dem Objekt sagen, dass es seine DBF an den Anfang führt, wenn die DBF in dem Thread nicht zur Verfügung steht. So ähnlich hatte ich es am Anfang. ich meine aber, dass das Objekt da war, aber die DBF war zu, bzw. stand nicht zur Verfügung.
mache oBrowse "Field-wide" STATIC ...
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von Manfred »

Hi Jimmy,

ich habe keine Commit, aber eine DbGotop, dass sollte doch genügen , oder? Außerdem sehe ich ja was im browser, nur der steht immer wieder verkehrt und man kann nur einen teil durchscrollen.
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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von Manfred »

Mal sehen, was daraus wird.

Wenn ich in dem Thread ein oBrowse:goBottom() und ein refreshall() mache, dann scheint es so zu werden, wie ich es haben will.
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
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von AUGE_OHR »

Manfred hat geschrieben:Hi Jimmy,

ich habe keine Commit, aber eine DbGotop, dass sollte doch genügen , oder?

Außerdem sehe ich ja was im browser, nur der steht immer wieder verkehrt und man kann nur einen teil durchscrollen.
Event würde so gehen

Code: Alles auswählen

#define xbeUser_Update xbeP_User + 1
...
             DO WHILE nEvent <> xbeP_Close
                nEvent := AppEvent( @mp1, @mp2, @oXbp )
                DO CASE
                     CASE nEvent = xbeUser_Update
                         oBrowse:refreshCurrent()
                OTHERWISE
                   oXbp:handleEvent( nEvent, mp1, mp2 )
                ENDCASE 
             ENDDO
...

   PostAppEvent(xbeUser_Update,,,oDialog)
das oDialog ist aus der PROCEDURE titelsuchen() ... oder mache die "Field-wide" STATIC
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von Manfred »

Daran hatte ich auch erst gedacht. Aber soll man nicht in jedem thread eine neue Eventschleife bauen? oder habe ich da was falsches in Erinnerung?
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
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von AUGE_OHR »

Manfred hat geschrieben:Wenn ich in dem Thread ein oBrowse:goBottom() und ein refreshall() mache, dann scheint es so zu werden, wie ich es haben will.
wenn kein "aktiver" Index den Datensatz "oben" einordnet wo soll er den sonst bei APPEND sein ?
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Browse aus anderem thread aktualisieren

Beitrag von Martin Altmann »

Manfred,
wenn Du in zwei verschiedenen Threads die selbe Datenbank geöffnet hast und in einem Thread an den Anfang gehst, sieht der andere Thread nichts davon!!!
Wenn Du also aus einem Thread heraus eine Datenbank in einem anderen Thread steuern willst, kannst Du das entweder über den Zerospace tun (dann holst Du sie Dir immer den eigenen Thread, machst was drauf und gibst sie dann wieder frei) oder Du sendest einfach die entsprechenden Events an den anderen Thread (genauer: das Objekt) und dieses muss dann entsprechend drauf reagieren. Oder Du rufst die entsprechenden Methoden des anderen Objektes auf - dazu muss es aber namentlich bekannt sein (globale Variable).

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von AUGE_OHR »

Manfred hat geschrieben:Daran hatte ich auch erst gedacht. Aber soll man nicht in jedem thread eine neue Eventschleife bauen? oder habe ich da was falsches in Erinnerung?
nur wenn da auf etwas "reagiert" werden soll ... "Abbruch" in der DO WHILE ...
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von AUGE_OHR »

Code: Alles auswählen

#define xbeUser_Update xbeP_User + 1
...
             DO WHILE nEvent <> xbeP_Close
                nEvent := AppEvent( @mp1, @mp2, @oXbp )
                DO CASE
                     CASE nEvent = xbeUser_Update
                         Goto (mp1)
                         oBrowse:refreshCurrent()
                OTHERWISE
                   oXbp:handleEvent( nEvent, mp1, mp2 )
                ENDCASE
             ENDDO
...

   PostAppEvent(xbeUser_Update,RECNO(),,oDialog)
so hat man "wirklich" immer den gewünschten Datensatz
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von Manfred »

Ja,

ich habe ein wenig geschlafen. Das mit der Eventschleife war etwas falsch interpretiert von mir. Ich dachte doch zu Anfang, die würden sich gegenseitig nicht sehen, deshalb habe ich das auch nicht ausprobiert. Aber es scheint zu klappen mit dem postAppEvent().

Ein Bonbon wäre natürlich, wenn man während der Datenerzeugung Scollen könnte um zwischendurch das Ergebnis zu durchsuchen.
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
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von AUGE_OHR »

Manfred hat geschrieben:Ein Bonbon wäre natürlich, wenn man während der Datenerzeugung Scollen könnte um zwischendurch das Ergebnis zu durchsuchen.
wieso kannst du das nicht ?

wenn es wirklich der "letzte" Datensatz ist sollte man mit

Code: Alles auswählen

   CASE nEvent = xbeUser_Update
           Goto (mp1)
           Postappevent(xbeP_Keyboard,xbeK_CTRL_PGDN,,oBrowse)
einen "Scroll" Effect hin bekommen.
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von Manfred »

nachdem ich gestern noch ein wenig gebastelt hatte, bin ich selbst darauf gekommen. Ähnlich wie Dein Vorschlag. Ich merke mir den Satz, auf dem der Zeiger gerade steht, mache ein GoTop und dann wieder auf den gemerkten Recno. Klappt genau so, wie ich es mir dachte.
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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von Manfred »

es wäre ja auch zu schön um wahr zu sein.

Ich denke mal, es liegt ein weiteres Verständnisproblem vor

Code: Alles auswählen

*                                                                              *
*                                                                              *
*                                                                              *
*                                                                              *
* letzte Änderung:19.02.2011                                                   *
********************************************************************************
* titelsuchen.prg Suchen von Titel/Interpreten im Vostamm                      *
* (c) Manfred Kunz Dezember 2008                                               *
********************************************************************************
#include "appevent.ch"
#include "common.ch"
#include "q:\include\inkey.ch"
#include "Xbp.ch"

#define xbeU_RefreshAll xbeP_User + 1
********************************************************************************
PROCEDURE titelsuchen()
          LOCAL aPbSize             := {100,20}
          LOCAL aSleSize            := {300,20}
          LOCAL aTextSize           := {70,20}
          LOCAL lRahmen             := .T.
          LOCAL nEvent              := 0
          LOCAL mp1                 := 0
          LOCAL mp2                 := 0
          LOCAL nRahmenEingabeHoehe := 40

          LOCAL oBrowse        := NIL
          LOCAL oDialog        := NIL
          LOCAL oMaske         := masken():new()
          LOCAL oPbEnde        := NIL
          LOCAL oPbStart       := NIL
          LOCAL oRahmenBrowse  := NIL
          LOCAL oRahmenEingabe := NIL
          LOCAL oText          := NIL
          LOCAL oThreadF4      := threadf4():new()
          LOCAL oVideoF4Temp   := videof4temp():new()
          LOCAL oXbp           := NIL

          MEMVAR oVostamm

          oVostamm:felderleeren()

          oDialog       := DialogFenster():new()
          oDialog:title := "Interpret-/Titelsuche"
          oDialog:create()
          oDialog:setFrameState(XBPDLG_FRAMESTAT_MAXIMIZED)

          oRahmenEingabe      := rahmen():new(oDialog,,{5,oDialog:clientsize[2]-nRahmenEingabeHoehe},{oDialog:clientsize[1]-10,nRahmenEingabeHoehe},,,lRahmen)
          oRahmenEingabe:create()
          oRahmenBrowse       := rahmen():new(oDialog,,{5,5},{oDialog:clientsize[1]-10,oDialog:clientsize[2]-nRahmenEingabeHoehe},,,lRahmen)
          oRahmenBrowse:create()

          oText := feldtexte():new(oRahmenEingabe,,{1,5},aTextSize)
          oText:caption := "Interpret:"
          oText:create()

          oVostamm:oV_Darstell              := mk_sle():new(oRahmenEingabe,,{oText:currentsize()[1]+oText:currentPos()[1]+5,5},aSleSize)
          oVostamm:oV_Darstell:bufferlength := Len(oVostamm:v_darstell)
          oVostamm:oV_Darstell:cuebanner    := "Interpret eingeben"
          oVostamm:oV_Darstell:datalink     := {|x| IIf(x==NIL, oVostamm:v_darstell, oVostamm:v_darstell := x ) }
          oVostamm:oV_Darstell:keyboard     := {|nKey,x,o| geaendert("v_darstell",oVostamm,oPbStart) }
          oVostamm:oV_Darstell:create()

          oText := feldtexte():new(oRahmenEingabe,,{oVostamm:oV_darstell:currentsize()[1]+oVostamm:oV_darstell:currentPos()[1],5},aTextSize)
          oText:caption := "Titel:"
          oText:create()

          oVostamm:oV_Titel              := mk_sle():new(oRahmenEingabe,,{oText:currentsize()[1]+oText:currentPos()[1]+5,5},aSleSize)
          oVostamm:oV_Titel:bufferlength := Len(oVostamm:v_Titel)
          oVostamm:oV_Titel:cuebanner    := "Titel eingeben"
          oVostamm:oV_Titel:datalink     := {|x| IIf(x==NIL, oVostamm:v_Titel, oVostamm:v_Titel := x ) }
          oVostamm:oV_Titel:keyboard     := {|nKey,x,o| geaendert("v_titel",oVostamm,oPbStart) }
          oVostamm:oV_Titel:create()

          oPbStart := pushButton():new(oRahmenEingabe,,{oVostamm:oV_titel:currentsize()[1]+oVostamm:oV_titel:currentPos()[1]+10,5},aPbSize)
          oPbStart:activate := {|| IF(! oThreadF4:lGestartet,(oVideoF4Temp:schliesse_datenbank(),oVideoF4Temp:db_oeffnen(,,.T.),oThreadF4:start("suchen",oThreadF4,oPbStart,oPbEnde,oVostamm,oDialog,oBrowse)),oThreadF4:lGestartet := .F.)}
          oPbStart:caption  := "Start"
          oPbStart:create()
          oPbStart:disable()

          oPbEnde := pushButton():new(oRahmenEingabe,,{oPbStart:currentsize()[1]+oPbStart:currentPos()[1],5},aPbSize)
          oPbEnde:activate := {|| PostAppEvent(xbeK_ESC ,mp1,mp2,oDialog)}
          oPbEnde:caption  := "Ende"
          oPbEnde:create()

          oBrowse := mk_browseDb():new(oRahmenBrowse,,{5,5},{oRahmenBrowse:currentsize()[1]-10,oRahmenBrowse:currentsize()[2]-20})
          oBrowse:create()

          IF oMaske:leseBrowseFelder("videof4")
             oVideoF4Temp:db_oeffnen(,,.T.)                                     // muß direkt vor der Erzeugung der Spalten stehen
             oBrowse:erzeugeSpalten(oMaske,{XBP_PP_COMPOUNDNAME,"8.Arial"} )
             SetAppFocus(oVostamm:oV_Darstell)

             DO WHILE nEvent <> xbeP_Close
                nEvent := AppEvent( @mp1, @mp2, @oXbp )
                oXbp:handleEvent( nEvent, mp1, mp2 )
                DO CASE
                   CASE nEvent == xbeK_ESC
                        EXIT

                   CASE nEvent == xbeU_RefreshAll                               // User Event, der gesetzt wird
                        oVideoF4Temp:nSatzNummer := (oVideoF4Temp:nArea)->(Recno())
                        (oVideoF4Temp:nArea)->(DbGoTop())
                        (oVideoF4Temp:nArea)->(DbGoTo(oVideoF4Temp:nSatzNummer))
                        oBrowse:refreshAll()
                ENDCASE
             ENDDO
          ENDIF
          oDialog:destroy()
          oVideoF4Temp:schliesse_datenbank()
          RETURN
********************************************************************************
PROCEDURE geaendert(cWoher,oVostamm,oPbStart)
          IF Upper(cWoher) == "V_DARSTELL"
             IF ! Empty(oVostamm:oV_Darstell:editbuffer())
                oPbStart:enable()
                oVostamm:oV_titel:disable()
             ELSE
                oVostamm:oV_Titel:enable()
                oPbStart:disable()
             ENDIF
          ELSE
             IF ! Empty(oVostamm:oV_titel:editbuffer())
                oPbStart:enable()
                oVostamm:oV_darstell:disable()
             ELSE
                oVostamm:oV_darstell:enable()
                oPbStart:disable()
             ENDIF
          ENDIF
          RETURN
********************************************************************************
PROCEDURE suchen(oThread,oPbStart,oPbEnde,oVostamm,oDialog,oBrowse)
          LOCAL cSuch
          LOCAL lWeicheSuche   := .F.
          LOCAL oGenre         := genre():new()
          LOCAL oSysteme       := systeme():new()
          LOCAL oVideoF4Temp   := videof4temp():new()
          LOCAL oVo            := kassette():new()
          LOCAL oVostamm2      := fstamm():new()

          MEMVAR oSysPara

          oThread:lGestartet := .T.
          oPbEnde:disable()
          oPbStart:setCaption("Stop")
          oGenre:db_oeffnen()
          oSysteme:db_oeffnen()
          oVo:db_oeffnen("idvostamm")
          oVostamm2:db_oeffnen()
          oVideoF4Temp:db_oeffnen()
          (oVostamm2:nArea)->(DbSetRelation((oGenre:nArea)  ,{|| Str((oVostamm2:nArea)->idgenre,8,0)  },,"id" ) )
          (oVostamm2:nArea)->(DbSetRelation((oSysteme:nArea),{|| Str((oVostamm2:nArea)->idsystem,8,0) },,"id" ) )
          SetAppFocus(oBrowse)
          IF ! Empty(oVostamm:oV_Darstell:editbuffer())
             oVostamm2:indexfocus("darst")
             IF "*" $ oVostamm:oV_Darstell:editbuffer() .OR. "?" $ oVostamm:oV_darstell:editbuffer()

*************************
*************************
                oVostamm:oV_darstell:getData()                                            <------ angeblich unbekannte Variable "oVostamm"
*************************
*************************

                oVostamm:v_darstell := StrTran(Trim(oVostamm:v_darstell)," " ,"?")
                oPbStart:disable()
                oPbStart:setCaption("Suche..")
                (oVostamm2:nArea)->(OrdWildSeek(Upper(oVostamm:v_darstell)))
                oPbStart:setCaption("Stop")
                oPbStart:enable()
                lWeicheSuche := .T.
             ELSE
                cSuch := ConvToAnsiCP(Upper(oVostamm:oV_darstell:editBuffer()))
                (oVostamm2:nArea)->(DbSetScope(SCOPE_TOP   ,cSuch))
                (oVostamm2:nArea)->(DbSetScope(SCOPE_BOTTOM,cSuch))
             ENDIF
          ELSE
             oVostamm2:indexfocus("titel")
             IF "*" $ oVostamm:oV_titel:editbuffer() .OR. "?" $ oVostamm:oV_titel:editbuffer()
                oVostamm:oV_titel:getData()
                oVostamm:v_titel := StrTran(Trim(oVostamm:v_titel)," " ,"?")
                oPbStart:disable()
                oPbStart:setCaption("Suche..")
                (oVostamm2:nArea)->(OrdWildSeek(Upper(oVostamm:v_titel)))
                oPbStart:setCaption("Stop")
                oPbStart:enable()
                lWeicheSuche := .T.
             ELSE
                cSuch := ConvToAnsiCP(Upper(oVostamm:oV_titel:editBuffer()))
                (oVostamm2:nArea)->(DbSetScope(SCOPE_TOP   ,cSuch))
                (oVostamm2:nArea)->(DbSetScope(SCOPE_BOTTOM,cSuch))
             ENDIF
          ENDIF
          IF ! lWeicheSuche
             IF (oVostamm2:nArea)->(Eof())
                oSysPara:oMessage:anzeigen("Es wurden keine Einträge gefunden zum Suchbegriff")
                oThread:lGestartet := .F.
             ENDIF
          ENDIF
          DO WHILE .T.
             Sleep(0)
             IF ! oThread:lGestartet
                EXIT
             ENDIF
             erstelleSatz(oVideoF4Temp,oVostamm2,oVo,oSysteme,oGenre,oDialog)
             IF lWeicheSuche
                IF (oVostamm2:nArea)->(Found())
                   (oVostamm2:nArea)->(OrdWildSeek())
                ELSE
                   oThread:lGestartet := .F.
                ENDIF
             ELSE
                (oVostamm2:nArea)->(Dbskip())
                IF (oVostamm2:nArea)->(Eof())
                   oThread:lGestartet := .F.
                ENDIF
             ENDIF
          ENDDO .T.
          (oVostamm2:nArea)->(DbClearRelation())
          oVideoF4Temp:schliesse_datenbank()
          oVostamm2:schliesse_datenbank()
          oVo:schliesse_datenbank()
          oGenre:schliesse_datenbank()
          oSysteme:schliesse_datenbank()
          oPbStart:setCaption("Start")
          oPbEnde:enable()
          oThread:lGestartet := .F.
          RETURN
********************************************************************************
PROCEDURE erstelleSatz(oVideoF4Temp,oVostamm,oVo,oSysteme,oGenre,oDialog)
          LOCAL mp1 := 0
          LOCAL mp2 := 0

          (oVo:nArea)->(DbClearScope())
          (oVo:nArea)->(DbSetScope(SCOPE_BOTH,Str((oVostamm:nArea)->id,8,0)))
          DO WHILE ! (oVo:nArea)->(Eof())
             (oVideoF4Temp:nArea)->(DbAppend())
             (oVideoF4Temp:nArea)->datumleih  := (oVo:nArea)->datumleih
             (oVideoF4Temp:nArea)->datumrueck := (oVo:nArea)->datumrueck
             (oVideoF4Temp:nArea)->ean        := (oVo:nArea)->ean
             (oVideoF4Temp:nArea)->genre      := (oGenre:nArea)->bez
             (oVideoF4Temp:nArea)->interpret  := (oVostamm:nArea)->v_darstell
             (oVideoF4Temp:nArea)->lagertg    := Date()-(oVo:nArea)->datumein+1
             (oVideoF4Temp:nArea)->lagernr    := (oVo:nArea)->lagernr
             (oVideoF4Temp:nArea)->preis      := (oVo:nArea)->preissoll
             (oVideoF4Temp:nArea)->reserve    := (oVo:nArea)->reserve
             (oVideoF4Temp:nArea)->system     := (oSysteme:nArea)->bez
             (oVideoF4Temp:nArea)->titel      := (oVostamm:nArea)->v_titel
             PostAppEvent(xbeU_RefreshAll ,mp1,mp2,oDialog)
             (oVo:nArea)->(Dbskip())
          ENDDO
          RETURN
in der Doppelsternreihe gibt es eine Fehlermeldung. Den Grund verstehe ich nicht.
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
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von AUGE_OHR »

Manfred hat geschrieben:

Code: Alles auswählen

             DO WHILE nEvent <> xbeP_Close
                nEvent := AppEvent( @mp1, @mp2, @oXbp )
                oXbp:handleEvent( nEvent, mp1, mp2 )
                DO CASE
                   CASE nEvent == xbeK_ESC
                        EXIT

                   CASE nEvent == xbeU_RefreshAll                               // User Event, der gesetzt wird
                        oVideoF4Temp:nSatzNummer := (oVideoF4Temp:nArea)->(Recno())
                        (oVideoF4Temp:nArea)->(DbGoTop())
                        (oVideoF4Temp:nArea)->(DbGoTo(oVideoF4Temp:nSatzNummer))
                        oBrowse:refreshAll()
                ENDCASE
             ENDDO
in der Doppelsternreihe gibt es eine Fehlermeldung. Den Grund verstehe ich nicht.
warum er in der Zeile "knallt" habe ich mir noch nicht angesehen, aber zu deiner Eventschleife :
Das "oXbp:handleEvent( nEvent, mp1, mp2 )" kommt ins OTHERWISE

Code: Alles auswählen

   DO WHILE nEvent <> xbeP_Close
        nEvent := AppEvent( @mp1, @mp2, @oXbp , nTimeout)
        DO CASE
             // falls 4th Parameter "timeout" zuerst auf xbeK_NONE prüfen
             CASE nEvent == xbeK_NONE
...
        OTHERWISE 
             oXbp:handleEvent( nEvent, mp1, mp2 )
        ENDCASE
   ENDDO
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browse aus anderem thread aktualisieren [ERLEDIGT]

Beitrag von Manfred »

Hi Jimmy,

ich habe es anders gelöst. Klappt jetzt so wie ich es haben will. Aber das mit dem otherwise, das verstehe ich noch nicht. Warum muß das so?
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Browse aus anderem thread aktualisieren [ERLEDIGT]

Beitrag von Martin Altmann »

Damit Dir keine Evens verloren gehen!
Auf die, die Dir bekannt sind, reagierst Du ja in Deiner Case. Für alle anderen soll die Standardroutine ziehen - darum die otherwise-"Anweisung"

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browse aus anderem thread aktualisieren [ERLEDIGT]

Beitrag von Manfred »

ja, ich merke schon, ich habe das noch nicht so ganz verinnerlicht mit dem Eventhandle..... :roll: :?
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
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Browse aus anderem thread aktualisieren

Beitrag von AUGE_OHR »

Manfred hat geschrieben:

Code: Alles auswählen

PROCEDURE suchen(oThread,oPbStart,oPbEnde,oVostamm,oDialog,oBrowse)
...
  oThread:lGestartet := .T.
  oPbEnde:disable()
  oPbStart:setCaption("Stop")
  oGenre:db_oeffnen()
  oSysteme:db_oeffnen()
  oVo:db_oeffnen("idvostamm")
  oVostamm2:db_oeffnen()
  oVideoF4Temp:db_oeffnen()
  (oVostamm2:nArea)->(DbSetRelation((oGenre:nArea)  ,{|| Str((oVostamm2:nArea)->idgenre,8,0)  },,"id" ) )
  (oVostamm2:nArea)->(DbSetRelation((oSysteme:nArea),{|| Str((oVostamm2:nArea)->idsystem,8,0) },,"id" ) )
  SetAppFocus(oBrowse)
  IF ! Empty(oVostamm:oV_Darstell:editbuffer())
      oVostamm2:indexfocus("darst")
      IF "*" $ oVostamm:oV_Darstell:editbuffer() .OR. "?" $ oVostamm:oV_darstell:editbuffer()
*************************
*************************
         oVostamm:oV_darstell:getData()   <------ angeblich unbekannte Variable "oVostamm"
*************************
*************************
in der Doppelsternreihe gibt es eine Fehlermeldung. Den Grund verstehe ich nicht.
hm ...
a.) du machst keinen RLOCK vor dem :getdata()
b.) hast du einen ALIAS-> im :Datalink ?
c.) bist du im ALIAS() von oVostamm(2) ?
Zuletzt geändert von AUGE_OHR am Mo, 21. Feb 2011 19:45, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browse aus anderem thread aktualisieren [ERLEDIGT]

Beitrag von Manfred »

Hi Jimmy,

oben kann man es genau erkennen. Der Datalink geht NUR auf eine Speichervariable und die ist da bekannt.
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!!
Antworten