如何在delphi同一界面下显示不同表的内容
rt,怎么在delphi同一界面下显示不同报表的内容?
比如我有表a(id,姓名,性别)
表b(id,年龄),
给用户一个combobox,选择要查看的表a或b
选a查看a表内容,选b查看b表内容
需要怎么做好一些?
谢谢各位
[解决办法]
adoquery.sql 动态赋值。就可以了。
不要在设计器指定。。运行期根据用户的选择动态生成。
[解决办法]
动态给数据集赋SQL.
看你给出来的例子,怎么觉得这两个表应该显示在一个报表中呢,用关联查询就行了.
[解决办法]
query和DBgrid动态赋值
也可以用两个DBgrid,选查看什么,就将对应的DBgrid的Visible设为True
[解决办法]
用户选择combobox时,选择要查看的表a或b时,动态赋值给你的显示控件。
选a赋值a表内容,选b赋值b表内容
[解决办法]
在commbox的onchange事件里面根据下拉值重新到数据库查询
[解决办法]
{rt,怎么在delphi同一界面下显示不同报表的内容?
比如我有表a(id,姓名,性别)
表b(id,年龄),
给用户一个 combobox,选择要查看的表a或b
选a查看a表内容,选b查看b表内容
需要怎么做好一些?
谢谢各位
假设是通过 点击按钮Button1来查询 ADOQuery1 关联数据
}
procedure TForm1.Button1Click(Sender: TObject);
begin
if ADOQuery1.Active then
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:=' ' ;
if combobox1.ItemIndex=0 then //a
ADOQuery1.SQL.Text:=' select * from a'
else if combobox1.ItemIndex=1 then //b
ADOQuery1.SQL.Text:=' select * from b' ;
ADOQuery1.Open;
end;
[解决办法]
將兩個表通過ID Join起來:
select a.id,姓名,性别,年龄 from ainner join bon a.id = b.id
[解决办法]
可以用listview显示。在combobox的change事件中写
var
temp:TListItem;
listview1.items.clear;
if combobox1.ItemIndex=0 then
begin
ssql:='select * from a ';
end
else if combobox1.ItemIndex=1 then
begin
ssql:='select * from 6 ';
end;
with adoquery1 do
begin
close;
sql.clear;
sql.add(ssql);
open;
while not eof do
begin
temp:=listview1.items.add;
if combobox1.ItemIndex=0 then
begin
temp.caption:=fieldbyname('id').asstring;
temp.SubItems.Add(fieldbyname('name').asstring);
temp.SubItems.Add(fieldbyname('sex').asstring);
end
else if combobox1.ItemIndex=1 then
begin
temp.caption:=fieldbyname('id').asstring;
temp.SubItems.Add(fieldbyname('age').asstring);
end;
next;
end;
end;
[解决办法]
可以用listview显示。在combobox的change事件中写
var
temp:TListItem;
listview1.items.clear;
if combobox1.ItemIndex=0 then
begin
ssql:='select * from a ';
end
else if combobox1.ItemIndex=1 then
begin
ssql:='select * from b ';
end;
with adoquery1 do
begin
close;
sql.clear;
sql.add(ssql);
open;
while not eof do
begin
temp:=listview1.items.add;
if combobox1.ItemIndex=0 then
begin
temp.caption:=fieldbyname('id').asstring;
temp.SubItems.Add(fieldbyname('name').asstring);
temp.SubItems.Add(fieldbyname('sex').asstring);
end
else if combobox1.ItemIndex=1 then
begin
temp.caption:=fieldbyname('id').asstring;
temp.SubItems.Add(fieldbyname('age').asstring);
end;
next;
end;
end;
------解决方案--------------------
如果你是想在DBGrid中显示这二个表的内容,那可以设置2个记录集,在combobox的选择事件中根据不同条件,将对应此表的DataSource进行重新定值即可显示不同的内容。
[解决办法]
with ADOQuery1 do begin Close; SQL.Text := 'select top 1 * from '+ComboBox1.Text+' where 1 = 1'; Open; end;