Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Table.Close und Bookmark (https://www.delphipraxis.net/59225-table-close-und-bookmark.html)

Klaus D. 19. Dez 2005 18:05

Datenbank: ADS • Version: 8.0 • Zugriff über: SQL

Table.Close und Bookmark
 
Hallo
was passiert mit einem Bookmark wenn ich nach dem Bookmarksetzen die Query schließe und wieder öffne.
wenn ich versuche drauf zuzugreifen bekomme ich einen fehler!
Mfg..Klaus

Union 19. Dez 2005 18:27

Re: Table.Close und Bookmark
 
Wenn Du die ungeänderte Query schliesst und sofort wieder öffnest, dann sollte es gehen. Aber ein Bookmark ist als Pointer auf einen String definiert (jedenfalls bei ADS) und dieser kann durch das Schliessen der Datenmenge ungültig werden. Ein Bookmark ist auch keinesfalls persistent!

Bessere Lösungen:
  • Recno verwenden
  • Eindeutige ID mit Locate positionieren

Klaus D. 19. Dez 2005 18:29

Re: Table.Close und Bookmark
 
Das dachte ich mir schon.
Ist es mir möglich ein BsP zu posten.
Danke Klaus

Union 19. Dez 2005 18:51

Re: Table.Close und Bookmark
 
Hier ein Beispiel, wo Du die Auswirkungen der verschiedenen Vorgehensweisen siehst:
Delphi-Quellcode:
unit AdsBeispiel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, DB, adsdata, adsfunc, adstable, adscnnct;

type
  Tta = class(TForm)
    AdsConnection1: TAdsConnection;
    AdsQuery1: TAdsQuery;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    ButtonSaveBm: TButton;
    ButtonrestoreBm: TButton;
    CheckBoxActive: TCheckBox;
    CheckBoxUseBookMark: TCheckBox;
    procedure FormCreate(Sender: TObject);
    procedure CheckBoxActiveClick(Sender: TObject);
    procedure ButtonrestoreBmClick(Sender: TObject);
    procedure ButtonSaveBmClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    bm : TBookmark;
    Id : string;
  end;

var
  ta: Tta;

implementation

{$R *.dfm}

procedure Tta.ButtonSaveBmClick(Sender: TObject);
begin
  bm := AdsQuery1.GetBookmark;
  Id := AdsQuery1.FieldByName('Id').AsString;
end;

procedure Tta.ButtonrestoreBmClick(Sender: TObject);
begin
  if CheckBoxUseBookMark.Checked then
  begin
    if AdsQuery1.BookmarkValid(Bm) then
       AdsQuery1.GotoBookmark(bm);
  end
  else
  begin
    if id <> '' then
      AdsQuery1.Locate('ID', Id, []);
  end;
end;

procedure Tta.CheckBoxActiveClick(Sender: TObject);
begin
  AdsQuery1.Active := TCheckBox(Sender).Checked;
end;

procedure Tta.FormCreate(Sender: TObject);
begin
  AdsQuery1.Sql.Text := 'Select id, bkz, art, bezeich from bkz';
  AdsQuery1.Active  := true;
  Id := '';
end;

end.

Klaus D. 19. Dez 2005 19:03

Re: Table.Close und Bookmark
 
Ich bin begeistert...Danke und Weihnachten usw.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 Uhr.

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