奇怪的报错, field '***' not found

hustquick 2008-04-20 04:33:12
调试时我在edit1中输入任何字符时都会出错.错误为:DBMemo7:field '***' not found.(***为DBMemo对应的字段,DBMemo7是最后一个DB组件)
诡异的是我把DBMemo删除后,再运行又出现;DBMemo6:feild '***' not found.(DBMemo7,DBmemo6所对应的字段数据库中都有).
下面是edit1的change事件的代码:
procedure Tdisplayfm.Edit1Change(Sender: TObject);
var
str:string;
begin
if edit1.Text<>'' then
begin
listbox1.Clear;
str:='select distinct planname from boiler where planname like'+''''
+edit1.Text+'%''';
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(str);
adoquery1.Open;
while not adoquery1.Eof do
begin
listbox1.Items.Add(adoquery1.FieldValues['planname']);
adoquery1.Next;
end;
listbox1.Visible:=true;
end;
end;
请问这错误是怎么产生的?
...全文
1117 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuaizhonghua 2008-04-21
  • 打赏
  • 举报
回复
用change时间不好用 我试过 不能选中
hustquick 2008-04-20
  • 打赏
  • 举报
回复
我是想实现百度搜索条一样的功能,当我输入一部分字符时就自动搜索boiler数据库内有的planname,并在listbox中显示出来.
这样应该用edit1change吧?
另:请问如何使listbox最前端显示啊?因为我的窗体上有多个panel,而listbox在一个panel上,其他panel会挡住listbox中的内容.
blazingfire 2008-04-20
  • 打赏
  • 举报
回复

procedure Tdisplayfm.Edit1Change(Sender: TObject);
var
str:string;
begin
if edit1.Text <>'' then
begin
listbox1.Clear;
//此两行有问题like后少了空格
//str:='select distinct planname from boiler where planname like'+''''
// +edit1.Text+'%''';
str:='select distinct planname from boiler where planname like '+''''
// +edit1.Text+'%''';

adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(str);
adoquery1.Open;
while not adoquery1.Eof do
begin
listbox1.Items.Add(adoquery1.FieldValues['planname']);
adoquery1.Next;
end;
listbox1.Visible:=true;
end;
end;
GDTOPONE 2008-04-20
  • 打赏
  • 举报
回复
Edit1Change中写代码,每输入一个字符就触发一次事件,Edit1Exit是失去焦点后触发的.
GDTOPONE 2008-04-20
  • 打赏
  • 举报
回复
还有一个问题,应该不在Edit1Change中写代码,应该在Edit1Exit中写代码.
GDTOPONE 2008-04-20
  • 打赏
  • 举报
回复
可以用一个

procedure Tdisplayfm.Edit1Change(Sender: TObject);
var
str,strb:string;
begin
if edit1.Text <>'' then begin
listbox1.Clear;
str:='select distinct planname from boiler where planname like'+''''
+edit1.Text+'%''';
strb:='select * from boiler ';

with adoquery1 do begin
close;
sql.Text:=str;
DisableControls;
open;
while not eof do begin
listbox1.Items.Add(FieldValues['planname']);
next;
end;
listbox1.Visible:=true;
close;
sql.Text:=strb;
Open;
EnableControls;
end;
end;
end;

hustquick 2008-04-20
  • 打赏
  • 举报
回复
只能用两个adoquery吗?
hustquick 2008-04-20
  • 打赏
  • 举报
回复
我是想在listbox1中显示planname啊
请问我如何只在listbox中显示planname这一字段,而使其他字段暂时不再DB组件中显示?
GDTOPONE 2008-04-20
  • 打赏
  • 举报
回复

{你这句只显示planname一个字段,不出错才怪}
str:='select distinct planname from boiler where planname like'+''''
+edit1.Text+'%''';

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