Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Mit Bookmarks arbeiten (https://www.delphipraxis.net/25757-mit-bookmarks-arbeiten.html)

barnti 12. Jul 2004 07:43


Mit Bookmarks arbeiten
 
Hallo,
ich möchte die Position des Datensatzzeigers vor dem 'posten' abspeichern, um nach dem Senden an die DB zu diesem Datensatz zurückzukehren:
Delphi-Quellcode:
procedure TDM_Database.PreparePost(Grid: TDBGrid);
var
  Bookmark: TBookmark;
begin
  Bookmark:= Grid.DataSource.DataSet.GetBookmark;
  Grid.DataSource.DataSet.Post;
  if Grid.DataSource.DataSet.BookmarkValid(Bookmark) then
    Grid.DataSource.DataSet.GotoBookmark(Bookmark);
end;
Mein Problem ist, dass GetBookmark mir 'NIL' zurückliefert. Liegt das daran, dass sich der entsprechende Datensatz im 'insert' befindet?
Eine ID gibt es noch nicht, da 'insert'. So kann ich auch 'locate' nicht verwenden...
Wie könnte ich das sonst lösen?

mikhal 12. Jul 2004 07:57

Re: Mit Bookmarks arbeiten
 
Schon mal versucht, deine Procedure im Eregnis AfterPost einzusetzen? Der Datenbank-Cursor sollte dann eigentlich noch immer auf dem eingefügten Datensatz stehen.

Im Übrigen: Das DBGrid ist lediglich eine visuelle Darstellung deiner Query, Table oder was du als DataSet einsetzt. Du solltest deshalb besser direkt auf diese zugreifen - also als Übergabeparameter nicht dein DBGrid sondern dein DataSet verwenden.

Grüße
Mikhal

Sharky 12. Jul 2004 08:08

Re: Mit Bookmarks arbeiten
 
Zitat:

Zitat von barnti
....Eine ID gibt es noch nicht, da 'insert'.....

Hai barnti,

und wieder die Frage aller Fragen: Welche Datenbank:?:

barnti 12. Jul 2004 08:14

Re: Mit Bookmarks arbeiten
 
Hallo,

Zitat:

Zitat von mikhal
Schon mal versucht, deine Procedure im Eregnis AfterPost einzusetzen? Der Datenbank-Cursor sollte dann eigentlich noch immer auf dem eingefügten Datensatz stehen.

nach dem Posten steht der Datensatzzeiger wieder auf dem ersten Datensatz. Daher muss das 'Bookmarken' vor dem Ändern des Datenmengenzustandes geschehen.
Da kein gültiger Bookmark geliefert wird, wenn sich das Dataset im Insert befindet unterscheide ich zwei Fälle:

1. Bookmark ungültig:
Den letzten Datensatz anzeigen

2. Bookmark gültig:
Diesen zum aktuellen machen.

So scheint es zu funktionieren!

Zitat:

Zitat von mikhal
Im Übrigen: Das DBGrid ist lediglich eine visuelle Darstellung deiner Query, Table oder was du als DataSet einsetzt. Du solltest deshalb besser direkt auf diese zugreifen - also als Übergabeparameter nicht dein DBGrid sondern dein DataSet verwenden.

Der Code ist lediglich ein Ausschnitt der eigentlichen Behandungsroutine ;)

barnti 12. Jul 2004 08:16

Re: Mit Bookmarks arbeiten
 
@sharky: mysql. Aber das ist hier nicht relevant...Oder?

Sharky 12. Jul 2004 08:24

Re: Mit Bookmarks arbeiten
 
Zitat:

Zitat von barnti
@sharky: mysql. Aber das ist hier nicht relevant...Oder?

Doch, ist es ;-)
Beim mysql kannst Du nämlich sehr leicht die ID des zuletzt eingefügeten Datensatzes ermitteln :stupid:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  last_id : Integer;
begin
  with query1 do
  begin
    Close;
    Sql.Text := 'INSERT INTO ........';
    ExecSQL;
    Close;
    Sql.Text := 'SELECT LAST_INSERT_ID()';
    Open;
    last_id := Fields[0].AsInteger;
    Close;
  end;
end;

barnti 12. Jul 2004 08:26

Re: Mit Bookmarks arbeiten
 
Hallo Sharky,

Zitat:

Zitat von Sharky
Zitat:

Zitat von barnti
@sharky: mysql. Aber das ist hier nicht relevant...Oder?

Doch, ist es ;-)
Beim mysql kannst Du nämlich sehr leicht die ID des zuletzt eingefügeten Datensatzes ermitteln :stupid:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  last_id : Integer;
begin
  with query1 do
  begin
    Close;
    Sql.Text := 'INSERT INTO ........';
    ExecSQL;
    Close;
    Sql.Text := 'SELECT LAST_INSERT_ID()';
    Open;
    last_id := Fields[0].AsInteger;
    Close;
  end;
end;

Das ist mir bekannt, bringt mich bei dem Probelem allerdings nicht weiter. Siehe oben...

Sharky 12. Jul 2004 08:29

Re: Mit Bookmarks arbeiten
 
Zitat:

Zitat von barnti
...Das ist mir bekannt, bringt mich bei dem Probelem allerdings nicht weiter. Siehe oben...

Verstehe ich jetzt nicht. Ich denke Du möchtest nach dem Insert zu dem neuen Datensatz springen. Und Du hast geschreiben:
Zitat:

...Eine ID gibt es noch nicht, da 'insert'. So kann ich auch 'locate' nicht verwenden...
Jetzt kennst Du doch die ID und kannst im AfterInsert Ereigniss zu dem neuen Datensatz springen.
Oder verstehe ich dich jetzt ganz falsch?

barnti 12. Jul 2004 08:41

Re: Mit Bookmarks arbeiten
 
Hallo sharky,

es geht nicht nur um das Insertieren. Nachdem sich der Zustand der Datenmenge ändert, wie z.B. 'Post', möchte ich zu dem bearbeiteten Datensatz zurückkehren. Das gilt das auch für das Editieren. Da ich meine Behandlungsroutinen vor dem Bearbeiten aufrufen möchte gelingt mir das wie oben aufgezeigt.

ZeroQool007 25. Apr 2006 08:12

Re: Mit Bookmarks arbeiten
 
Hallo, gibt es den Last Insert Befehl auch für den normalen SQL Server 2000? thx


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz