程序就差那么一点了,唉!!!急啊.
表名: aaa ;字段:ID int (唯一), Caption char(可重复)
**********************************
begin
ADOQuery4.Active := true;
if ADOQuery4.Eof then exit;
for i:=0 to ADOQuery4.RecordCount -1 do
begin
ComboBox1.Items.Add(inttostr(ADOQuery4Caption.Value));
ADOQuery4.Next;
end;
end;
********************
Caption的值有重复
当在ComboBox选择的时候,怎样才能知道,选择的Caption所属的ID是什么呢?
我试用了DBLookupComboBox1,运行时总出错,说地址为例
麻烦个位了
谢谢
表名: aaa ;字段:ID int (唯一), Caption char(可重复)
**********************************
begin
ADOQuery4.Active := true;
if ADOQuery4.Eof then exit;
for i:=0 to ADOQuery4.RecordCount -1 do
begin
ComboBox1.Items.Add(inttostr(ADOQuery4Caption.Value));
ADOQuery4.Next;
end;
end;
********************
Caption的值有重复
当在ComboBox选择的时候,怎样才能知道,选择的Caption所属的ID是什么呢?
我试用了DBLookupComboBox1,运行时总出错,说地址为例
麻烦个位了
谢谢
实现上述功能:
设定一个listsource
设定一个listfield和keyfield .
将数据集open
可将datasource中的结果集放在dblookupcombobox中,
下拉框显示的是listfield的字段,它对应一个keyfield字段(比你说你的id字段)
当在DBLookupComboBox1选择了一项后,用
DBLookupComboBox1.KeyValue就能得到keyfield字段(你的id字段的值).
也可以直接给DBLookupComboBox1.KeyValue:=xx赋值来定位DBLookupComboBox1的当前下拉项
不过如果数据量大的话就不太好,因为你要把adoquery循环一遍加到combobx里。
如果不行你可以用
Caption/ID
的形式保存
方法一 您的方法我早已试过,但是就出先说地址为例!(DBLookupComboBox1)
方法二 没试过!试一下先.*************
Kshape([伟大的大伟!]/一心考研中!)
这个方法也不错
但是决得有点不够专业.
呵呵谢谢两位
**********************
还在努力中
var
L,R,M :Integer;
CompareResult :integer;
begin
cmb.Sorted := true;
L := 0;
R := Pred(cmb.Items.Count);
while (L <= R) do
begin
M := (L + R) div 2;
CompareResult := AnsiCompareText(cmb.Items[M],Str);
if CompareResult = 0 then
begin
Result := M;
Exit;
end else if (CompareResult < 0) then L := M + 1 else R := M - 1;
end;
Result := -1;
end;
//------------------------------------------------------------------if BinSearch(ComboBox1,ADOQuery4.FieldByName('caption').AsString) = -1 then
ComboBox1.Items.Add(ADOQuery4.FieldByName('circuit').AsString);
if BinSearch(ComboBox1,ADOQuery4.FieldByName('Caption').AsString) = -1 then
ComboBox1.Items.Add(ADOQuery4.FieldByName('caption').AsString);