急急急!ComboBox取值问题!!!
程序就差那么一点了,唉!!!急啊.
表名: 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,运行时总出错,说地址为例
麻烦个位了
谢谢
问题点数:50、回复次数:12Top
1 楼zglwxb(假钞换贞操)回复于 2005-07-02 00:20:54 得分 0
没有人知道吗???
顶一下先Top
2 楼lovend(颓废之吻)回复于 2005-07-02 00:24:24 得分 9
帮你顶Top
3 楼zglwxb(假钞换贞操)回复于 2005-07-02 00:27:14 得分 0
谢谢楼上的Top
4 楼zaza_bbface(我试着成熟一点~)回复于 2005-07-02 00:49:31 得分 10
用DBLookupComboBox1,挺好用的。
实现上述功能:
设定一个listsource
设定一个listfield和keyfield .
将数据集open
可将datasource中的结果集放在dblookupcombobox中,
下拉框显示的是listfield的字段,它对应一个keyfield字段(比你说你的id字段)
当在DBLookupComboBox1选择了一项后,用
DBLookupComboBox1.KeyValue就能得到keyfield字段(你的id字段的值).
也可以直接给DBLookupComboBox1.KeyValue:=xx赋值来定位DBLookupComboBox1的当前下拉项Top
5 楼zaza_bbface(我试着成熟一点~)回复于 2005-07-02 00:53:42 得分 8
如果用你的办法其实也是可以做的,用两个combobox,一个存caption,一个存id,两个combobox的index是一一对应的。
不过如果数据量大的话就不太好,因为你要把adoquery循环一遍加到combobx里。Top
6 楼Kshape(C/C++初学者~~~~)回复于 2005-07-02 01:53:58 得分 8
这个在你已经加入COMBOBOX后再回过头去判断恐怕不好弄
如果不行你可以用
Caption/ID
的形式保存Top
7 楼zglwxb(假钞换贞操)回复于 2005-07-02 08:50:01 得分 0
zaza_bbface(我试着成熟一点~)
方法一 您的方法我早已试过,但是就出先说地址为例!(DBLookupComboBox1)
方法二 没试过!试一下先.
*************
Kshape([伟大的大伟!]/一心考研中!)
这个方法也不错
但是决得有点不够专业.
呵呵
谢谢两位
**********************
还在努力中Top
8 楼jlanyi2003(江城浪子)回复于 2005-07-02 08:51:52 得分 2
只能编程实现了Top
9 楼topforver(辉)回复于 2005-07-02 09:25:52 得分 5
能不能在数据库加一个字段,是插入Combox得编号,就是Combox得Index和这个字段对应了.这样得到选择得Index就可以回头查询表就可以知道是那个IDTop
10 楼ywy360118()回复于 2005-07-02 09:46:15 得分 8
function BinSearch(var cmb:TComboBox;const Str:String):integer;overload;
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);
Top
11 楼ywy360118()回复于 2005-07-02 09:48:09 得分 0
//修正
if BinSearch(ComboBox1,ADOQuery4.FieldByName('Caption').AsString) = -1 then
ComboBox1.Items.Add(ADOQuery4.FieldByName('caption').AsString);Top
12 楼zglwxb(假钞换贞操)回复于 2005-07-02 10:28:45 得分 0
不知道楼上的意思是什么???
不过我已经用其他方法解决了,
谢谢各位!!!Top




