Delphi ComboBox 对组合框的访问冲突
Posted
技术标签:
【中文标题】Delphi ComboBox 对组合框的访问冲突【英文标题】:Delphi ComboBox Access violation on combobox 【发布时间】:2015-05-18 07:52:26 【问题描述】:我收到访问冲突错误,但我知道代码是正确的,那么问题可能出在哪里?我正在尝试从本地 AccessDB 填充 ComboBox whit 数据。
var i : integer;
x : string;
begin
with DataModule3.ADOTable1 do begin
if RecordCount > 0 then
for i := 1 to RecordCount do begin
RecNo := i;
x := FieldByName('Teacher').AsString;
ComboBox1.Items.Add(x);
end;
end;
end;
我尝试了很多东西,但没有任何效果,我尝试了很多输入的组合框,但仍然无法正常工作,唯一一次组合框显示值是当我在表中选择一行时,然后它在组合框中显示行值我需要过滤...
【问题讨论】:
我对TADOTable一无所知,但循环不应该从零到RecordCount-1吗? @LURD,它在内部设置AbsolutePosition
属性,它是基于 1 的索引。
我认为您的问题是使用 Recno。我完全避免它,因为当您在表上设置过滤器时它会失败,而且当我没记错时,它并不被所有数据库支持。我使用 Table1.first;而不是 Table1.Eof 做...做你的员工 Table1.next
@ChristineRoss 我像你说的那样尝试过,但它仍然会丢弃违规错误,但会丢弃不同的违规地址
DataModule3 创建了吗?将代码更改为 If Assigned(DataModule3) 然后使用 DataModule3.ADOTable1 开始 ....
【参考方案1】:
访问冲突最有可能是因为您忘记实例化您的数据模块DataModule3
。通过调用Assigned 函数来验证这一点。
【讨论】:
最有可能?没门。具有给定信息的ADOTable1
和 ComboBox1
对象的机会相同...
很可能是因为我相信 OP 不知道动态创建组件。事实上,机会是一样的。【参考方案2】:
begin
with DataModule3.ADOTable1 do
if Active then
while not Eof do
begin
ComboBox1.Items.Add(FieldByName('Teacher').AsString);
Next;
end;
end;
【讨论】:
欢迎来到 Stack Overflow。没有任何解释的独立代码是没有答案的。你需要告诉你的代码有什么不同。特别是,您的代码如何解决访问冲突?以上是关于Delphi ComboBox 对组合框的访问冲突的主要内容,如果未能解决你的问题,请参考以下文章