Delphi Bookmark Error: E2003 Undeclared identifier 'TBookmark'
Delphi Bookmark Error: E2003 Undeclared identifier 'TBookmark'
嘿,我想在我的表单中使用 TBookmark 作为变量。我在另一个表格中得到了它 运行,它在那里工作。
但是在新表单中我得到了错误。我想我必须在 uses 语句中包含一些东西,但我不记得它是什么。这是代码 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 单元中以及许多其他与数据集相关的东西。编译器在项目源代码中遇到的任何其他标识符(或其 class)也是如此。
99% 的此类问题都可以通过 "Search | Find in Files" 通过 Dephi 的源代码文件夹(以及您的项目文件夹,如果它是您的文件夹)来确定 "undeclared" 或丢失项目的位置来解决已声明。
更新 所以,你已经得到了这段代码,我假设它在你的 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。你做这件事的方式并没有什么特别的错误,只是
它冗长,容易出错,并且会引发像您遇到的问题
TBookMark.
关键是 在你的项目中的某个地方,也许在你的 uForm1.Pas 单元中,你知道,
我不知道,必须有一个 TDataSet 后代(如 TFDQuery、TAdoQuery 或 TTable)是
在Form1的DataSource1的DataSet
属性中指定。为了争论,让'
假设数据集组件是 Form1 上的 FDQuery1 并且您想获取 Name 字段值
来自 DBGrid1 中的当前行。
要获得该名称值,您实际上不需要您的代码正在使用的书签。方式
TDBGrid 有效,网格中当前选定的行是 always 中的当前行
数据集组件。所以你可以简单地写
procedure TForm4.FormCreate(Sender: TObject);
var
test : string;
begin
test := Form1.FDQuery1.FieldByName('name').AsString;
ShowMessage(test);
end;
因为您不需要通过 Form1.DBGrid1.DataSource.DataSet
的繁琐程序来获得它。
现在,解释另一个小谜团,如果你的代码在 uForm1.Pas
但是你得到 Undeclared Identifier: TBookMark
错误为什么你在 uForm4.Pas 中尝试相同的代码
单元?好吧,如果您在保存源代码文件时看过它的顶部,您会注意到
Delphi 自动向顶部的使用列表添加包含任何
自上次保存后添加到表单中的组件。所以向表单添加 TDataSource 会添加
将 DB 单元添加到 Uses 列表中,因为这是声明 TDataSource 的地方,TBookMark 也是如此。哪个
这就是为什么 Delphi 可以在没有错误的情况下编译 Form1 的代码,而当您尝试提及 TBookMark 时
对于 uForm4,您需要将其添加到单元的使用列表中除非您添加一个组件(如 TDataSource)
到 Form4 这将导致它自动将 DB 添加到 Uses 列表中(如果它不存在)。神秘
解决了。
嘿,我想在我的表单中使用 TBookmark 作为变量。我在另一个表格中得到了它 运行,它在那里工作。
但是在新表单中我得到了错误。我想我必须在 uses 语句中包含一些东西,但我不记得它是什么。这是代码 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 单元中以及许多其他与数据集相关的东西。编译器在项目源代码中遇到的任何其他标识符(或其 class)也是如此。
99% 的此类问题都可以通过 "Search | Find in Files" 通过 Dephi 的源代码文件夹(以及您的项目文件夹,如果它是您的文件夹)来确定 "undeclared" 或丢失项目的位置来解决已声明。
更新 所以,你已经得到了这段代码,我假设它在你的 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。你做这件事的方式并没有什么特别的错误,只是 它冗长,容易出错,并且会引发像您遇到的问题 TBookMark.
关键是 在你的项目中的某个地方,也许在你的 uForm1.Pas 单元中,你知道,
我不知道,必须有一个 TDataSet 后代(如 TFDQuery、TAdoQuery 或 TTable)是
在Form1的DataSource1的DataSet
属性中指定。为了争论,让'
假设数据集组件是 Form1 上的 FDQuery1 并且您想获取 Name 字段值
来自 DBGrid1 中的当前行。
要获得该名称值,您实际上不需要您的代码正在使用的书签。方式 TDBGrid 有效,网格中当前选定的行是 always 中的当前行 数据集组件。所以你可以简单地写
procedure TForm4.FormCreate(Sender: TObject);
var
test : string;
begin
test := Form1.FDQuery1.FieldByName('name').AsString;
ShowMessage(test);
end;
因为您不需要通过 Form1.DBGrid1.DataSource.DataSet
的繁琐程序来获得它。
现在,解释另一个小谜团,如果你的代码在 uForm1.Pas
但是你得到 Undeclared Identifier: TBookMark
错误为什么你在 uForm4.Pas 中尝试相同的代码
单元?好吧,如果您在保存源代码文件时看过它的顶部,您会注意到
Delphi 自动向顶部的使用列表添加包含任何
自上次保存后添加到表单中的组件。所以向表单添加 TDataSource 会添加
将 DB 单元添加到 Uses 列表中,因为这是声明 TDataSource 的地方,TBookMark 也是如此。哪个
这就是为什么 Delphi 可以在没有错误的情况下编译 Form1 的代码,而当您尝试提及 TBookMark 时
对于 uForm4,您需要将其添加到单元的使用列表中除非您添加一个组件(如 TDataSource)
到 Form4 这将导致它自动将 DB 添加到 Uses 列表中(如果它不存在)。神秘
解决了。