Как связать adotable и adoquery

Обновлено: 24.04.2024

← →
ceval ( 2004-09-24 16:03 ) [0]

Добрый день Знатоки
Связываю две таблицы с помощь ADOTable
ADOTABle1 ( .
ADOTable1.IndexFieldNames:="odcc;oddcc";
ADOtable1.TableName:="kompl";
ADOTable1.Active:=true;
. )

ADotable2( Adotable2.IndexFieldNames:="dseb;dsec";
ADOtable2.TableName:="snaimo";
Adotable2.MasterSource:=datasource1;
Adotable2.MasterFields:="odcb;odcc" ;
Adotable2.active:=true;
Bbtext1.DataSource:=DataSource2;
Bbtext1.DataField:="naim"; )
Все нормально работает только немного тормозит
Подскажите как сделать это при помощи ADOQuery ?
что бы заменить ADOTable2.

← →
сергей1 ( 2004-09-24 16:22 ) [1]

adoquery1.sql.text:="select что_надо from откуда_надо";
adoquery1.open;

← →
ceval ( 2004-09-24 16:40 ) [2]

Это понятно но суть в том что при перемещении по полям
"odcb;odcc" в таблице1 привызыватся к полям "dseb;dsec" в таблицы2( и из таблице2 выводить поля "naim" в Dbtext)

← →
Johnmen © ( 2004-09-24 16:46 ) [3]

SELECT * FROM Table1
SELECT * FROM Table2 WHERE dseb=:odcb AND dsec=:odcc И конечно же DataSource прописать у второго.

← →
Плохиш © ( 2004-09-24 16:54 ) [4]


> Johnmen © (24.09.04 16:46) [3]

Я так понимаю, что он хочет всё в одном запросе сделать

> ceval (24.09.04 16:03)

Читай про inner/outer join.

Я думаю, что двумя, мастер-детейл.
>>. при перемещении по полям.
>>в таблице1 привызыватся к полям "dseb;dsec" в таблицы2

← →
ceval ( 2004-09-24 17:19 ) [6]

как я нонимаб должно бать 2 ADOQuery
в первом adoQuery1.SQL.Clear;
adoQuery1.SQL.Add("select * from таблица1");
ADOQuery1.open;
во втором
adoQuery2.DataSource:=datasource1 ;
adoQuery2.SQL.Clear;
adoQuery1.SQL.Add("SELECT * FROM Table2 WHERE dseb=:odcb AND dsec=:odcc");
ADOQuery1.open;
Так что ли
А нельзя что бы ADOTable и ADOQuery

← →
Johnmen © ( 2004-09-24 17:22 ) [7]

Можно.

← →
ceval ( 2004-09-24 17:35 ) [8]

А делал так один ADotable и ADOQuery

