DataSet auf eine gezielte Row setzen?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

DataSet auf eine gezielte Row setzen?

Beitrag von TT73GP7 »

HalliHallo,

es ist etwas schwer zuBeschreiben

ich habe ein dbGrid
dummerweise gibt es Ereignisse wo ich ein Datasource.DataSet.Refresh machen muss
nun springt die ausgewählte line des DBGrid wieder auf dem ersten Eintrag

kann ich irgendwie so einstellen das er da bleibt wo er ist?
oder kann ich irgendwo eine ID angeben damit er wieder auf die richtige Stelle in DBGrid springt?

vielen dank

Nixsager
Beiträge: 168
Registriert: Sa 8. Okt 2016, 08:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Polska

Re: DataSet auf eine gezielte Row setzen?

Beitrag von Nixsager »

Das müsste 'DBGrid1.SelectedIndex:=' sein.
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Re: DataSet auf eine gezielte Row setzen?

Beitrag von TT73GP7 »

hmm gleich mal ausprobieren

hmm leider nein
also wenn ich DBGrid1.SelectedIndex := 2 angebe
tut sich nix am grid

wenn ich nun irgendeine Line auswähle und mit ShowMessage(inttostr(DBGrid1.SelectedIndex)) anzeigen lasse bekomme ich immer 0 wieder

hmm scheint was anderes zusein

stj
Beiträge: 19
Registriert: So 15. Okt 2006, 14:52
OS, Lazarus, FPC: Lazarus 2.2.0, FPC 3.2.2
Wohnort: Meckenburg-Vorpommern

Re: DataSet auf eine gezielte Row setzen?

Beitrag von stj »

TT73GP7 hat geschrieben:ich habe ein dbGrid
dummerweise gibt es Ereignisse wo ich ein Datasource.DataSet.Refresh machen muss
nun springt die ausgewählte line des DBGrid wieder auf dem ersten Eintrag


Das ist klar. Intern werden die Daten neu abgerufen und nach einem Open/Refresh steht man auf dem ersten Satz.

TT73GP7 hat geschrieben:kann ich irgendwie so einstellen das er da bleibt wo er ist?
oder kann ich irgendwo eine ID angeben damit er wieder auf die richtige Stelle in DBGrid springt?


Das DBGrid visualisiert nur deine Daten. Wenn du also in deinem Dataset auf Satz 1 bist, dann wird im Grid Satz 1 als aktiv angezeigt.

Lösung:
Merke dir den aktuellen Satz vor deinem Refresh und positioniere das Dataset nach dem Refresh wieder auf diesen Satz.
Wie du dir den Satz merkst, ist deine Sache :-) Es bieten sich an Bookmark und/oder PrimaryKey und Locate.

Stephan

TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Re: DataSet auf eine gezielte Row setzen?

Beitrag von TT73GP7 »

ok

kapiere ich nicht
ich habe grade versucht es mit GetBookmark versucht
und dann mit GotoBookmark

aber ich scheitere ja schon dadran in welchen Datentyp ich das speichern soll?

Google ist mir da echt keine Hilfe bei

grundsätzlich weiß ich welcher Satz als letztes ausgewählt war. Jeder Satz hat in der TDataSet eine eindeutige ID
anzeigen tue ich die in Grid nicht

wozu auch

