用combobox获得表的某一字段的值?急?(100分)

  • 主题发起人 主题发起人 hxh81
  • 开始时间 开始时间
H

hxh81

Unregistered / Unconfirmed
GUEST, unregistred user!
[red][/red]表字段名为设备编号、部门名称、设备类别、设备名称等,我想用
combobox来取得设备类别字段的值,问题如下:
在窗体中放置combobox1,combobox2,combobox1的items有开发部、工程部、机械部
而combobox2的items则通过代码实现加入设备类别的值,表中记录如下:
编号 部门名称 设备类别 设备名称
1 开发部 打印机 EPSON-1500
2 开发部 打印机 EPSON-710
3 开发部 电脑主机 P133
4 开发部 电脑主机 P266
5 开发部 电脑配备 17''vast显示器
6 工程部 打印机 EPSON-1500
7 工程部 打印机 EPSON-710
8 机械部 电脑配备 17''vast显示器
。。。。。。。。
当我选择开发部,combobox2中的items则为打印机,电脑主机,电脑配备
当我选择工程部,combobox2中的items则为打印机
当我选择机械部,combobox2中的items则为电脑配备
该怎样实现?急?急?[?][?]
代码:


 
用DblookupComBoBox控件不是更好嗎
 
不用DblookupComBoBox控件
 
在COMBOBOX1的CHANGE事件中判断ITEMS是1,2,3

CASE COMBOBOX1。ITEMS[1] OF
1://开发部
BEGIN
COMBOBOX2。ADDITEM(‘打印机’);
COMBOBOX2.ADDITEM('电脑主机');
COMBOBOX2.ADDITEM('电脑配备');
END;
2://工程部
COMBOBOX2.ADDITEM('打印机');
3://机械部
COMBOBOX2.ADDITEM('电脑设备');
END;

语法不对的,但大概思路就这个.
 
同意楼上
 
lp414:
表中的记录是我随便输入的(部门名称,设备类别是活的),你这样。。。。
 
tform1.COMBOBOX1onclick(sender:tobject);
begin
query1.close;
query1.sql.clear;
query1.sql.add('select * from mytable where 部门名称='''+trim(combobox1.text)+'''');
query1.open;
if not query1.isempty then
combobox2.text:=query1.fieldbyname('设备类别').asstring
else combobox2.text:='';
end;
 
荷塘新月:
你这样做,设备类别会出现重复,且速度慢
 
case Combobox1.itemindex of
0:
begin
combobox2.items.clear;
combobox2.items.add('打印机');
combobox2.items.add('');
end;
1:
begin
----
end;
2:
begin
---
end;
end;
 
同意楼上
 
荷塘新月的方法加上group就可以了
 
以上回答的并不是我要的答案
 
我给你一个思路,编码我想你应该没有问题
用过滤表:根据combobox1输入(或选择)的text查找到原表内相同部门所有的设备类别,
再把此过滤表的设备类别不重复加入combobox2.items中便可
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBTables, DB;

type
TForm1 = class(TForm)
Table1: TTable;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Table1BDEDesigner1: TStringField;
Table1BDEDesigner2: TStringField;
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ComboBox1Change(Sender: TObject);
var
Item:Integer;
begin
ComboBox2.Clear;
Item:=ComboBox1.ItemIndex;
table1.First;
while not table1.Eof do
begin
if Table1BDEDesigner1.AsString=ComboBox1.Items.Strings[item] then
begin
if Combobox2.Items.IndexOf (Table1BDEDesigner2.AsString) =-1 then
combobox2.Items.Add(Table1BDEDesigner2.AsString);
end;
Table1.Next;
end;
ComboBox2.ItemIndex :=0;
end;

end.
 
给分,立马给出题解!
 
如果你的程序还只是开始的话,建议拆分成两张表,否则以后会遇到非常多的麻烦!
我刚做了一个时间统计的东西,和你的表结构类似,一个master,一个detail表,一个sql语句全部高定!
 
设query1连接例表,当你先择或输入部门名称字段:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
with query1 do
begin
close;
sql.clear;
sql.add('select isde??? 设备类别 from yourtablename where 部门名称='+combobox1.text);
{isde???为关键字,反正就是只选择唯一值的意思,你找一下SQL的帮助就行了}
prepare;
Open;
comboBox2.Clear;
while not eof do
begin
combobox2.items.add(fields[o].asstring);
next;
end;
Close;
ComboBox2.ItemIndex :=0;
end;
end;

 
其实用DBLOOKUPCOMBOX不是更好,他可以达到你的要求
只要设好TABLE1。和DATASOURCE中的值,
再在DBLOOKUPCOMBOX中的DATASOURCE和DATAFIELD填入值就行了


 
还是建议用DBLOOKUPCOMBOX
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部