в ADOQuery (SELECT * FROM Table2 WHERE dseb=:odcb AND dsec=:odcc");
AdoQuery2.DataSource:=datasource1 ;
Выдает ошибку

← →
Плохиш © ( 2004-09-24 17:55 ) [9]


> ceval (24.09.04 17:35) [8]

Я штатного телепата вчера в отпуск отпустил, может скажешь какую ошибку выдаёт, а то филосовствовать как-то лень.

← →
ceval ( 2004-09-24 18:09 ) [10]

Ошибка:
Parameter object is improperly defined.Inconsistent or imcpomlete
information was provided
Я использую :
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=u:\dbf;Extended Properties=dBASE IV;Persist Security Info=False

← →
ceval ( 2004-09-24 18:17 ) [11]

Ошибка:
Parameter object is improperly defined.Inconsistent or imcpomlete
information was provided
Я использую :
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=u:\dbf;Extended Properties=dBASE IV;Persist Security Info=False

Есть 2 таблицы ADOquery и 5 таблиц ADOTable. Каким образом сделать так, чтобы ADOQuery таблица стала мастером для другой таблицы ADOQuery и 5 оставшихся таблиц ADOTable?

Связь таблиц adoquery
выходит ошибка что таблицы не связаны, хотя в свойстве sql adoquery1 прописал select * from.

Не работает связь таблиц adoquery
Объясните пожалуйста почему не работает мой проект?:wall: Сам проект прилагаю. нужно чтобы 2.

Связь таблиц через ADOTable. не могу осуществить сложные связи
Связь осуществил таким образом. ADOConnection->ADOTable->DateSourse->DBGrid При несколько связей.

Связь таблиц в одну через ADOQuery с возможностью редактирования
Суть проблемы такова. Есть БД в Access. 3 ТАблицы. связанные многие ко многим. Маршрут(код.

Mihter, ADOQuery - не таблица, а набор данных, полученных в результате выполнения SQL-запроса. И никаким "мастером" этот НД ни для кого выступать не может.

Каким образом сделать так, чтобы ADOQuery таблица стала мастером для другой таблицы ADOQuery и 5 оставшихся таблиц ADOTable?

Спасибо за ответ, droider. Если поменяю все ADOTable на ADOquery, то как их связать. У меня есть главная таблица с ключевым полем ID и остальные таблицы с полем id_sotr.

Когда использовал ADOTable связывал их при помощи MasterSource и MasterFields, а как это делать с ADOQuery не знаю.

Додумался только вот до чего

но ругается что нет поля ID в таблице FIO, хотя оно там присутствует.

Добавлено через 11 минут
С ошибкой разобрался касательно поля ID, но возник вопрос другой, когда вписываю один запрос в компонент ADOQuery все работает без проблем, но когда вписываю еще один запрос к другой таблице то выдает ошибку "Обнаружены символы за пределами инструкции SQL"

я создал 2 таблицы в аксессе. в одной находятся личные данные сотрудника, а во второй данные о работе и об образовании. потом установил связь между таблицами по фамилии. теперь мне надо связать их в делфи через Adoquery. связать через adotable знаю и это удобно конечно, но мне так не надо. прочитал здесь в форуме как через Adoquery делать, но там они указывают на свойство MASTERSOURSE И MASTERFIELD. Я В инспекторе объектов ADOQUERY не нашел таких пунктов. помогите связать 2 таблицы через adoquery. Заранее спасибо.

Как в делфи добавить через Adoquery в таблицу вещественное число, через insert
Как в делфи добавить через Adoquery в таблицу вещественное число, через insert. При добавлении у.

Как связать две формы через ADOQuery?
я создал 4 таблицы в акссее и 2 формы. в одной форме анкета студентов (все работает) а на в второй.

Как связать 2 таблицы в делфи
Здравствуйте. Подскажите как связать таблицы в делфи. Имеем табл1 (владелец) с полями ФИО id.


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

Гектор, я подумал, это чуть-чуть не то. Это код объединяющий две таблицы в одну. Если вам нужно чтобы была зависимость типа MasterSource/MasterFields, то нужно использовать свойство Filter (при смене записи в главной таблице автоматически отображаются соответствующие записи в зависимой таблице).

опишу конкретнее свою ситуация.
у меня 2 таблицы.. связаны в аксессе через столбцы ФАМИЛИЯ. теперь мне надо связать их в делфи. через adoquery. потом на эту форму добавить BITBTN и чтоб при нажатии на него у меня открывалась форма с компонентами dbedit и BITBTN для добавления данных в эти 2 таблицы. и после добавления данных в таблицы, и чтоб при выборе одного из фамилии, у меня отображались данные связанные искючительно с этой фамилией и на второй таблице.

Добавлено через 1 минуту
спасибо за совет Waddonato r) тока я чета через фильтр не очень понял как делать.

1) Ключевым полем для связей таблиц рекомендовано выбирать числовое поле с уникальными значениями. Если у вас два Иванова Ивана Ивановича, то база работать не будет.
2) Для фильтрации необходимо в событии AfterScroll главной таблицы написать приблизительно такой код (Query1 - главная таблица, Query2 - подчиненная):

Waddonator спасибо большое.

щас попробую разобраться)

Добавлено через 15 часов 13 минут
у меня на 5 строке, где вводится ключевые поля, выходит ошибка. кажется чего то не хватает. filrer поменял на filter. все равно не пашет. теперь не знаю че делать. Waddonator, подскажи что нибудь.. буду благодарен.

Добавлено через 3 минуты
у меня на 5 строке, где вводится ключевые поля, выходит ошибка. кажется чего то не хватает. filrer поменял на filter. все равно не пашет. теперь не знаю че делать. Waddonator, подскажи что нибудь.. буду благодарен.

Получается связь таблиц только через компоненты ADOQuery делается? А в ClientDataSet (для подчиненной) поля MasterSource, MasterFields, IndexFieldName заполнять вообще не надо?

Я думал их стыковать главную-подчиненную только через ClientDataSet можно, а ADOQuery у них однотипно настраиваются.

А то проблема в чем: если ADOQuery ставлю для подчиненной, то в случае отсутствия подчиненных записей для какой-либо записи из главной таблицы - вылазит ошибка "key violation" и программа вылетает. А если для подчиненной вместо ADOQuery поставить ADOTable - то все нормально. А мне бы хотелось все-таки ADOQuery в подчиненной, там же SQL можно менять и т.д.

Может в свойстве SQL ADOQuery подчиненной весь косяк? В этом запросе можно что-то ставить типа ORDER BY например?

я создал 2 таблицы в аксессе. в одной находятся личные данные сотрудника, а во второй данные о работе и об образовании. потом установил связь между таблицами по фамилии. теперь мне надо связать их в делфи через Adoquery. связать через adotable знаю и это удобно конечно, но мне так не надо. прочитал здесь в форуме как через Adoquery делать, но там они указывают на свойство MASTERSOURSE И MASTERFIELD. Я В инспекторе объектов ADOQUERY не нашел таких пунктов. помогите связать 2 таблицы через adoquery. Заранее спасибо.

Как в делфи добавить через Adoquery в таблицу вещественное число, через insert
Как в делфи добавить через Adoquery в таблицу вещественное число, через insert. При добавлении у.

Как связать две формы через ADOQuery?
я создал 4 таблицы в акссее и 2 формы. в одной форме анкета студентов (все работает) а на в второй.

Как связать 2 таблицы в делфи
Здравствуйте. Подскажите как связать таблицы в делфи. Имеем табл1 (владелец) с полями ФИО id.


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

kavasaka, насчет камасутры шутка неудачная.
Там идет речь о событиях только AdoDataset1. AfterScroll у него создать как я писал ранее, а строчку в обжект инспектере где написано имя процедуры афтескрол стереть. Компонент не удалять. Ферштейн?

kavasaka, так то все, только в object inspector, я вижу что свойство afterscroll не пустое. Потому оно и отрабатывает N раз когда не надо, т.е. в процессе сортировки когда датасет открывается (кстати это странно мне кажется, но почему так, не могу сказать без src). То что я предлагаю подключает это событие уже "рантайм", когда открытие завершилось.

В смысле?? А что надо было сделать? Это у вас был тонкий намек чтобы afterscroll удалить? Так попробовал - тогда вообще ничего не работает. Других даже намеков не вижу)

Добавлено через 13 минут
Сам тут попробовал через св-ва Mastersource MasterFields в ClientDataset. Очень похоже что так и надо бы делать. Но. Получил тормоза и глюки при перелистывании ближе к концу списка главной. Ближе к началу вроде нормально. Индекс в подчиненной по полю кода на главную не помог. Наверное этот вариант работает только для очень коротких таблиц. От этой идеи тоже думаю откажусь.

Фильтрация подчиненной из события ClientDataset AfterScroll главной (свойства Filter, Filtered) выглядит уже получше. Наверное это самое то по вопросу этой темы.

Добавлено через 19 часов 18 минут
Вон чего Димон обиделся!! Сначала пишет AfterScroll убрать

AfterScroll у него создать как я писал ранее, а строчку в обжект инспектере где написано имя процедуры афтескрол стереть

Ну извини братан, такой язык действительно сразу и не поймешь))

