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 函数来验证这一点。

【讨论】:

最有可能?没门。具有给定信息的 ADOTable1ComboBox1 对象的机会相同... 很可能是因为我相信 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 对组合框的访问冲突的主要内容,如果未能解决你的问题,请参考以下文章

访问表单 VBA ComboBox 点击事件

访问 ComboBox 绑定和选定值

DataGridViewComboBoxColumn - 访问 ComboBox 以附加点击事件

ARIA 组合框的 IE 兼容标记

如何在 C# 中保存组合框的用户设置?

如何在Android中做像Combobox这样的“东西”?