Delphi

почему измененные данные не отображаэтся в дбгриде

Есть 2 таблицы DBGrid1 и DBGrid2, связанные с одной и той же таблицей БД через ADOQuery1 и ADOQuery2 cоответственно
ADOQuery1.SQL выбирает из таблицы все записи где поле semestr=5,
а ADOQuery2.SQL выбирает из таблицы все записи где поле semestr=6
после изменения данных в БД следующим образом записи удаляются из той DBGrid где они были а во вторую не заносятся сразу,
а только после перезапуска программы (т.е. в БД все записывается верно)
case edit1.Tag of
0: begin AdoQuery1.Edit; AdoQuery1.FieldValues['semestr']:=6;PS_C.AdoQuery1.Post;end;
1:begin AdoQuery2.Edit; AdoQuery2.FieldValues['semestr']:=5;PS_C.AdoQuery2.Post;end;
end;
PS_C.AdoQuery1.Active:=false;
PS_C.AdoQuery1.Active:=true;
PS_C.AdoQuery2.Active:=false;
PS_C.AdoQuery2.Active:=true;
может я как-то не так сохраняю изменения???
Должно по идее всё работать .. Судя по приведённому Вами куску кода...
а работает только наполовину
пробовала и
PS_C.DBGrid1.Update;
PS_C.DBGrid2.Update;
и
DBGRid1.refresh
тут вообще ничего не меняется ни в одной таблице
Для: dania
Проверте ка не збрасываються ли значения Active/Enabled ... проверте датасорсы
добавила
PS_C.DataSource1.Enabled:=true;
PS_C.DataSource2.Enabled:=true;
никаких изменений
Для: dania
у адоквери тоже сматрите енаблед а потом актив
Сообщение отредактировал Morpheus - 30:01:2007, 10:20
у ADOQuery усть только PS_C.AdoQuery1.EnableBCD ....но установка его после выполнения всех действий в true не дает никакогорезультата
а
PS_C.AdoQuery1.Active:=false;
PS_C.AdoQuery1.Active:=true;
PS_C.AdoQuery2.Active:=false;
PS_C.AdoQuery2.Active:=true;
делала с самого начала...только в первой таблице запись исчезает , а во второй не появляется
если написать
PS_C.AdoQuery1.Active:=true;
PS_C.AdoQuery2.Active:=true;
то вообще ничего не меняется
Пришлите код программы .. потому как по таким сумбурным объяснениям мало что понятно...
procedure Tper_PS_C.Button1Click(Sender: TObject);
begin
case RadioGroup1.ItemIndex of
0:begin
case edit1.Tag of
5: begin PS_C.AdoQuery1.Edit; PS_C.AdoQuery1.FieldValues['semestr']:=6;PS_C.AdoQuery1.Post;end;
6: begin PS_C.AdoQuery2.Edit; PS_C.AdoQuery2.FieldValues['semestr']:=5;PS_C.AdoQuery2.Post;end;
end;
5:begin
case edit1.Tag of
5: begin PS_C.AdoQuery1.Edit; PS_C.AdoQuery1.FieldValues['semestr']:=11;PS_C.AdoQuery1.FieldValues['kurs']:=6;PS_C.AdoQuery1.Post;end;
6: begin PS_C.AdoQuery2.Edit; PS_C.AdoQuery2.FieldValues['semestr']:=11;PS_C.AdoQuery2.FieldValues['kurs']:=6;PS_C.AdoQuery2.Post;end;
end;
end;
PS_C.AdoQuery1.EnableBCD:=true;
PS_C.AdoQuery2.EnableBCD:=true;
//дальше это я робовала все подряд и в разных комбинациях
PS_C.AdoQuery1.Active:=false;
PS_C.AdoQuery1.Active:=true;
PS_C.AdoQuery2.Active:=false;
PS_C.AdoQuery2.Active:=true;
{PS_C.DataSource1.Enabled:=true;
PS_C.DataSource2.Enabled:=true;
PS_C.DBGrid1.Update;
PS_C.DBGrid2.Update; }
end;
это все процедура....
ну перед тем как пробовать очень полезно бывает почитать Хелп ...
Код
в ADOQuery1 : SELECT * FROM Predmeti WHERE (Kurs = 3) AND (Semestr=5 )
в ADOQuery2 : SELECT * FROM Predmeti WHERE (Kurs = 3) AND (Semestr=6 )
а как еще можно заново обратиться к базе и считать с нее данные?
После обновлений сделайте квери рефреш.
Что-то вроде:
Код
По идее
Код
Может быть в свойствах ADOQuery или PS_C.DataSource или DBGrid есть какие-нибудь поля, запрещающие обнавление.....ну почему-то из одной таблицы данные исчезают, а во второй не появляются?
Да должно быть всё нормально .. какие-то косяки в программе...
Так тяжело сказать... это как лечить запой по фотографии
А вы посмотрите в файле-то они появились? И всё сразу станет ясно.
Цитата(LAW @ 31:01:2007, 14:34 )
Тогда обратите внимание на поля грида куды вы выводите таблицу с результатом. может быть у Вас имтосник на исходную таблицу настроен?
Прошу прощения не заметил описку.
Я имел ввиду источник.
Сообщение отредактировал LAW - 2:02:2007, 07:51
а что такое имтосник?
дело в том что следущая фраза сразу же вносит обновления в DBGrid без всяких PS_C.AdoQuery1.Active:=false;PS_C.AdoQuery1.Active:=true;PS_C.AdoQuery2.Active:=false;PS_C.AdoQuery2.Active:=true;
PS_C.ADOQuery1.Append;
PS_C.ADOQuery1.FieldValues['Kurs']:='3';
PS_C.ADOQuery1.FieldValues['Semestr']:='5';
PS_C.ADOQuery1.FieldValues['Predmet']:=edit1.Text;
PS_C.ADOQuery1.Post;
в результате в гриде и в БД появляется новая запись
изменения появляются еще в таком случае:
1)когда тоже самое действие повторить с той же таблицей,
т.е из нее еще раз перенести в другую, тогда во второй таблице проявится предыдущий перенос
2) если в таблицу перенести (оно пока не видно) а потом из нее перенести,
то проявляется то, что при первом переносе не было видно
вообщем запутано, но смысл в том что повторный перенос обновляет данные...
может я не в том порядке расставляю PS_C.AdoQuery9.Edit и PS_C.AdoQuery9.Post?
их лучше вначале и в конце процедуры, или в ветках case ? или не важно....
я вообще по-разному пробовала...?
Какая база данных используется? Не InterBase случайно? Как вариант не завершаются транзакции на базе( по умолчанию это так) и поэтому изменения не видны как лекарство закрывать транзакции в ручную при каждом изменении.
Цитата(dania @ 31:01:2007, 18:37 )
Если бы была проблема в транзакции то ни в одном бы гриде данные н обновлялись .. а так в первом обновляются а во втором нет ..
Вероятнее всего какие-то косяки в программе...
БД у меня Access ? а изменения на самом деле через раз, а иногда после второго переноса все нормально работает в обну сторону, а во вторую нет...
С Access-ом вопрос по транзакциям снимается. Значит всетаки
где то ошибка в программе и надо больше кода...
Для Barmutik
Ситуация с частичным обновлением гридов в случаи с транзакциями типичен.
Т.к. транзакция открывается для каждого запроса
и при определенном режиме изоляции транзакций до момента
принудительного закрытия транзакции данные в базу не
попадут, но отлично будут видны в этой транзации т.е. в
одном гриде. Но как я писал выше это не тот случай и
дядя Билли как обычно взял всю работу на себя.
Для: DZX
Судя по коду и задваемым вопросам .. человек далёк от понятия транзакция в БД...
Для: Barmutik
Согласен , скорее всего мелочь какая нибудь, странно что автор не дает исходники, наверно государственная тайна
Сообщение отредактировал DZX - 2:02:2007, 14:06
Это вовсе не секрет
Вот исходник + к delab EHLib...без неко не откроется
На главной странице выбираем специальность, потом на любой закладке на ячейке таблицы правой кнопкой мыши-> перенести предмет на другой семестр...ну а дальше выбираем куда и смотрим на изменения в таблицах, а они очень избирательно появляются: иногда есть, а иногда нет
Это вовсе не секрет
Вот исходник + к delab EHLib...без неко не откроется
На главной странице выбираем специальность, потом на любой закладке на ячейке таблицы правой кнопкой мыши-> перенести предмет на другой семестр...ну а дальше выбираем куда и смотрим на изменения в таблицах, а они очень избирательно появляются: иногда есть, а иногда нет
 115888.RAR ( 581.66 килобайт )Кол-во скачиваний: 46
