各位大侠,我用delphi想在dbgrid中可以通过按键来显示不同的数据表,要怎么做呢?

dbgrid 显示的数据表 由谁来控制的,要怎么设置呢? 我是菜鸟,请多多指教啊!

第1个回答  2014-08-10
既然是按键 那就用消息机制处理,键盘消息
procedure testMsg(var Msg: TMessage); message WM_KEYDOWN;

procedure Form1.testMsg(var Msg: TMessage);

begin
If Msg.Message=wm_keydown Then
Begin
If (Msg.wparam= Vk_UP) Then //如果是向上键
Begin
//做你想做的事情 写sql 打开对应的dataset 例如adoquery 那对应绑定的dbgrid就自动改了
End;
End;

end;追问

感谢您的答案,但是我还有个关键的地方不懂,比如我只有一个dbgrid,然后我有20个表格想要显示,我的意思是我要按一次键盘的时候,就在这个表格中分别显示不同的表格, 所以我的问题是:当我按以下某个动作的时候,我是要控制adoquery指向不同的表格呢 ,还是我要放20 个adoquery,使其每个指向不同的表格呢? 如果是adoquery分别指向不同的表格,那么这条语句要怎么写呢?

追答

adoquery里的sql语句更改就好

If (Msg.wparam= Vk_UP) Then //如果是向上键
Begin
adoquery.close;
if 条件1 then
begin
adoquery.sql.text:='select * from table1';
adoquery.open;
end
else if 条件2 then
begin

adoquery.sql.text:='select * from table2';
adoquery.open;
end
.....
.....
.....
End;

追问

还有个不明白的地方,adoquery.sql.text:='select * from table2';这个table2 可以是数据库中的不同的数据源表格么? 如果不是的画 ,我是不是一定要放置20 个 table 么?那样太麻烦啦。 如果可以的话 在语句上要怎么指定呢? 太感谢啦, 有了答案马上把分数奉上, 谢谢!

追答

可以是不同的表

不过前提是mssql mysql access之类的一个数据库里有多个表的那种数据库
有的小型数据库里只能有一张表 那样的话就不行
不过估计你也很少用到

本回答被提问者采纳
相似回答