Да ладно. Я не обижался. Я недавно на этом форуме, даже не знаю что меня сподвигло зарегистрироваться, скорей всего "вынужденный творческий кризис" на работе. И уже немного задолбало разжовывать элементарные вещи людям, которые никогда не будут программистами, но которым просто надо наковырять какой-то курсовой.
Ну а по твоей теме могу сказать, взглянув еще раз, что там ошибка

Заметь, как одна точка меняет весь смысл.
Да и OnBeforeClose в object inspector не надо затирать, только OnAfterScroll - потому что именно этому событию надо потом присваивать процедуру в runtime.

← →
Zif © ( 2004-09-26 20:56 ) [0]

Начну цитатой из книги "Библия Delphi" Михаила Фленова:

Как такую же связь создать, если я использую ADOQuery и Access?
Какой код надо ниписать и где? Или иначе: чем заменить MasterFields в ADOQuery?

← →
sniknik © ( 2004-09-26 21:31 ) [1]

> чем заменить MasterFields в ADOQuery?
MasterFields-ом в тейбле или в датасете.

← →
Zif © ( 2004-09-26 21:41 ) [2]

тобишь можно использовать одновременно ADOTable и ADOQuery?

← →
sniknik © ( 2004-09-26 22:05 ) [3]

с чего такие выводы? может и можно но не нужно, замени их оба на ADODataSet.

← →
Zif © ( 2004-09-26 22:13 ) [4]

не очень знаком с этим компонентом. Он обладает теми же возможностями, что и ADOQuery? я просто ADOQuery выбрал из-за того, что нужно много поисковых запросов проводить.

← →
sniknik © ( 2004-09-27 00:07 ) [5]

ADOQuery это ограниченный ADODataSet также как и ADOTable ограниченный он же (ADODataSet), ограничения до привычных свойств привычных по BDE компанент (для облегчения перехода), отличия правда есть.
по моему это была ошибка борланда, создание этих подобий, основные глюки и недопонимание именно от того, что ожидают подобного же поведения (невозможно принцып другой, основа). а привыкая не переходят на лучшее, привыкая костенеют в уже привычных рамках.

← →
ЮЮ © ( 2004-09-27 04:06 ) [6]

>чем заменить MasterFields в ADOQuery

длЯ MasterSource всё остаётся по-прежнему: любое поле может быть выбрано в качестве Master, а вот Detail запрос должен быть параметрическим запросом, причем имя параметра должно совпадать с именем поля Master DataSet-а - в этом случае никаких лишних телодвижений с определениями пар MasterFields - Joined Fields не надо (по крайней мере так было с TQuery, надеюсь также и у ADOQuery)

← →
Lamer8 ( 2004-09-27 23:38 ) [7]

А если в главной таблице ключевое поле счётчик, то при добавлении записи, в подчинённой таблице требуется ввести в связанное поле такое-же значение как и в ключевом поле главной, но в режиме редактирования этот ключ сервер не посылает ни в ADOQuery ни в ADODataSet, постить таблицы по очереди не самый лучший вариант, так как пользователь изменяет и добавляет данные в SQL запросе, как можно сделать чтоб при сохранении добавленных записей в связанном поле подчинённой таблицы подчинённой таблицы добавлялось значение сгенерированное счётчиком.

← →
msguns ( 2004-09-28 09:28 ) [8]

При добавлении в Мастер новой записи (с новым UID) никаких добавлений в подчиненные таблицы автоматически не делаются. А вот когда подчиненная таблица активируется (как пример: добавлен заголовок новой накладной, а затем переход к пустой фактуре, куда уже происходит добавление строк). Но ведь новый ключ Мастера (он же связующий) уже известен (во всяком случае его значение можно в любой момент получить) и его-то надо вставить в соотв.запрос.

← →
Zif © ( 2004-10-02 15:57 ) [9]

большое спасибо, очень помогло.
А можно как-нить попроще объяснить, что делать с проблемой заполнения поля LinkKey в подчинённой таблице?
я новичок.

Читайте также: