powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / помогите плиз с IBQuery и с Update-ом
23 сообщений из 23, страница 1 из 1
помогите плиз с IBQuery и с Update-ом
    #32480527
virusik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветик всем ! Вот пытаюсь сделать update таблички в базе FireBird
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
int a = IBQ_Dic_Schet->FieldByName( "id" )->AsInteger ;
  if(!IBQ_Dic_Schet->FieldByName( "id" )->IsNull)
  {
    frm_Add_Schet = new Tfrm_Add_Schet(this);
    ......
    ......
  if (frm_Add_Schet->ModalResult == mrOk)
    {

      try
      {
        IBQ_Dic_Schet->Edit();
        IBQ_Dic_Schet->FieldByName( "id" )->AsInteger = a ;
        IBQ_Dic_Schet->FieldByName( "name" )->AsString = frm_Add_Schet->ed_Name->Text;
        IBQ_Dic_Schet->FieldByName( "period_poverki" )->AsInteger = frm_Add_Schet->ed_Poverka->Text.ToInt();
        IBQ_Dic_Schet->FieldByName( "type_schet" )->AsString = frm_Add_Schet->CBox2->Text;
       IBQ_Dic_Schet->Post();
       IBTransaction1->CommitRetaining();
      dbg_Schet->DataSource->DataSet->Refresh();
}
в IBQ_Dic_Schet ModifySQL пишу следующий update

Код: plaintext
1.
2.
3.
4.
5.
6.
UPDATE DIC_SCHET SET
ID = :ID , 
NAME = :NAME, 
PERIOD_POVERKI = :PERIOD_POVERKI, 
TYPE_SCHET = :TYPE_SCHET, 
WHERE
ID = :ID
изменяю запись на формочке , все нормально отрабатывает , но запись остаеться неизменной , вот и не вкурю , где я промахнулся !! подскажите плз ! Юзаю Builder5
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32480551
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
UPDATE DIC_SCHET SET 
ID = :ID ,                             // Вот это точно не нужно  
NAME = :NAME, 
PERIOD_POVERKI = :PERIOD_POVERKI, 
TYPE_SCHET = :TYPE_SCHET, 
WHERE 
ID = :OLD_ID                          // Не :ID а :OLD_ID


Best regards,
Dnico.
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32480565
virusik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я так понял он сам уже знает что будет за значение в old_id ??? я же его как бы нигде не передаю получаеться ??
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32480579
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Естественно!
IBQ_Dic_Schet->Edit(); - редактирование текущей записи ... У нее то ID известен.


Best regards,
Dnico.
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32480590
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делать нужно вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
if(!IBQ_Dic_Schet->FieldByName( "id" )->IsNull) 
{ 
  frm_Add_Schet = new Tfrm_Add_Schet(this); 
  ...... 
if (frm_Add_Schet->ModalResult == mrOk) 
{ 

try 
{ 
  IBQ_Dic_Schet->Edit(); 
  IBQ_Dic_Schet->FieldByName( "name" )->AsString = frm_Add_Schet->ed_Name->Text; 
  IBQ_Dic_Schet->FieldByName( "period_poverki" )->AsInteger = frm_Add_Schet->ed_Poverka->Text.ToInt(); 
  IBQ_Dic_Schet->FieldByName( "type_schet" )->AsString = frm_Add_Schet->CBox2->Text; 
  IBQ_Dic_Schet->Post(); 
  IBTransaction1->CommitRetaining(); 
  dbg_Schet->DataSource->DataSet->Refresh(); 
} 

Best regards,
Dnico.
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32480618
virusik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибки огромное , все время на мелочах затыкаюсь блин :)
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32480807
virusik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа :) , черт сделал все так , а эта запись заразюка , все равно не хочет апдейтиться :(((
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32480817
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй
IBTransaction1->CommitRetaining(); два раза подряд сделать. Я как то натыкался на такую штуку.

И еще ... IBQ_Dic_Schet->CachedUpdates в False стоит или в True ?

Best regards,
Dnico.
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32480963
virusik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBQ_Dic_Schet->CachedUpdates в False !
Ктсати . а за что он отвечает ?

Спасибки за помощь :)
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32480992
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За CachedUpdates и отвечает
Слово "кеширование" слышал?
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32481142
virusik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вообщем делал Комит два раза подряд и КэшАпдейт в true стоит , вообщем такая же борода , не апдейтиться ....
А про Кеш , слыхал естественно ....
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32482113
virusik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята , я совсем уже заработался , юзаю я не IBQuery а IBDataSet !!! звеняйти за такую невинмательность .....Мож именно с IBDataSet какие то индивидуальные заморочки ???
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32482127
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай полный код, а то так долго будем гадать

Best regards,
Dnico.
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32482146
virusik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
void __fastcall Tfrm_Dic_Schet::btn_EditClick(TObject *Sender)
{
  if (IBTransaction1->Active == false)
  {
    IBTransaction1->StartTransaction();
  }

  if(!IBQ_Dic_Schet->FieldByName( "id" )->IsNull)
  {
    frm_Add_Schet = new Tfrm_Add_Schet(this);

    frm_Add_Schet->Caption =  "Редактирование счетчика" ;
    frm_Add_Schet->ed_Name->Text = IBQ_Dic_Schet->FieldByName( "name" )->AsString;
    frm_Add_Schet->ed_Poverka->Text = IBQ_Dic_Schet->FieldByName( "period_poverki" )->AsString ;
    frm_Add_Schet->ed_Kalibr->Text = IBQ_Dic_Schet->FieldByName( "period_kalibr" )->AsString ;
    frm_Add_Schet->CBox2->Text = IBQ_Dic_Schet->FieldByName( "type_schet" )->AsString ;
    frm_Add_Schet->CBox1->Text = IBQ_Dic_Schet->FieldByName( "faznost" )->AsString ;
    frm_Add_Schet->ed_Znachnost->Text = IBQ_Dic_Schet->FieldByName( "znachnost" )->AsString ;
    frm_Add_Schet->ShowModal();

    if (frm_Add_Schet->ModalResult == mrOk)
    {
      //  изменяем параметры счетчика
      try
      {

        IBQ_Dic_Schet->Edit();
        IBQ_Dic_Schet->FieldByName( "name" )->AsString = frm_Add_Schet->ed_Name->Text;
        IBQ_Dic_Schet->FieldByName( "period_poverki" )->AsInteger = frm_Add_Schet->ed_Poverka->Text.ToInt();
        IBQ_Dic_Schet->FieldByName( "period_kalibr" )->AsInteger = frm_Add_Schet->ed_Kalibr->Text.ToInt();
        IBQ_Dic_Schet->FieldByName( "type_schet" )->AsString = frm_Add_Schet->CBox2->Text;
        IBQ_Dic_Schet->FieldByName( "faznost" )->AsInteger = frm_Add_Schet->CBox1->Text.ToInt(); ;
        IBQ_Dic_Schet->FieldByName( "znachnost" )->AsInteger = frm_Add_Schet->ed_Znachnost->Text.ToInt();

        IBQ_Dic_Schet->Post();
        dbg_Schet->DataSource->DataSet->Refresh();
        IBTransaction1->Commit();
        IBQ_Dic_Schet->Open();

      }
      catch(Exception& E)
      {
        Application->MessageBox(AnsiString( "Ошибка при изменении параметров счетчика !\n\n"  + E.Message).c_str(),  "Ошибка" , MB_OK | MB_ICONERROR);
      }
    }

    delete frm_Add_Schet;
  }
}
ну вот это код по нажатию на кнопку редактирования , при активной строчке в Гриде
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32482191
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понятен вот этот код:
Код: plaintext
1.
2.
3.
4.
IBQ_Dic_Schet->Post(); 
dbg_Schet->DataSource->DataSet->Refresh(); // ???
IBTransaction1->Commit();  
IBQ_Dic_Schet->Open(); 

Лучше сделать так ( CachedUpdates = False !!! ):
Код: plaintext
1.
2.
3.
4.
IBQ_Dic_Schet->Post(); 
IBQ_Dic_Schet->Transaction->CommitRetaining(); 
IBQ_Dic_Schet->Close(); 
IBQ_Dic_Schet->Open(); 


Best regards,
Dnico.
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32482233
virusik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нихренаськи не хочет в базе обновление делать !
А может быть это из-за того , что я на этой формочке отдельную транзакцию повесил и ее комитю . а как бы главная транзакция на главной форме , остаеться сама по себе , я ее как бы не трогаю ???
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32482261
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBQ_Dic_Schet-> Transaction ->CommitRetaining();
Это та транзакция в которой происходят изменения.

Best regards,
Dnico.
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32482263
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Transaction->Params должно быть следущее:
nowait
read_committed
rec_version


Best regards,
Dnico.
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32482287
virusik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBTransaction1->Params->Add("nowait");
IBTransaction1->Params->Add("read_committed");
IBTransaction1->Params->Add("rec_version");
я понимаю так надо было сделать ..... вставил , но такая же борода , блин ...че-то я уже вообще в потерях полных :)
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32482291
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какая используестся Transaction в компоненте ?

IBQ_Dic_Schet->Transaction->???

Best regards,
Dnico.
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32482307
virusik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBTransaction1
та которую я на эту формочку кинул ...у меня в проекте только две транзакции ....одна по умолчанию , когда загружаеться проект , а вторая IBTransaction1 , которая на формочке редактирования
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32482316
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBQ_Dic_Schet->ModifySQL еще раз напиши, может там есть какая-будь бяка.

Best regards,
Dnico.
...
Рейтинг: 0 / 0
помогите плиз с IBQuery и с Update-ом
    #32482338
virusik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
черт дружище !!!! все получилось !!! спасибки тебе , что ты со мной тут морозился ))) В ModifySql была заразюка , там я чуть прогнал !! аж стыдно блин :)
Но кстати про параметры транзакции , где то читал , но не знал , что надо их прописывать обязательно !!!
Все спсб :)
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / помогите плиз с IBQuery и с Update-ом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]