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

  • Автор темы dania
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

dania

Есть 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;

может я как-то не так сохраняю изменения???
 
B

Barmutik

Должно по идее всё работать .. Судя по приведённому Вами куску кода...
 
D

dania

а работает только наполовину
пробовала и
PS_C.DBGrid1.Update;
PS_C.DBGrid2.Update;

и

DBGRid1.refresh

тут вообще ничего не меняется ни в одной таблице
 
M

morpheus

Для: dania
Проверте ка не збрасываються ли значения Active/Enabled ... проверте датасорсы
 
D

dania

добавила
PS_C.DataSource1.Enabled:=true;
PS_C.DataSource2.Enabled:=true;
никаких изменений:)
 
M

morpheus

Для: dania
у адоквери тоже сматрите енаблед а потом актив
 
D

dania

у 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;
то вообще ничего не меняется
 
B

Barmutik

Пришлите код программы .. потому как по таким сумбурным объяснениям мало что понятно...
 
D

dania

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;

это все процедура....
 
B

Barmutik

ну перед тем как пробовать очень полезно бывает почитать Хелп ...
Код:
PS_C.AdoQuery1.EnableBCD:=true;
PS_C.AdoQuery2.EnableBCD:=true;

что вообще это значит ...

Вообщем по коду мало что ясно .. учитывая что код оторван от контекста .. по идее должно работать...

А какие запросы в этих кверях покажите ...
 
D

dania

в ADOQuery1 : SELECT * FROM Predmeti WHERE (Kurs = 3) AND (Semestr=5 )
в ADOQuery2 : SELECT * FROM Predmeti WHERE (Kurs = 3) AND (Semestr=6 )

а как еще можно заново обратиться к базе и считать с нее данные?
 
L

LAW

После обновлений сделайте квери рефреш.
Что-то вроде:
Код:
Form1->Query1->Refresh();
И в гриде всё обновится в соответствии с текущим набором данных.

Гриду делать рефреш бесполезно. Ведь он не является источником данных.
Удачи.
 
B

Barmutik

По идее

Код:
Active := False;
Active := True

работают аналогично Refresh ...
 
D

dania

Может быть в свойствах ADOQuery или PS_C.DataSource или DBGrid есть какие-нибудь поля, запрещающие обнавление.....ну почему-то из одной таблицы данные исчезают, а во второй не появляются?
 
B

Barmutik

Да должно быть всё нормально .. какие-то косяки в программе...

Так тяжело сказать... это как лечить запой по фотографии :)
 
L

LAW

А вы посмотрите в файле-то они появились? И всё сразу станет ясно.
 
D

dania

<!--QuoteBegin-LAW+31:01:2007, 14:34 -->
<span class="vbquote">(LAW @ 31:01:2007, 14:34 )</span><!--QuoteEBegin-->А вы посмотрите в файле-то они появились?
[snapback]54590" rel="nofollow" target="_blank[/snapback]​
[/quote]
это значит в БД...?
В БД все появляется еще во время работы программы, т.е сразу
 
L

LAW

Тогда обратите внимание на поля грида куды вы выводите таблицу с результатом. может быть у Вас имтосник на исходную таблицу настроен? :)

Прошу прощения не заметил описку.
Я имел ввиду источник.
 
D

dania

а что такое имтосник?
дело в том что следущая фраза сразу же вносит обновления в 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;

в результате в гриде и в БД появляется новая запись
 
D

dania

изменения появляются еще в таком случае:
1)когда тоже самое действие повторить с той же таблицей,
т.е из нее еще раз перенести в другую, тогда во второй таблице проявится предыдущий перенос
2) если в таблицу перенести (оно пока не видно) а потом из нее перенести,
то проявляется то, что при первом переносе не было видно
вообщем запутано, но смысл в том что повторный перенос обновляет данные...
может я не в том порядке расставляю PS_C.AdoQuery9.Edit и PS_C.AdoQuery9.Post?
их лучше вначале и в конце процедуры, или в ветках case ? или не важно....
я вообще по-разному пробовала...?
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!