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

Тема в разделе "Delphi - Базы данных", создана пользователем dania, 29 янв 2007.

Статус темы:
Закрыта.
  1. dania

    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;

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

    Barmutik Гость

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

    dania Гость

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

    и

    DBGRid1.refresh

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: dania
    Проверте ка не збрасываються ли значения Active/Enabled ... проверте датасорсы
     
  5. dania

    dania Гость

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: dania
    у адоквери тоже сматрите енаблед а потом актив
     
  7. dania

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

    Barmutik Гость

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

    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;

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

    Barmutik Гость

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

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

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

    dania Гость

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

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

    LAW Гость

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

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

    Barmutik Гость

    По идее

    Код (Text):
    Active := False;
    Active := True
    работают аналогично Refresh ...
     
  14. dania

    dania Гость

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

    Barmutik Гость

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

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

    LAW Гость

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

    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]
    это значит в БД...?
    В БД все появляется еще во время работы программы, т.е сразу
     
  18. LAW

    LAW Гость

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

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

    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;

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

    dania Гость

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

Поделиться этой страницей