Browser Zeilen markieren und temporär merken?

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Browser Zeilen markieren und temporär merken?

Beitrag von satmax »

Ich habe da einen SQL Browser der mir 1-x Records anzeigt. Nun möchte ich davon 1-x Records markieren. Wo trage ich mir am besten ein welche Datensätze markiert sind? Es existiert ja jede Datenzeile im Speicher, gibt es da eventuell ein :cargo wo ich mir ein Flag markiert speichern könnte?

Das ganze soll nicht in die DB zurückgeschrieben werden, vielmehr werden die temporär markierten Datensätze anschließend weiterverarbeitet und sollen nicht weiter markiert bleiben.
Gruß
Markus
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Browser Zeilen markieren und temporär merken?

Beitrag von Martin Altmann »

Moin Markus,
hast Du da die Daten nicht eh' in einem Array? Eine Spalte mehr dazu und mittels .T./.F. als Inhalt den Markiert-Modus hinterlegen.

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
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Browser Zeilen markieren und temporär merken?

Beitrag von satmax »

Martin Altmann hat geschrieben:Moin Markus,
hast Du da die Daten nicht eh' in einem Array? Eine Spalte mehr dazu und mittels .T./.F. als Inhalt den Markiert-Modus hinterlegen.

Viele Grüße,
Martin
Noch nicht. Ich wollte mir das reinschaufeln in ein Array sparen und dachte es gibt so eventuell auch einen einfachen Weg. Wenn nicht wird wohl ein Array werden.
Gruß
Markus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Browser Zeilen markieren und temporär merken?

Beitrag von AUGE_OHR »

satmax hat geschrieben:Noch nicht. Ich wollte mir das reinschaufeln in ein Array sparen und dachte es gibt so eventuell auch einen einfachen Weg. Wenn nicht wird wohl ein Array werden.
du musst ja gar nicht alle Daten in ein Array schaufeln ... es reicht doch aus wenn du dir "merkst" welche Datensätze ( Row / Col ) markiert wurden. Allerdings mit einem normalen Browser wird dir aber noch nicht viel nützen. Du musst schon tiefer nach Ownerdraw gehen.

Am besten mit einer eigene Class MySQLBrowse FROM XbpBrowse. jetzt musst du nur noch das Array in o:customDrawCell vergleichen mit

Code: Alles auswählen

METHODE MySQLBrowse:customDrawCell( oPS, aInfo )
...
   nRow := aInfo[ XBP_DRAWINFO_ITEM ]
   IF ASCAN(::aMarker,nRow) > 0
       lMarker := .T.
   ELSE
       lMarker := .F.
   ENDIF
und kannst dann entscheiden was du "malst"
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Browser Zeilen markieren und temporär merken?

Beitrag von Wolfgang Ciriack »

Oder du legst dir ein leeres Array aTmp an, in das du beim Markieren die Recordnummer schreibst.
Eine Farbbedingung für die markierte Zeile wäre dann {|| iif(Ascan(aTmp,db->(recno()))>0, farbig, nichtfarbig)}
Viele Grüße
Wolfgang
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Browser Zeilen markieren und temporär merken?

Beitrag von Jan »

Wolfgang Ciriack hat geschrieben:Oder du legst dir ein leeres Array aTmp an, in das du beim Markieren die Recordnummer schreibst.
Eine Farbbedingung für die markierte Zeile wäre dann {|| iif(Ascan(aTmp,db->(recno()))>0, farbig, nichtfarbig)}
Genau so mache ich das auch.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Browser Zeilen markieren und temporär merken?

Beitrag von georg »

Hallo,


nein, Ihr macht das nicht so. Weil hier nämlich ein SQL Browse (!) verwendet wird, und da gibt es Probleme mit dem recno(). Solange das Result Set unverändert ist, geht das hin. In dem Moment, wo das Result Set neu eingelesen wird, sind die generierten Satzpointer ungültig.

Aber der Ansatz ist vom Grundsatz her richtig, nur muss eben der Primary Key in dem Array abgelegt werden.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Browser Zeilen markieren und temporär merken?

Beitrag von Jan »

Georg,

ob ich jetzt RecNo() oder PrimaryKey nehme ist doch gleich. Ich merke mir eine eindeutige Kennzeichnung des Satzes.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Browser Zeilen markieren und temporär merken?

Beitrag von georg »

Hallo, Jan -


genau darum geht es. Beim Zugriff auf SQL-Tabellen (Result Sets) gibt es eine simulierte recno(), aber die ist nicht eindeutig. Darum mein Hinweis, dass der Primary Key verwendet werden muss (sofern es einen gibt). Ansonsten kann man sehr seltsame Resultate bekommen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Browser Zeilen markieren und temporär merken?

Beitrag von Wolfgang Ciriack »

Ich hatte einfach mal das SQL überlesen :?
Viele Grüße
Wolfgang
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Browser Zeilen markieren und temporär merken?

Beitrag von satmax »

Danke für alle Tipps, das mit SQL ist mir klar, ich habe in jeder Tabelle einen unique key.

Wenn ich's fertig habe, werde ich mich nochmals kurz melden wie ich es gelöst habe.
Gruß
Markus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Browser Zeilen markieren und temporär merken?

Beitrag von brandelh »

georg hat geschrieben:Hallo, Jan -
genau darum geht es. Beim Zugriff auf SQL-Tabellen (Result Sets) gibt es eine simulierte recno(), aber die ist nicht eindeutig.
Darum mein Hinweis, dass der Primary Key verwendet werden muss (sofern es einen gibt).
Ansonsten kann man sehr seltsame Resultate bekommen.
darum spendiere ich jeder Tabelle ein Feld RECNO als PrimaryKey bzw. autoincrement :D
Gruß
Hubert
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Browser Zeilen markieren und temporär merken?

Beitrag von satmax »

Da die Daten aus verschiedensten Tabellen kommen und das mit einem SQL Statement nicht sinnvoll zu lösen ist, habe ich zwei Select daraus gemacht und das ganze in ein Array eingelesen. Es werden selten mehr wie ca. 200 Datensätze eingelesen werden, auf keinen Fall können es über 1000 werden.

Da ich ja auch TopDown verwende, habe ich dazu einfach tdArBrow() genommen. Eine Spalte mit einem Marker hinzugefügt, dann noch ein Codeblock:

Code: Alles auswählen

bColor := {|xVal,oCol,nRow| iif(oDlg:aData[oDlg:oBrows:nCurEl][2]==.t.,{tdDRD,tdYEL},{nil,nil}) }
Dateianhänge
browser.JPG
browser.JPG (33.86 KiB) 5107 mal betrachtet
Gruß
Markus
Antworten