请教一下大家,我用dbgridhe做下拉选项,要怎么设置了,以后是我的代码,
procedure Truform.FormShow(Sender: TObject);
begin
adotable1.TableName:='入库单';
adotable1.Open;
dbgrideh1.columns[1].alwaysShoweditbutton:=true;
dbgrideh1.columns[1].buttonstyle:=cbsDropDown;
with form1.ADOQuery do
begin
close;
sql.Clear;
sql.Add('select 下拉名称 from 下拉选项 where 组序号=101');
open;
end; while not form1.ADOQuery.Eof do
begin
dbgrideh1.Columns[1].PickList.add(form1.ADOQuery.Fieldbyname('下拉名称').AsString);
form1.ADOQuery.Next;
end;运行后出现:
Project cbcd.exe raised exception class EOleException with message '标准表达式中数据类型不匹配。'. Process stopped. Use Step or Run to continue.
这里为什么???????????????如果我的代码这样写,反而又可以。
dbgrideh1.Columns[1].PickList.add('选项一');
dbgrideh1.Columns[1].PickList.add('选项二');
dbgrideh1.Columns[1].PickList.add('选项三');
请大家指教一下,谢谢
procedure Truform.FormShow(Sender: TObject);
begin
adotable1.TableName:='入库单';
adotable1.Open;
dbgrideh1.columns[1].alwaysShoweditbutton:=true;
dbgrideh1.columns[1].buttonstyle:=cbsDropDown;
with form1.ADOQuery do
begin
close;
sql.Clear;
sql.Add('select 下拉名称 from 下拉选项 where 组序号=101');
open;
end; while not form1.ADOQuery.Eof do
begin
dbgrideh1.Columns[1].PickList.add(form1.ADOQuery.Fieldbyname('下拉名称').AsString);
form1.ADOQuery.Next;
end;运行后出现:
Project cbcd.exe raised exception class EOleException with message '标准表达式中数据类型不匹配。'. Process stopped. Use Step or Run to continue.
这里为什么???????????????如果我的代码这样写,反而又可以。
dbgrideh1.Columns[1].PickList.add('选项一');
dbgrideh1.Columns[1].PickList.add('选项二');
dbgrideh1.Columns[1].PickList.add('选项三');
请大家指教一下,谢谢
select '选项一' as xx001 form 表名001 as tab001
where 条件
begin
close;
sql.Clear;
sql.Add('select 下拉名称 as xlmc from 下拉选项 where 组序号=101');
open;
end; while not form1.ADOQuery.Eof do
begin
dbgrideh1.Columns[1].PickList.add(form1.ADOQuery.Fieldbyname('xlmc').AsString);
form1.ADOQuery.Next;
end;楼上大哥,借误以旧
原因,‘下拉选项’的数据字段为char(100),asstring就会补满100个字符,而‘入库单’的对应字段只为char(10)就会有数据类型不匹配的问题了。
--------------------------------------------
下拉选项表:
组序号 文本 10
下拉序号 数字
下拉名称 文本 50
备注 文本 20
--------------------------------------------
单据表:
id 自动编号
单据号 文本 10
日期 时间/日期
送货单位 文本 50
名称 文本 100
数量 数字
单价 数字
备注 备注
这是我的表结构有一点我就不懂了,为什么我从数据库里取出来的值是提示类型不匹配,而我写常量进去就行,我的常量也没有一定之规呀
-----------------------------------------------------------
while not form1.ADOQuery.Eof do
begin
dbgrideh1.Columns[1].PickList.add(trim(form1.ADOQuery.Fieldbyname('xlmc').AsString));
form1.ADOQuery.Next;
end;
我改了,错误还是这样
组序号=''101'',组序号是文本型的,查询语句要这样写。
你的下拉名称,对应的是送货单位还是啥?是否允许空值?
在add前,picklist.clear也没写,不知道你是没贴呢,还是真没写。贴一段我自己程序里的代码
with kmqry do
begin
close;
sql.Clear;
SQL.Add('select rtrim(kmdm)+''|''+rtrim(kmmc) as km from kjkmb ');
open;
first;
DBGridEh1.FieldColumns['nr'].PickList.Clear;
DBGridEh1.FieldColumns['nr'].DropDownRows := RecordCount;
while not eof do
begin
DBGridEh1.FieldColumns['nr'].PickList.Add(Trim(kmqry.fieldbyname('km').AsString));
Next;
end;
end;