我做了一些搜索,找不到这个答案的明确答案。
我刚刚进入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,它会显示正确的文本等。
我哪里错了?
由于
答案 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
: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';
参考: