Форум: "Базы";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
ВнизРабота с ADOQuery Найти похожие ветки
← →
sergeymukhin (2003-07-09 17:33) [0]Есть две связанные таблицы(связь по №_зач_кн), где в главной поле счетчик, в подчиненной числовое. При открытии с главной формы(соединенной с главной таблицей) подчиненную форму, на которой установлены DBGrid, DBText(для отображения № зач кн), через запрос который отбирает записи соответствующие № зач кн(DBText), но почему-то запись в DBText изменяется в зависимости от выбора в главной таблице, а запрос показывает данные соответствующие первой записи таблицы. Подскажите что нужно сделать.
Связь с базой Access в Delphi.
← →
bushmen (2003-07-09 17:57) [1]Полностью задачу покажи
← →
ЮЮ (2003-07-10 02:54) [2]Cвязать подчинённую с главной ч/з DataSource
← →
sergeymukhin (2003-07-10 16:50) [3]>bushmen
Задача такая надо открыть форму на которой будет отображаться успеваемость студента, выбраного в предыдущей форме.
Отбираю так
select * from Таблицауспев
where №_зач_кн = :zach
Параметр заполняю програмно так
zach:=DBText.Field.AS.....
пробовал все.
← →
sergeymukhin (2003-07-10 16:54) [4]>ЮЮ
У меня DataSource связан с ДатаСорсом запроса
← →
bushmen (2003-07-10 17:05) [5]Что, так напрямую и пишешь - zach := DBText.Field.AS... ?
Естественно, не получится
← →
sergeymukhin (2003-07-10 17:21) [6]Ну не совсем так это я погоричился дело обстоит так
DataModule2.ADOQuery1.Parameters.ParamByName("zachkn").Value:= DBText2.Field.AsInteger;
← →
bushmen (2003-07-10 17:25) [7]а при Datamodule2.adoquery1.open что за ошибку выдает?
← →
sergeymukhin (2003-07-10 17:32) [8]Он при каких-то значениях DataType параметра выдавал ошибки(это когда я пробовал все) но при теперешнем типе не ругается, а выдает ,сейчас, вообще пустое значение
← →
bushmen (2003-07-10 17:35) [9]А ты попробуй создать запрос динамический и посмотри что из этого выйдет. А если у тебя пусто выдает, то мне кажется, просто надо тебе вывести то что ты присваиваешь на экран - возможно, там что-то другое передается
← →
sergeymukhin (2003-07-10 17:45) [10]Я сам не пойму чё я намудрил в последний раз(где-то позавчера), но до этого все показывало но как я говорил не то. А на экране выводится значение на котором стоит курсор в главной таблице. Я даже для отслеживания установил метку в которую присваиваю значение из таблицы(не из формы), а там курсор на первой записи вот я и вижу эти данные вот смотри
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:49) [11]Ты перед Active := true сделай showmessage(DBText2.Field.AsString);
← →
sergeymukhin (2003-07-10 17:58) [12]Знаешь попробовал, ШоуМесаж показался в самом начале еще даже главная кнопочная форма не открылась, решил Апликайшн.Криейтформ из сорса проекта перекинуть в модуль UFIO из которого открываю успеваемость но месаж кажет первую запись не зависимо от того какая выбрана. Вот самое главное мне получить реальное значение DBText и тогда у меня все получиться.
← →
ЮЮ (2003-07-11 03:07) [13]Во-первых, этот код д.б. не в FormCreate, а в обработчике AfterScroll DataModule2.TableFIO
во-вторых, изменение параметра не приводит к переоткрытию запроса:
DataModule2.ADOQuery1.Close;
DataModule2.ADOQuery1.Parameters.ParamByName("zachkn").Value:= DBText2.Field.AsInteger;
DataModule2.ADOQuery1.Open;
← →
sergeymukhin (2003-07-12 10:45) [14]поподробнее про ,а в обработчике AfterScroll DataModule2.TableFIO, чёто я его не нашел.
← →
ЮЮ (2003-07-12 11:35) [15]9-й сверху у компонента TTable :-)
← →
Theoden (2003-07-13 05:36) [16]ЮЮ правильно говорит! При создании формы (FormCreate) на форме нет ни одного компонента. Если те надо открыть какой-либо компонент на ЭТОЙ форме при ее создании используй это в FormActivate. И по второму пункту делай как ЮЮ говорит.
← →
Snake (2003-07-13 11:14) [17]Ну ребята, вы намудрили.
В свое время я долго искал решение...
Во-первых, свойство Prepared ставь в True, иначе не сработает.
Во-вторых, имена связываемых полей ДОЛЖНЫ СОВПАДАТЬ. Может есть еще какая-то лазейка, но пока что я ее не нашел.
В-третьих, у подчиненного запроса (пусть будет ADOQuery2) в свойстве DataSource ставишь DataSource1, завязанный на ADOQuery1.
И наконец запросы:
ADOQuery1:
select * from Студенты
ADOQuery2:
select * from Таблицауспев
where N_Zach = :N_Zach
Все! Никаких дополнительных действий не надо. Работает 100% - сам уже не одну программу на Access налобал.
← →
sergeymukhin (2003-07-14 18:54) [18]Спасибо всем я попробую а если чё то спрошу :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c