簡體   English   中英

Delphi 書簽錯誤:E2003 未聲明的標識符“TBookmark”

[英]Delphi Bookmark Error: E2003 Undeclared identifier 'TBookmark'

嘿,我想在我的表單中使用 TBookmark 作為變量。 我讓它以另一種形式運行,它在那里工作。

但是在新表單中我得到了錯誤。我想我必須在使用語句中包含一些東西,但我不記得它是什么。 這是代碼 TBookmark 帶有紅色下划線,因此這就是錯誤所在。

procedure TForm4.FormCreate(Sender: TObject);
var test : string;
var selectedRow, rows : TBookmark;
begin
  rows := Form1.DBGrid1.DataSource.DataSet.GetBookmark;
  Form1.DBGrid1.SelectedRows.CurrentRowSelected := True;
  Form1.DBGrid1.DataSource.DataSet.GotoBookmark(rows);
  test := Form1.DBGrid1.DataSource.DataSet.FieldByName('name').AsString;
  ShowMessage(test);

end;

end.

您的 Form4 需要使用 DB 單元,因為這是聲明 TBookMark 的地方。

順便說一句,Form1 單元中的內容與此無關。 唯一相關的是Form4的單元必須使用DB。 發生的情況是,當編譯器嘗試編譯您的 Form4 單元時,它需要能夠找到 TBookMark 的定義,即標准 DB.Pas 單元以及許多其他與數據集相關的內容。 編譯器在項目源代碼中遇到的任何其他標識符(或其類)也是如此。

99% 的此類問題可以通過 Dephi 的源代碼文件夾(以及您的項目文件夾,如果它是您的文件夾)執行“搜索|在文件中查找”來確定聲明“未聲明”或缺失項目的位置來解決。

更新所以,你有這個代碼,我假設它在你的 uForm4.Pas 單元中。

  procedure TForm4.FormCreate(Sender: TObject);
  var
    test : string;
  var
    selectedRow, rows : TBookmark;
  begin
    rows := Form1.DBGrid1.DataSource.DataSet.GetBookmark;
    Form1.DBGrid1.SelectedRows.CurrentRowSelected := True;
    Form1.DBGrid1.DataSource.DataSet.GotoBookmark(rows);
    test := Form1.DBGrid1.DataSource.DataSet.FieldByName('name').AsString;
    ShowMessage(test);
  end;

您希望能夠對 Form1 上 DBGrid1 的當前行中顯示的 Name 值執行某些操作。 你做這件事的方式沒有什么特別的問題,只是它冗長,容易出錯,並且會引起你在使用 TBookMark 時遇到的問題。

關鍵是在您的項目中的某個地方,可能在您的 uForm1.Pas 單元中,您知道,我沒有,必須在 Form1 的 DataSource1 的DataSet屬性中指定一個 TDataSet-descendant(如 TFDQuery、TAdoQuery 或 TTable) . 為了論證,假設數據集組件是 Form1 上的 FDQuery1,並且您希望從 DBGrid1 中的當前行獲取 Name 字段值。

要獲得該 Name 值,您實際上並不需要您的代碼正在使用的書簽。 TDBGrid 的工作方式是,網格中當前選定的行始終是數據集組件中的當前行。 所以你可以簡單地寫

    procedure TForm4.FormCreate(Sender: TObject);
    var
      test : string;
    begin
      test := Form1.FDQuery1.FieldByName('name').AsString;
      ShowMessage(test);
    end;

因為您不需要通過 Form1.DBGrid1.DataSource.DataSet 的Form1.DBGrid1.DataSource.DataSet來獲取它。

現在,為了解釋另一個小謎團,為什么你的代碼在 uForm1.Pas 中可以正常工作,但你得到Undeclared Identifier: TBookMark錯誤為什么你在 uForm4.Pas 單元中嘗試相同的代碼? 好吧,如果您曾經看過源代碼文件的頂部保存,您會注意到 Delphi 會自動將包含您添加到的任何組件的單元添加到頂部的使用列表自上次保存后的表單。 因此,將 TDataSource 添加到表單會將 DB 單元添加到 Uses 列表,因為這是聲明 TDataSource 的地方,TBookMark 也是如此。 這就是為什么 Delphi 可以編譯 Form1 的代碼而不會出現錯誤的原因,而當您嘗試向 uForm4 提及 TBookMark 時,您需要將其添加到單元的使用列表中,除非您將組件(如 TDataSource)添加到 Form4,這將導致它自動如果 DB 尚不存在,請將其添加到 Uses 列表中。 謎團已揭開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM