Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с ADOQuery [D7, Access]


sergeymukhin ©   (2003-07-09 17:33:00) 

Есть две связанные таблицы(связь по №_зач_кн), где в главной поле счетчик, в подчиненной числовое. При открытии с главной формы(соединенной с главной таблицей) подчиненную форму, на которой установлены DBGrid, DBText(для отображения № зач кн), через запрос который отбирает записи соответствующие № зач кн(DBText), но почему-то запись в DBText изменяется в зависимости от выбора в главной таблице, а запрос показывает данные соответствующие первой записи таблицы. Подскажите что нужно сделать.
Связь с базой Access в Delphi.


sergeymukhin   (2003-07-14 18:54:00) [1]

Спасибо всем я попробую а если чё то спрошу :)


Snake   (2003-07-13 11:14:00) [2]

Ну ребята, вы намудрили.
В свое время я долго искал решение...
Во-первых, свойство Prepared ставь в True, иначе не сработает.
Во-вторых, имена связываемых полей ДОЛЖНЫ СОВПАДАТЬ. Может есть еще какая-то лазейка, но пока что я ее не нашел.
В-третьих, у подчиненного запроса (пусть будет ADOQuery2) в свойстве DataSource ставишь DataSource1, завязанный на ADOQuery1.
И наконец запросы:
ADOQuery1:
select * from Студенты
ADOQuery2:
select * from Таблицауспев
where N_Zach = :N_Zach

Все! Никаких дополнительных действий не надо. Работает 100% - сам уже не одну программу на Access налобал.


Theoden   (2003-07-13 05:36:00) [3]

ЮЮ правильно говорит! При создании формы (FormCreate) на форме нет ни одного компонента. Если те надо открыть какой-либо компонент на ЭТОЙ форме при ее создании используй это в FormActivate. И по второму пункту делай как ЮЮ говорит.


ЮЮ   (2003-07-12 11:35:00) [4]

9-й сверху у компонента TTable :-)


sergeymukhin   (2003-07-12 10:45:00) [5]

поподробнее про ,а в обработчике AfterScroll DataModule2.TableFIO, чёто я его не нашел.


ЮЮ   (2003-07-11 03:07:00) [6]

Во-первых, этот код д.б. не в FormCreate, а в обработчике AfterScroll DataModule2.TableFIO
во-вторых, изменение параметра не приводит к переоткрытию запроса:
DataModule2.ADOQuery1.Close;
DataModule2.ADOQuery1.Parameters.ParamByName("zachkn").Value:= DBText2.Field.AsInteger;
DataModule2.ADOQuery1.Open;


sergeymukhin   (2003-07-10 17:58:00) [7]

Знаешь попробовал, ШоуМесаж показался в самом начале еще даже главная кнопочная форма не открылась, решил Апликайшн.Криейтформ из сорса проекта перекинуть в модуль UFIO из которого открываю успеваемость но месаж кажет первую запись не зависимо от того какая выбрана. Вот самое главное мне получить реальное значение DBText и тогда у меня все получиться.


bushmen   (2003-07-10 17:49:00) [8]

Ты перед Active := true сделай showmessage(DBText2.Field.AsString);


sergeymukhin   (2003-07-10 17:45:00) [9]

Я сам не пойму чё я намудрил в последний раз(где-то позавчера), но до этого все показывало но как я говорил не то. А на экране выводится значение на котором стоит курсор в главной таблице. Я даже для отслеживания установил метку в которую присваиваю значение из таблицы(не из формы), а там курсор на первой записи вот я и вижу эти данные вот смотри
procedure TFUspevamost.FormCreate(Sender: TObject);
begin
Label3.Caption:=DBText2.Field.AsString;
Label2.Caption:= DataModule2.TableFIO.Fields[2].AsString+" "
+DataModule2.TableFIO.Fields[3].AsString+" "
+DataModule2.TableFIO.Fields[4].AsString+" "
+"зачетная книжка №"+" "+DataModule2.TableFIO.Fields[0].AsString;
DataModule2.ADOQuery1.Parameters.ParamByName("zachkn").Value:= DBText2.Field.AsInteger;
DataModule2.ADOQuery1.Active:=True;

end;


bushmen   (2003-07-10 17:35:00) [10]

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


sergeymukhin   (2003-07-10 17:32:00) [11]

Он при каких-то значениях DataType параметра выдавал ошибки(это когда я пробовал все) но при теперешнем типе не ругается, а выдает ,сейчас, вообще пустое значение


bushmen   (2003-07-10 17:25:00) [12]

а при Datamodule2.adoquery1.open что за ошибку выдает?


sergeymukhin   (2003-07-10 17:21:00) [13]

Ну не совсем так это я погоричился дело обстоит так
DataModule2.ADOQuery1.Parameters.ParamByName("zachkn").Value:= DBText2.Field.AsInteger;


bushmen   (2003-07-10 17:05:00) [14]

Что, так напрямую и пишешь - zach := DBText.Field.AS... ?
Естественно, не получится


sergeymukhin   (2003-07-10 16:54:00) [15]

>ЮЮ
У меня DataSource связан с ДатаСорсом запроса


sergeymukhin   (2003-07-10 16:50:00) [16]

>bushmen
Задача такая надо открыть форму на которой будет отображаться успеваемость студента, выбраного в предыдущей форме.
Отбираю так
select * from Таблицауспев
where №_зач_кн = :zach
Параметр заполняю програмно так
zach:=DBText.Field.AS.....
пробовал все.


ЮЮ   (2003-07-10 02:54:00) [17]

Cвязать подчинённую с главной ч/з DataSource


bushmen   (2003-07-09 17:57:00) [18]

Полностью задачу покажи


Наверх

Титульная страница Поиск, карта сайта Написать письмо