1

我已经进行了一些搜索,但找不到明确的答案。

我刚刚进入 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 它会显示正确的文本等。

我哪里错了?

谢谢

4

1 回答 1

4

如果要显示一个Master-Detail(Account as 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;

这应该反映你已经拥有的东西。现在让我们进入主从细节。

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

首先确定,查询未激活

qryFolders.Active := False;

拥有一个带有查询作为细节的主细节,我们必须设置MasterSource

qryFolders.MasterSource := AccountsDataSource;

之后,我们可以使用参数设置查询以链接到 MasterSource 中的字段。通过使用链接到AccountMasterSource 中的字段:Account

qryFolders.SQL.Text := 
  'SELECT Folders FROM tblFolders WHERE UPPER( Account ) = :Account';

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

qryFolders.Open;

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

FoldersDataSource.DataSet := qryFolders;

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


另一种选择是拥有一个没有单独查询的主从细节。(似乎有一些代码重构,所以我想这是一个工作示例)

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

参考:

于 2013-03-21T18:02:28.807 回答