0 / 0 / 0
Регистрация: 26.04.2013
Сообщений: 10
|
|
1 | |
Как связать в делфи 2 таблицы через ADOquery?26.04.2013, 13:35. Показов 15865. Ответов 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
|
4918 / 2786 / 855
Регистрация: 04.10.2012
Сообщений: 10,148
|
|
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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
В чем отличие между INNER JOIN и OUTER JOIN
bytestream 22.01.2025
В современных базах данных информация часто распределена между множеством взаимосвязанных таблиц, что делает операции объединения JOIN неотъемлемой частью работы с SQL. Эти операции позволяют. . .
|
Как сделать первую букву заглавной в JavaScript
bytestream 22.01.2025
JavaScript предоставляет разработчикам множество инструментов для эффективной работы с текстовыми данными. Одной из часто встречающихся задач при обработке строк является преобразование первой буквы. . .
|
Что такое Big O нотация и алгоритмическая сложность
bytestream 22.01.2025
Введение в алгоритмическую сложность
В мире разработки программного обеспечения эффективность алгоритмов играет crucial роль в создании качественных приложений. Алгоритмическая сложность. . .
|
Как решать конфликты слияния (merge) в Git
bytestream 22.01.2025
Конфликты слияния в системе контроля версий Git возникают в ситуациях, когда две или более ветки разработки содержат несовместимые изменения в одних и тех же участках кода. Эти конфликты представляют. . .
|
Как использовать регулярные выражения
bytestream 22.01.2025
Регулярные выражения представляют собой мощный инструмент для работы с текстовыми данными, который позволяет осуществлять поиск, проверку и манипуляцию строками на основе определенных шаблонов. Этот. . .
|
Как выйти из Vim
bytestream 22.01.2025
Vim (Vi IMproved) представляет собой один из самых влиятельных текстовых редакторов в истории компьютерной индустрии, эволюционировавший из своего предшественника Vi, созданного Биллом Джоем в 1976. . .
|
NoSQL базы данных: что это такое и какие существуют
bytestream 22.01.2025
В современную эпоху цифровой трансформации объемы данных растут экспоненциально, создавая новые вызовы для традиционных систем управления базами данных. NoSQL (Not Only SQL) представляет собой. . .
|
Обновление исследования от команды MCM (январь 2025 г.)
Programma_Boinc 22.01.2025
Обновление исследования от команды MCM (январь 2025 г. )
Мы продолжаем изучать молекулярные сигнатуры, связанные с раком легких, с текущим фокусом на GCM1, факторе транскрипции, участвующем в. . .
|
Как работать с Kafka в Go (Golang)
bytestream 22.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки событий и интеграции микросервисов. Эта система, изначально. . .
|
Как использовать RabbitMQ в Go (Golang)
bytestream 22.01.2025
RabbitMQ представляет собой надежный и широко используемый брокер сообщений, который играет ключевую роль в построении современных распределенных систем и микросервисной архитектуры. В основе работы. . .
|
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
|
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
|