а вот второй файл с библиотекой EHLib
MainPage.pas - главная
Pochta_C.pas - страница где отображаются дисциплины
engl_lng.pas - на ней после двойного щелчка по ячейке табл отображ все учебные материалы(их краткое описание) в DBGrideh
Perenos_PS_C.pas - перенос предметов из семестра в семестр
Delete_C.pas - удаление предмета
ADD_PS_C.pas - добавление предмета
Ch_Graf_PS_CO.pas - изменение рабочего уч плана
ADD_predmet_PS_C.pas - добавление учебного материала
ну вроде все...если что еще написать, то напишу
410696815 - моя аська
 ___Delphi.rar ( 768.97 килобайт )Кол-во скачиваний: 40
Ужасненько ... сударыня ,
архив побит, либо ударился по дороге, много не хватает, но
вот что выкопал:
В ADOQuery у вас CursoType = ctStatic
что означает, что изменения производимые в паралельных
запроса не будут видны. Попробуйте поставить его
значение по умолчанию т.е. ctKeyset либо ctDynamic.
Изменила, но ничего нового...по- прежмнему изменяет когда ему вздумается, может нужно установить вctKeyset либо ctDynamic после выполнения всех действий?...только я не понимаю как это знач туда записать) java script:emoticon(':P', 'smid_5')
вот еще экземпляр...если из архива открывать, то не открывается...., а распакованный работает
 Metoda.rar ( 456.54 килобайт )Кол-во скачиваний: 40
главное EHLib установите, а то действительно много нехватать будет
главное EHLib установите, а то действительно много нехватать будет Есть 2 таблицы DBGrid1 и DBGrid2, связанные с одной и той же таблицей БД через ADOQuery1 и ADOQuery2 cоответственно
ADOQuery1.SQL выбирает из таблицы все записи где поле semestr=5,
а ADOQuery2.SQL выбирает из таблицы все записи где поле semestr=6
после изменения данных в БД следующим образом записи удаляются из той DBGrid где они были а во вторую не заносятся сразу,
а только после перезапуска программы (т.е. в БД все записывается верно)
case edit1.Tag of
0: begin AdoQuery1.Edit; AdoQuery1.FieldValues['semestr']:=6;PS_C.AdoQuery1.Post;end;
1:begin AdoQuery2.Edit; AdoQuery2.FieldValues['semestr']:=5;PS_C.AdoQuery2.Post;end;
end;
PS_C.AdoQuery1.Active:=false;
PS_C.AdoQuery1.Active:=true;
PS_C.AdoQuery2.Active:=false;
PS_C.AdoQuery2.Active:=true;
может я как-то не так сохраняю изменения???
Тип курсора можно установить прямо в DElphi в дизайнере форм!
Попробуйте считать данные через Query и SQL.
Может навигационная система глючит.
Запрос скорее всего будет предельно простой. SELECT * FROM ТАБЛИЦА
Удачи.