combobox取ID问题

bells2003 2009-08-04 12:47:12
我写两个函数一个增加对象,一个读取.如下,但是得不到结果,不知为什么,请大家帮帮忙.
//下拉函数
Procedure additem(adocon:TadoConnection;combo: TComboBox;Str: String;sField:string;sID:string);
var
i:integer;
ado:TADODataSet;
SL:TStringList;
begin
combo.Clear;
ado := TADODataSet.Create(nil);
ado.Connection := adocon;
ado.CommandText := Str;
ado.Open;
SL:= TStringList.Create;
SL.Add(intToStr(0));
combo.clear;
combo.Items.AddObject('全部',TObject(SL[0]));

for i := 1 to ado.RecordCount do
begin
SL.Add(ado.FieldByName(sID).AsString);
combo.Items.AddObject(ado.FieldByName(sField).AsString,TObject(SL[i]));
ado.Next;
end;
combo.ItemIndex := 0;
ado.close;
ado.Free;
SL.Free;

end;

function getCombItem(combo: TComboBox;ID:string):integer;
var i:integer;
begin
for i:=0 to combo.Items.Count-1 do
begin
if strcomp(Pchar(string(combo.items.Objects[i])),Pchar(ID))=0 then
//string(combo.items.Objects[i])这个值不对,一部分是ID值,一部分不是,不知为什么.
begin
result:=i;
break;
end;
end;

end;

请大家帮帮忙.
...全文
168 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bells2003 2009-08-05
  • 打赏
  • 举报
回复
function getCombItem(combo: TComboBox;ID:string):integer;
begin
if combo.Items.Indexof(ID) > 0 then
result := combo.Items.Indexof(ID);
end;
这个读取应该没问题.结果得不到值(所有记录得到的值都是-1).是不是AddObject时有问题呢?
Princezhouf 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 i_mimi 的回复:]
改一下楼上的,一行足以,判断一下result 是否大于0即可
function  getCombItem(combo: TComboBox;ID:string):integer;
begin
result := combo.Items.Indexof(ID);

end;
[/Quote]
兄弟,他的ID是String类型的啊,我比较的是内容
bells2003 2009-08-05
  • 打赏
  • 举报
回复
没人说一下啊.晕.我顶一下.
调用是这样的:
additem(DM.AdoCon,TypeComB,'select * from tb_factype order by fd_fty_id asc','fd_fty_name','fd_fty_id');
读取是这样的:
getCombItem(TypeComB,fieldbyname('fd_fac_typeid').asString);

帮忙看下.不胜感激.
Princezhouf 2009-08-05
  • 打赏
  • 举报
回复
你要那么用 把ID改成Int类型的
bells2003 2009-08-04
  • 打赏
  • 举报
回复
不对.combo.Items.Indexof(id)//id是一ID字段的值. 这样写combo.Items.Indexof(id)是找出ID字段这个值对应的index 值,不存在越界这种问题吧.真越界的话,就是增加进去时,没有这个ID值.
所以我才说,增加函数有没有问题.
sanguomi 2009-08-04
  • 打赏
  • 举报
回复
你检查下是不是越界了,第29是combo.Items.Indexof(28)//
bells2003 2009-08-04
  • 打赏
  • 举报
回复
还有有问题.我的意思是从一个表中读出类型的名字:name字段,和Id字段
用上面的ADDITEM函数写入COMBOBOX,把name字段值和Id字段的值都写,
在读取时,给出一个ID字段的值,找出COMBOBOX的INDEX值显示name字段值的。

测试出来是:combo.Items.Indexof(29)//比如ID=29 的indexof值永远为-1。
所以我想是不是 additem函数有问题?
请大家帮帮忙。
米的向日葵 2009-08-04
  • 打赏
  • 举报
回复
改一下楼上的,一行足以,判断一下result 是否大于0即可
function getCombItem(combo: TComboBox;ID:string):integer;
begin
result := combo.Items.Indexof(ID);

end;
Princezhouf 2009-08-04
  • 打赏
  • 举报
回复
我再发一遍 上一个怎么颜色不变啊?~
function getCombItem(combo: TComboBox;ID:string):integer;
var i:integer;
begin
for i:=0 to combo.Items.Count-1 do
begin
if combo.Items.Indexof(ID)=i then //这样改就对了
begin
result:=i;
break;
end;
end;
Princezhouf 2009-08-04
  • 打赏
  • 举报
回复

function getCombItem(combo: TComboBox;ID:string):integer;
var i:integer;
begin
for i:=0 to combo.Items.Count-1 do
begin
if combo.Items.Indexof(ID)=i then //这样改就对了
begin
result:=i;
break;
end;
end;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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