0 / 0 / 0
Регистрация: 26.04.2013
Сообщений: 10
|
|
1 | |
Как связать в делфи 2 таблицы через ADOquery?26.04.2013, 13:35. Показов 15760. Ответов 30
Метки нет (Все метки)
я создал 2 таблицы в аксессе. в одной находятся личные данные сотрудника, а во второй данные о работе и об образовании. потом установил связь между таблицами по фамилии. теперь мне надо связать их в делфи через Adoquery. связать через adotable знаю и это удобно конечно, но мне так не надо... прочитал здесь в форуме как через Adoquery делать, но там они указывают на свойство MASTERSOURSE И MASTERFIELD. Я В инспекторе объектов ADOQUERY не нашел таких пунктов. помогите связать 2 таблицы через adoquery. Заранее спасибо!!!
0
|
26.04.2013, 13:35 | |
Ответы с готовыми решениями:
30
Как в делфи добавить через Adoquery в таблицу вещественное число, через insert Как связать две формы через ADOQuery? Как связать 2 таблицы в делфи Как связать таблицы через sql запрос |
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
|
||||||
26.04.2013, 13:48 | 2 | |||||
Гектор, через SQL так:
1
|
0 / 0 / 0
Регистрация: 26.04.2013
Сообщений: 10
|
|
26.04.2013, 14:31 [ТС] | 3 |
у меня 2 adoquery. на какой из них писать этот код???
0
|
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
|
|
26.04.2013, 15:02 | 4 |
Гектор, я подумал, это чуть-чуть не то. Это код объединяющий две таблицы в одну. Если вам нужно чтобы была зависимость типа MasterSource/MasterFields, то нужно использовать свойство Filter (при смене записи в главной таблице автоматически отображаются соответствующие записи в зависимой таблице).
0
|
0 / 0 / 0
Регистрация: 26.04.2013
Сообщений: 10
|
|
26.04.2013, 15:39 [ТС] | 5 |
опишу конкретнее свою ситуация...
у меня 2 таблицы.. связаны в аксессе через столбцы ФАМИЛИЯ... теперь мне надо связать их в делфи... через adoquery. потом на эту форму добавить BITBTN и чтоб при нажатии на него у меня открывалась форма с компонентами dbedit и BITBTN для добавления данных в эти 2 таблицы... и после добавления данных в таблицы, и чтоб при выборе одного из фамилии, у меня отображались данные связанные искючительно с этой фамилией и на второй таблице... Добавлено через 1 минуту спасибо за совет Waddonator) тока я чета через фильтр не очень понял как делать...
0
|
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
|
||||||
26.04.2013, 15:51 | 6 | |||||
1) Ключевым полем для связей таблиц рекомендовано выбирать числовое поле с уникальными значениями. Если у вас два Иванова Ивана Ивановича, то база работать не будет.
2) Для фильтрации необходимо в событии AfterScroll главной таблицы написать приблизительно такой код (Query1 - главная таблица, Query2 - подчиненная):
2
|
0 / 0 / 0
Регистрация: 26.04.2013
Сообщений: 10
|
|
27.04.2013, 07:18 [ТС] | 7 |
Waddonator спасибо большое!!!
щас попробую разобраться) Добавлено через 15 часов 13 минут у меня на 5 строке, где вводится ключевые поля, выходит ошибка... кажется чего то не хватает. filrer поменял на filter. все равно не пашет... теперь не знаю че делать.... Waddonator, подскажи что нибудь.. буду благодарен!!! Добавлено через 3 минуты у меня на 5 строке, где вводится ключевые поля, выходит ошибка... кажется чего то не хватает. filrer поменял на filter. все равно не пашет... теперь не знаю че делать.... Waddonator, подскажи что нибудь.. буду благодарен!!!
0
|
4914 / 2783 / 853
Регистрация: 04.10.2012
Сообщений: 10,129
|
|
27.04.2013, 13:39 | 8 |
Гектор, ошибку компилятора выложите
0
|
27.04.2013, 21:37 | 9 | ||||||||||
Filter есть тип string, поэтому передавать нужно соответствующие значение
Или
0
|
W
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
|
|
31.10.2014, 13:38 | 10 |
Получается связь таблиц только через компоненты ADOQuery делается? А в ClientDataSet (для подчиненной) поля MasterSource, MasterFields, IndexFieldName заполнять вообще не надо?
Я думал их стыковать главную-подчиненную только через ClientDataSet можно, а ADOQuery у них однотипно настраиваются. А то проблема в чем: если ADOQuery ставлю для подчиненной, то в случае отсутствия подчиненных записей для какой-либо записи из главной таблицы - вылазит ошибка "key violation" и программа вылетает. А если для подчиненной вместо ADOQuery поставить ADOTable - то все нормально. А мне бы хотелось все-таки ADOQuery в подчиненной, там же SQL можно менять и т.д. Может в свойстве SQL ADOQuery подчиненной весь косяк? В этом запросе можно что-то ставить типа ORDER BY например?
0
|
35 / 35 / 3
Регистрация: 27.10.2014
Сообщений: 120
|
|
31.10.2014, 13:52 | 11 |
Это оригинально через фильтр связывать таблицы, а если в подчиненной таблице мульон записей?
Обычно по нормальному делают в подчиненной таблице новый SELECT по связанным полям, или уж вместо ADOQuery юзают ADODataset или ADOTable, в которых есть свойства для мастер-детайл.
0
|
W
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
|
|
31.10.2014, 15:02 | 12 |
Ну вот и напиши как надо).
Куда этот SELECT писать? Вместо ADOQuery можно только ADOTable, но замена слабоватая получается((. ADODataset и так есть только на клиенте. Не знаю как если мульен, а вот если 0 записей - ошибка вылазит.
0
|
35 / 35 / 3
Регистрация: 27.10.2014
Сообщений: 120
|
|
31.10.2014, 15:18 | 13 |
kavasaka, ммм я вощето писал автору поста Гектор, и его советчикам... Или это ты автор перелогиненый
ClientDataSet - это вобще другая песня, а ADODataset - это тот ADOQuery, но немного "прокачаный". У него св-во CoommandText - вот туда SELECT и засовывать...
0
|
W
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
|
|
31.10.2014, 15:27 | 14 |
Им уже по барабану оно думаю, с 27.04.2013 молчат)))
нет Надо попробовать! Как-то я его вообще не заметил.. Т.Е. ADODataset можно подключить вместо ADOQuery? А фильтр как они писали вообще не нужен?
0
|
35 / 35 / 3
Регистрация: 27.10.2014
Сообщений: 120
|
|||||||||||
31.10.2014, 20:22 | 15 | ||||||||||
Короче, если ADODatSet1 - главная, а ADODatSet2 - подчиненная (связь полями Код -> КодГлавнойТаблицы), то делается все на раз-два Раз
0
|
W
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
|
||||||
03.11.2014, 15:29 | 16 | |||||
На раз-два это когда в инспекторе подчиненной указал какая для нее главная и все работает. А если код писать - это уже извращения всякие))).
не понял куда этот код вставить, просто поставил в инспекторе этот Select... в CommandText своего аналога ADODatSet2. Так можно было? сделал так:
Все ADODatSet (и ADOQuery) у меня всегда .Active = false иначе виснет. Вот проблема теперь - как этот Select обновлять, похоже он только 1 раз срабатывает и в подчиненной всегда данные для первого кода главной (параметр к = 1). Может в ADODatSet еще какое свойство изменить чтобы Close и Open можно было включить?
0
|
35 / 35 / 3
Регистрация: 27.10.2014
Сообщений: 120
|
|
03.11.2014, 15:55 | 17 |
Не знаю что там виснет, может коннекшен неправильно настроен, вообще в дизайнере свойство Active должно нормально переключаться в тру, иначе нет смысла компилировать программу.
0
|
W
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
|
|
03.11.2014, 16:56 | 18 |
Нет, похоже событие ADODatSet1AfterScroll (главной) не подходит! Только что понял - этот код срабатывает N раз (у меня вот <3000 записей) при открытии формы и останавливается на последнем значении кода - параметра к = 1 (у меня обратная сортировка главной), и больше не работает при перемещении по строкам главной.
А если раскоментить Close и Open то эти команды начнут выполняться 3000 раз при открытии и все - висяк.)) Добавлено через 29 минут Или еще вероятно моя схема программы не позволит таким образом работать с ADODatSet, т.к. он на сервере, а не на клиенте. Сервер: AdoConnection ADODatSet (или AdoQuery или AdoTable) DataSetProvider Клиент: SocketConnection ClientDataSet DataSource DBGrid Возможно надо работать с ClientDataSet или вместо него воткнуть ADODatSet... В общем завтра буду пробовать)
0
|
35 / 35 / 3
Регистрация: 27.10.2014
Сообщений: 120
|
|
03.11.2014, 17:12 | 19 |
Хорошо. Тогда написать ADODatSet1.AfterScroll:=NIL; в OnBeforeClose и в дизайнере его убрать (саму процедуру в коде оставить), а ADODatSet1.AfterScroll:= ADODatSet1AfterScroll в OnAfterOpen. Тогда афтескрол будет выполняться лишь при изменении курсора в ADODatSet1 действиями пользователя.
0
|
W
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
|
|
04.11.2014, 09:31 | 20 |
Круто!) Извини, не силен в камасутре, давай сначала и помедленнее)))
оnBeforeClose чего, какого компонента??? удалить компонент ADODatSet1 так что ли? И что его код не удалится автоматом? OnAfterOpen какого компонента??? И что за OnBeforeClose и OnAfterOpen?? Нашел только BeforeClose и AfterOpen.
0
|
04.11.2014, 09:31 | |
04.11.2014, 09:31 | |
Помогаю со студенческими работами здесь
20
Редактирование таблицы через ADOQuery Связать две таблицы через dbedit Не получается связать таблицы через форму Связал таблицы в AdoQuery через Sql запрос, для отчета. Сам отчет делаю в FastReport Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |