![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с 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]Полностью задачу покажи