aber selbst damit komme ich irgendwie nicht weiter
ich habe mich da total festgebissen :(

Nixsager
Beiträge: 168
Registriert: Sa 8. Okt 2016, 08:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Polska

Re: DataSet auf eine gezielte Row setzen?

Beitrag von Nixsager »

Funktioniert mein Tipp?

Mit '[Name des DBGrid].SelectedIndex' müsstest du auch die aktuell ausgewählte Zeile auslesen können.
Diesen Wert einfach vor der Bearbeitung in einer Variabel zwischenspeichern und nach der Bearbeitung wieder an 'SelectedIndex' zrückgeben.
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Re: DataSet auf eine gezielte Row setzen?

Beitrag von TT73GP7 »

Nixsager hat geschrieben:Funktioniert mein Tipp?

Mit '[Name des DBGrid].SelectedIndex' müsstest du auch die aktuell ausgewählte Zeile auslesen können.
Diesen Wert einfach vor der Bearbeitung in einer Variabel zwischenspeichern und nach der Bearbeitung wieder an 'SelectedIndex' zrückgeben.



hach leider nein
also SelectedIndex gibt ja einen Integer zurück. So diesen hab ich mir einfach mal mit showmessage anzeigen lassen

halt jedes mal eine Meldung wenn ich einen Button gedrückt habe
gut alles kein Problem

ersten Eintrag ausgewählt und Button gedrückt Meldung war 0
ok

3 Eintrag in DBgrid ausgewählt und Button gedrückt
Meldung 0 :(

hmm

dann hart in quelltext den index mal auf 2 gesetzt
dann müsste er ja immer auf dem zweiten Eintrag springen

nix da
er bleibt immer auf dem ersten :(

PS es ist nur ein DBGrid auf der Anwendung
also ich lese zu 100% das richtige aus ;)

und mir ist eigentlich auch bewusst das das DBGrid nur anzeigt und das DataSet die Daten enthält und auch auf welchen ich mich grade befinde.

hach irgendwie hasst mich meine eigene Anwendung grade

stj
Beiträge: 19
Registriert: So 15. Okt 2006, 14:52
OS, Lazarus, FPC: Lazarus 2.2.0, FPC 3.2.2
Wohnort: Meckenburg-Vorpommern

Re: DataSet auf eine gezielte Row setzen?

Beitrag von stj »

TT73GP7 hat geschrieben:ok
ich habe grade versucht es mit GetBookmark versucht
und dann mit GotoBookmark
aber ich scheitere ja schon dadran in welchen Datentyp ich das speichern soll?

grundsätzlich weiß ich welcher Satz als letztes ausgewählt war. Jeder Satz hat in der TDataSet eine eindeutige ID
anzeigen tue ich die in Grid nicht

aber selbst damit komme ich irgendwie nicht weiter


Datentyp ist TBookmarkStr.
Ich bin mir aber nicht sicher, ob das nach einem Refresch funktioniert ...

Ich hab das immer so gelöst:

ID := Dataset.FieldByName('ID').AsXXX;
try
Dataset.Refresh;
finally
if not Dataset.Locate('ID',ID,...) then
// Datensatz ist weg :-)
Dataset.First;
end;

Vielleicht hilft das in die richtige Richtung ...

TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Re: DataSet auf eine gezielte Row setzen?

Beitrag von TT73GP7 »

boar was für eine schwere Geburt das doch war

:(

sorry das ich so begriffsstutzig war
aber nun läuft es

vielen dank

Nixsager
Beiträge: 168
Registriert: Sa 8. Okt 2016, 08:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Polska

Re: DataSet auf eine gezielte Row setzen?

Beitrag von Nixsager »

Wie hast du es gelöst?
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Re: DataSet auf eine gezielte Row setzen?

Beitrag von TT73GP7 »

Code: Alles auswählen

 
  frmPersonen.cUserID:= frmPersonen.dsPerson.DataSet.FieldByName('ID').asString;
  frmPersonen.dsPerson.DataSet.Refresh;
  frmPersonen.dsPerson.DataSet.Locate('ID',frmPersonen.cUserID,[LoCaseInsensitive]);


musste aber ganz schön rumgooglen bis ich das mit dem loCase raushatte
die lazarus hilfe hat mir hier überhaupt nicht geholfen :(

Nixsager
Beiträge: 168
Registriert: Sa 8. Okt 2016, 08:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Polska

Re: DataSet auf eine gezielte Row setzen?

Beitrag von Nixsager »

Danke!

Kein Wunder das meine Hilfe nutzlos war.
Ich habe mit dem StringGrid von Delphi gearbeitet.
Da DBGrid ist ja ganz anders.
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

stj
Beiträge: 19
Registriert: So 15. Okt 2006, 14:52
OS, Lazarus, FPC: Lazarus 2.2.0, FPC 3.2.2
Wohnort: Meckenburg-Vorpommern

Re: DataSet auf eine gezielte Row setzen?

Beitrag von stj »

TT73GP7 hat geschrieben:

Code: Alles auswählen

 
  frmPersonen.cUserID:= frmPersonen.dsPerson.DataSet.FieldByName('ID').asString;
  frmPersonen.dsPerson.DataSet.Refresh;
  frmPersonen.dsPerson.DataSet.Locate('ID',frmPersonen.cUserID,[LoCaseInsensitive]);


musste aber ganz schön rumgooglen bis ich das mit dem loCase raushatte
die lazarus hilfe hat mir hier überhaupt nicht geholfen :(


Schön das es ein bischen geholfen hat.
Die Parameter hab ich auch nicht immer im Kopf, da ich hier aktuell zwischen FreePascal, Delphi, PHP, Python und C++ wechsle :(

Antworten