先具体说说现在问题。一个产品评审统计系统,采用D7+ado+Access 。现在已建立了两个表 分别为 parts faults表 parts 字段名称 类型bujian 文本型 (用来存放产品的各部件,如 门 ,顶盖 ,包装 。)表 Faults字段名称 类型door 文本型 (用来描叙产品部件 门位置的缺陷。。)<-缺陷描叙有很多种
topPanel 文本型 (用来描叙产品部件,门位置的缺陷。。)<-缺陷描叙有很多种
parts表里 bujin 有多少个部件,表Faults 就有多少个字段对相对应.现在的问题是:我用两个Combobox ,分别为Combobox1 Combobox2Combobox1 用来显示表Parts中字段bujian的所有记录,Combobox2用来显示表Faults里某个字段的所有记录。如何在选中combobox1一个选项时,Combobx2 出现与combobox1 相对的字段所有信息。如选中了Combobox1 中 door 时, combobox2会自动列出与combobox1 door 对应的door字段中所有的缺陷描叙?
我的表是不是设计有问题?如果有,怎么设计? 谢谢 PS:问题解决马上结帖!!!
topPanel 文本型 (用来描叙产品部件,门位置的缺陷。。)<-缺陷描叙有很多种
parts表里 bujin 有多少个部件,表Faults 就有多少个字段对相对应.现在的问题是:我用两个Combobox ,分别为Combobox1 Combobox2Combobox1 用来显示表Parts中字段bujian的所有记录,Combobox2用来显示表Faults里某个字段的所有记录。如何在选中combobox1一个选项时,Combobx2 出现与combobox1 相对的字段所有信息。如选中了Combobox1 中 door 时, combobox2会自动列出与combobox1 door 对应的door字段中所有的缺陷描叙?
我的表是不是设计有问题?如果有,怎么设计? 谢谢 PS:问题解决马上结帖!!!
解决方案 »
- 窗体之间ADOQuery数据调用问题
- 操作access数据库的困难!
- 自定义函数返回值问题
- 怎样在程序中,获得 指定名称 的 进程(或进程中窗体)的 Handle??
- 请问如果向DELPHI中的DecisionQuery中的SQL添加SQL语句?
- 请问如何在两个窗体之间传递变量。
- 关于ActiveX的licence的问题,在线等待
- 在线等救急:关于insert into 语句问题?急啊,救救我吧!
- 在存储过程中的like后面的参数怎样写才对?
- B/S应用涉及了哪些技术?
- 什么打开存有图片的数据库时,内存占用很厉害,能不能解决呢?
- 使用DBGRIDEH 和adoquery 我怎么不能显示出数据来呢 .dbgrid就可以,还有使用DBGRIDEH 进行数据输入,怎么做,包括增加\ 修改和删除
象你的这种情况
表 parts 和 表 Faults可以合并为一张表了:)
那先加裁ComboBox1中的信息,这个可以写在FormShow等事件中
procedure TForm1.FormShow(Sender: TObject);
begin
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT bujian FROM Parts');
Open;
end;
while not ADOQuery1.Eof do
begin
ComboBox1.Items.Add(ADOQuery1.Fields[0].Value);
ADOQuery1.Next;
end;
end;然后当ComboBox1中所选的值改变时得到Faults表中的字段名,并把此字段下的全部值添加到ComboBox2中,这可以在ComboBox1的OnChange事件中写
procedure TForm1.ComboBox1Change(Sender: TObject);
var
tmpFiledName:string;
begin
ComboBox2.Style:=csDropDownList;
tmpFiledName:=ComboBox1.Text;
ShowMessage(tmpFiledName);
with ADOQuery2 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT '+tmpFiledName+' FROM Faults');
Open;
end;
while not ADOQuery2.Eof do
begin
ComboBox2.Items.Add(ADOQuery2.Fields[0].Value);
ADOQuery2.Next;
end;
end;
ShowMessage(tmpFiledName);
应该是不要的,呵呵
你的表设计的的确有问题表 parts 和 表 Faults都没有一个相关联的字段啊
象你的这种情况
表 parts 和 表 Faults可以合并为一张表了:)
谢谢指点,表Faults 各个字段的内容有时候要添加新的内容。 合并成一张,不太好更新。
你的方法我试了,能实现。因为faults 表里有些字段的内容为空,所以只有为那些字段不位空的有用。看来要改表结构了,还希望你帮我提点意见。
同时也谢谢大家!!!
表设置正确后可以写combobox1的onchange方法找出对应的描述赋给combobox2
表fault 字段 A B C D E . . . . 1 1 1 1 1 2 2 2 2
3 3 3
4 5
对A操作可以,但是对 B C D E 操作时 就出问题了, 因为有些只有几条记录。
问题要怎么解决?
procedure TForm1.ComboBox1Change(Sender: TObject);
var
tmpFiledName:string;
begin
ComboBox2.Style:=csDropDownList;
tmpFiledName:=ComboBox1.Text;
ShowMessage(tmpFiledName);
with ADOQuery2 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT '+tmpFiledName+' FROM Faults');
//关键是这里—> 改成这样 SQL.Add('SELECT '+tmpFiledName+'FROM '+tmpFiledName+' '); Open;
end;
while not ADOQuery2.Eof do
begin
ComboBox2.Items.Add(ADOQuery2.Fields[0].Value);
ADOQuery2.Next;
end;
end;PS:不过重新建表,全部单独分开存储。(办法有点苯,但是可以实现,参考参考吧~~~)
ComboBox2.Items.Clear;
while not ADOQuery2.Eof do
begin
ComboBox2.Items.Add(ADOQuery2.Fields[0].Value);
ADOQuery2.Next;
end;
......如果更新比较频繁,还是在DropDown里触发这一事件比较好!
要去除相同记录,在SQL语句里要用到DISTINCT,把SQL语句改成:SQL.Add('SELECT DISTINCT '+tmpFiledName+' FROM Faults');