使用多个SQL查询

时间:2013-03-21 16:14:34

标签: sql delphi delphi-5 zeos

我做了一些搜索,找不到这个答案的明确答案。

我刚刚进入SQL,所以要温柔。使用D5,TNTUnicode,Zeos和SQLite3

我有一个DBGrid,其中显示了tblAccounts中的所有帐户名称。 我有一个DBGrid,显示tblFolders中的所有文件夹。

在Accounts网格的OnCellClick中,我有一个SQL查询

qryFolders.Close;
qryFolders.SQL.Clear;  // Not really needed as I am assigning the Text next - but :)
qryFolders.SQL.Text:=
  'SELECT Folder FROM tblFolders WHERE UPPER(Account)="FIRSTTRADER"'
qryFolders.ExecSQL;
tblFolders.Refresh;

在我的应用程序中,没有任何反应,我仍然可以看到完整的文件夹列表。

在SQL-Expert桌面该行正常并仅显示与该帐户关联的两个文件夹。在该应用程序中,它会一直显示文件夹的完整列表

如果我单步执行OnCellClick,它会显示正确的文本等。

我哪里错了?

由于

1 个答案:

答案 0 :(得分:3)

如果您想显示Master-Detail(帐户为Master,Folder as Detail),我们从这里开始:

// connecting the grids
AccountsDataSource.DataSet := tblAccounts;
AccountsGrid.DataSource := AccountsDataSource;

FoldersDataSource := tblFolders;
FoldersGrid.DataSource := FoldersDataSource;

// retrieving the data
tblAccounts.Open;
tblFolders.Open;

那应该反映出你已经拥有的东西。现在让我们转到Master-Detail。

很明显,所有查询和表组件都有一个有效的连接集,所以我将其保留。

首先请确保,查询未激活

qryFolders.Active := False;

将查询作为详细信息的主 - 详细信息,我们必须设置MasterSource

qryFolders.MasterSource := AccountsDataSource;

之后我们可以使用参数设置Query以链接到MasterSource中的字段。使用Account

链接到MasterSource中的字段:Account
qryFolders.SQL.Text := 
  'SELECT Folders FROM tblFolders WHERE UPPER( Account ) = :Account';

现在,我们已准备好检索数据

qryFolders.Open;

在此之前,我们不会在FoldersGrid中看到任何变化,因为我们没有告诉任何人这样做。现在让我们使用

FoldersDataSource.DataSet := qryFolders;

在您的方法中,您没有Open查询,并且您没有将查询链接到网格。


另一种选择是拥有Master-Detail而不需要单独的Query。 (似乎有一些代码重构,所以我想这是一个有效的样本)

tblFolders.MasterSource := AccountsDataSource;
tblFolders.MasterFields := 'Account';
tblFolders.LinkedFields := 'Account';

参考: