2013-03-21 4 views
1

Я проделал некоторые поиски и не могу найти окончательный ответ на этот вопрос.Использование нескольких SQL-запросов

Я просто попадаю в SQL, поэтому будьте нежны. Использование D5, TNTUnicode, Zeos и SQLite3

У меня есть DBGrid со всеми именами учетных записей в отображаемых tblAccounts. У меня есть 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-Expert эта линия отлично работает и отображает только две папки, связанные с этой учетной записью. В этом приложении он продолжает отображать полный список папок

Если я шаг через OnCellClick он показывает правильный текст и т.д.

Где я буду неправильно?

Благодаря

+0

Что является ли соединение (если есть) между qryFolders и tblFolders? qryFolders предположительно получает новый набор данных (хотя я не уверен в вашем запросе), но вы обновляете tblFolders. –

+3

'ExecSQL' - это метод для выполнения' insert'/'update' или других операторов SQL, которые не возвращают курсоров. 'ExecSQL' над оператором' select' бесполезен, так как вы обычно хотите получить возвращаемый курсор. – jachguate

+1

Лучше объясните, что вы пытаетесь выполнить;) – jachguate

ответ

3

Если вы хотите, чтобы отобразить Master-Detail (счет как Master, Папке как деталь), поэтому мы начинаем отсюда:

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

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

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

Это должно отражать то, что у вас уже есть. Теперь отпустите мастер-деталь.

Должно быть очевидно, что все компоненты запроса и таблицы имеют действительный набор соединений, поэтому я оставлю это.

Сначала проверьте, запрос не является активным

qryFolders.Active := False; 

Имея Master-Detail с Query как деталь, мы должны установить 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 запроса и вы не связывали запрос к сетке.


Другим вариантом является наличие Master-Detail без отдельного запроса. (кажется там были некоторые рефакторинг кода, так что я предполагаю, что это рабочий образец)

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

Ссылка:

+0

Вау, сэр Руфо, спасибо за отличную деталь. Я действительно ценю это. Некоторое время назад я играл с магической деталью, но разочарованно разочаровался. С этим планом я уверен, что я буду в дороге. Большое спасибо за то, что нашли время. – user2175495

+2

Добро пожаловать. Признание на SO работает с повышением, и если ответ удовлетворяет вашему вопросу, вы должны его принять –

Смежные вопросы