使用多个SQL查询(Using multiple SQL queries)

2019-09-28 05:37发布

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

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

我有在tblAccounts表现的帐号名字一个DBGrid。 我有一个DBGrid与在tblFolders显示所有文件夹。

在帐户电网的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-专家桌面该行正常工作 ,并与帐户相关联只显示两个文件夹。 在该应用它不断显示文件夹的完整列表

如果我通过OnCellClick加强它显示了正确的文字等。

我要去哪里错了?

谢谢

Answer 1:

如果你想显示一个主从(帐户作为主,文件夹详细信息),所以我们从这里开始:

// 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领域。 链接到外地Account中的MasterSource是通过使用完成: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';

参考:

  • SourceForge上ZTestMasterDetail.pas (见行181ff)
  • SourceForge上ZDataset.pas


文章来源: Using multiple SQL queries