Frage zu QBrowse2 Beispiel Alaska

Auf dem Weg von Clipper, FoxPro u.ä. nach Xbase++

Moderator: Moderatoren

Antworten
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Frage zu QBrowse2 Beispiel Alaska

Beitrag von mini990 »

Hallo,
ich habe folgende Frage zum QBrowse2-Beispiel:
erfolgt eine Tastatureingabe im Feld oSle wird der Datenbankzeiger über DBLocate aktualisiert, d.h. der Datensatzzeiger "Steht" auf dem gewählten Datensatz.
Wie kann der Datensatzzeiger durch klicken mit der linken Maustaste auf einen Datensatz richtig positioniert werden?

danke im voraus

Gruß Stefan
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:

Beitrag von Martin Altmann »

Hallo Stefan,
ich weiss nicht, ob ich Deine Frage richtig verstehe.
Aber das von Dir genannte Beispiel (unter \Programme\ALASKA\XPPW32\SOURCE\samples\basics\QBrowse ) dient ja nur der Anzeige der Daten verbunden mit einem inkrementellen Suchen.
Aber wenn Du die aktuelle Datensatznummer haben willst, so soll das laut Doku bei XbpQuickBrowse() mit :GetData() gehen. Dieses GetData() musst Du halt abfragen, sobald die Nachricht xbeBRW_ItemMarked eintrifft.
Beispiel:

Code: Alles auswählen

oBrow:=XbpQuickBrowse():new(.............
oBrow:itemMarked:={|,,obj| ::ShowRecno(obj) }
......

METHOD myclass:itemMarked( obj )
  local satznr()
  satznr := obj:GetData()
  ......
return self
Ich hoffe, es klappt so - aber so verstehe ich die Beschreibung in der Alaska-Referenzdokumentation.

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
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Beitrag von mini990 »

wenn ich nach der Dokumentation gehe habe ich es so verstanden, daß
Xbpbrowse:itemmarked ein Array zurückgibt das Zeile und Spalte beinhaltet.

Probiert habe ich es folgendermaßen:

oBrowse:itemmarked:= {|aRowCol| obrowse:gotorecord(arowcol[1])}

...und bin zu keinem Erfolgserlebnis gekommen.
Bis ich obrowse:gotorecord mit DBGoto ersetzt habe....

Die Befehlszeile sieht nun so aus:

Browse:itemmarked:= {|aRowCol| DBgoto( arowcol[1] ), ... }

vielen Dank für die Hilfe...

Gruß Stefan
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Beitrag von mini990 »

:x

und funktioniert nur solange die Datei nicht mehr Datensätze hat als auf dem Bildschirm angezeigt werden können......

Gruß Stefan

NACHTRAG!!!

...... und so funktionierts richtig:

oBrowse:itemmarked:= {|| DBgoto( obrowse:getdata() )}
Zuletzt geändert von mini990 am Mo, 06. Feb 2006 20:10, insgesamt 1-mal geändert.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Stefan.

Das XbpQuickBrowse-Objekt nutzt als Datenquelle ein Objekt der DacPagedDataStore-Klasse, die ihrerseits die Verbindung zur Datenbank herstellt. Nur so funktioniert das Quickbrowse, und nur deshalb ist es schneller als ein herkömmliches XbpBrowse. Das bedeutet aber auch, daß sich der Datensatzzeiger eben nicht synchron zum Quickbrowse bewegt, weil das die Systematik konterkarieren würde. DacPagedDataStore cached die Daten, liest vorweg (ahead). Vom Prinzip her ist das mit einem statischen SQL-Cursor vergleichbar. Und deshalb muß ein Verweis auf den Quelldatensatz i.d.R. fehlschlagen, da XbpQuickbrowse den Datensatzzeiger nicht synchron zur Datenquelle bewegt. Schau Dir mal die Doku zu DacPagedDataStore an.
Herzlich,
Tom
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Beitrag von mini990 »

Hallo Tom,
habe meinen vorherigen Eintrag editiert...., es funktioniert jetzt.

vielen Dank!

man merkt (und vor allem ich merke) daß noch vieles bei Xbase Neuland ist... und beim Umstieg von Clipper noch etliche Hürden zu umschiffen sind...

Gruß Stefan
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von Wolfgang Ciriack »

Hallo Stefan,
wenn du von Clipper umsteigst (wie ja die meissten), empfehle ich dir unbedingt einen Blick auf eXPress++ zu werfen, ich glaube ohne dieses hätte ich meine ersten Versuche in XBase++ schnell aufgegeben.
Viele Grüße
Wolfgang
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

Beitrag von Manfred »

Hi Stefan,
mini990 hat geschrieben::x

und funktioniert nur solange die Datei nicht mehr Datensätze hat als auf dem Bildschirm angezeigt werden können......

Gruß Stefan

NACHTRAG!!!

...... und so funktionierts richtig:

oBrowse:itemmarked:= {|| DBgoto( obrowse:getdata() )}
Ich merke, ich habe keinen Plan. Wo muß das denn rein?
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:

Beitrag von Martin Altmann »

Hallo Manfred,
wo das rein muß, siehst Du an meiner Antwort weiter oben!
Stefan hat es nur ohne eigenen Funktionsaufruf gemacht und direkt eingebunden - ist aber OOP-Code!

Code: Alles auswählen

oBrow:=XbpQuickBrowse():new(.............)
oBrow:itemMarked:={|| DBgoto( obrowse:getdata() )}
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

Beitrag von Manfred »

Hi Martin,

habe ich ja so gemacht...

Klappt nicht.. :(

Könntest Du evtl. einmal an dem Beispiel QBrowse2.prg nachsehen und schauen, ob es da auch so gilt?

Ich blicke da immer noch nicht durch, was wo hin muß um dann wie zu reagieren. :cry:
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:

Beitrag von Martin Altmann »

Hallo Manfred,
bei dem Beispiel siehst Du da ja auch keinen Effekt!!
Füge dort mal in Zeile 77 (oder 76, 75, 78 - egal) diese Zeile ein:

Code: Alles auswählen

oBrowse:itemMarked :={|| MsgBox( alltrim( str( obrowse:getdata() ) ), "Datensatznr." ) }
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

Beitrag von Manfred »

Hi Martin,

diese Ideen mit der MsgBox.... daran muß ich mich gewöhnen.

OK, ich habe es eingefügt. Bei jedem Click auf einen Satz im Browsefenster erscheint die Box mit entsprechendem Eintrag. Aber wie verarbeite ich das jetzt weiter? Es ist blöde, jedesmal oben im Suchbereich den Suchbegriff trotzdem noch angeben zu müssen, damit der gefundene Satz übernommen wird. Ich stehe doch jetzt auf dem Satz und kann ihn trotzdem nicht übernehmen, weil dann ein leeres Feld übergeben wird.
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:

Beitrag von Martin Altmann »

Hallo Manfred,
sorry, aber Deine Frage hat ja nun nichts mehr mit dem eigentlichen Thread zu tun!
Stefans Problem war ein ganz anderes und ist somit gelöst.
Was willst Du denn eigentlich erreichen?

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

Beitrag von Manfred »

Hi martin,

öhm, wenn ich die Frage richtig verstanden habe, möchte er nicht "nur" durch Eingabe im SLE, sondern durch Mausklick auf den Satz den Satz übernehmen. Das möchte ich auch so.

Wenn ich mit XbpBrowse arbeite, dann kann ich scrollen wohin ich will, sobald ich mit (in meinem Fall) STRG+RETURN abschließe, wird der angemarkerte Satz übernommen und dann weiterverarbeitet.

Das geht so nicht in qbrowse2. Wenn ich das aufrufe, steht der Cursor zwar auf dem Satz, der gefunden wurde, aber das SLE oben ist leer. Wenn ich jetzt (wieder in meinem Fall) STR+RETURN drücke, dann wird ein leerer String übergeben und danach ist Essig mit weiterverarbeiten. Ich erziele nur ein Ergebnis, wenn ich im SLE den Suchstring eingebe und DANN mit Strg+Return übernehme, was gefunden wurde.
Evtl. würde schon reichen, wenn ich den Eingabestring im vorherigen Suchfeld in das SLE übernehmen könnte, aber dazu bin ich wohl auch zu blöde.
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:

Beitrag von Martin Altmann »

Hallo Manfred,
das macht (m.E.) in diesem Beispiel so keinen Sinn!
Die Eingabefelder oben dienen dazu, die Eingabe in der jeweiligen Spalte zu suchen - wozu willst Du da oben ausgegeben haben, was Du angeklickt hast?
Wenn Du also stattdessen diese Zeile einfügst, wird oben in der Zeile die Datensatznummer eingetragen
oBrowse:itemMarked :={|| oSLE:SetData( alltrim( var2char( oBrowse:GetData() ) ) ) }
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

Beitrag von Manfred »

Hi Martin,

nönönönö, ich möchte nicht unbedingt oben angezeigt bekommen, was ich unten angeklickt habe. Ich möchte entweder oben eintippen, was ich suche, oder aber übernehmen, was ich unten angeklickt habe und das klappt nicht. Bei Deinem Beispiel bekomme ich zwar schön im SLE die Satznummer angezeigt, aber ich habe keinen Plan, was ich dann damit machen kann/soll/muß um "NUR" durch anklicken und dann STRG+RETURN den gemarkerten Satz schon zu übernehmen.
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:

Beitrag von Martin Altmann »

Gut,
also erstmal - wohin willst Du denn den angeklickten Satz übernehmen? Doch sicherlich nicht in das QBrowse2.prg-Fenster, oder?
Wenn Du auf den Satz klickst, merkst Du Dir einfach die Datensatznummer (z.B. in einer globalen Variable), schliesst das Fenster und hast alles, was Du brauchst!
Wenn Du in einem Fenster A das Qbrowse2-Beispiel aufrufst und in Deinem Fenster A ein eigener Eventhandler läuft, kannst Du z.B. im Qbrowse2-Fenster bei Klick auf einen Eintrag eine User-Event xyz (musst Du Dir definieren - siehe Beispiel 1 in der Onlinehilfe zu PostAppEvent ) mit der Datensatznummer als Parameter posten und Dein Fenster schließen.
Oder Du setzt (mit SetData oder mit PostAppEvent (siehe Beispiel 2 in der Onlinehilfe) in Deinem Fenster A die Eingabefelder entsprechend und schließt dann das Qbrowse2-Fenster...

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

Beitrag von Manfred »

HI Martin,

ich mache jetzt das, was ich immer mache, wenn ich nicht mehr weiterkomme. Ich baue mir jetzt eine Testumgebung und werde nach und nach versuchen ein XbpBrowse Objekt aufzubauen und dann sehen, was passiert, wenn ich das oder das mache, bzw. werde einfach alles nochmals durchlesen. Anders blicke ich da nicht mehr durch.

Ich werde mich zu gegebener Zeit mit entsprechenden Fragen hier nochmals zurückmelden.....
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