Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / помогите плиз с IBQuery и с Update-ом / 23 сообщений из 23, страница 1 из 1
14.04.2004, 11:07
    #32480527
virusik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с IBQuery и с Update-ом
Приветик всем ! Вот пытаюсь сделать 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
14.04.2004, 11:15
    #32480551
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с IBQuery и с Update-ом
Код: 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
14.04.2004, 11:17
    #32480565
virusik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с IBQuery и с Update-ом
я так понял он сам уже знает что будет за значение в old_id ??? я же его как бы нигде не передаю получаеться ??
...
Рейтинг: 0 / 0
14.04.2004, 11:24
    #32480579
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с IBQuery и с Update-ом
Естественно!
IBQ_Dic_Schet->Edit(); - редактирование текущей записи ... У нее то ID известен.


Best regards,
Dnico.
...
Рейтинг: 0 / 0
14.04.2004, 11:27
    #32480590
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с IBQuery и с Update-ом
Делать нужно вот так:
Код: 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
14.04.2004, 11:36
    #32480618
virusik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с IBQuery и с Update-ом
спасибки огромное , все время на мелочах затыкаюсь блин :)
...
Рейтинг: 0 / 0
14.04.2004, 12:34
    #32480807
virusik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с IBQuery и с Update-ом
Господа :) , черт сделал все так , а эта запись заразюка , все равно не хочет апдейтиться :(((
...
Рейтинг: 0 / 0
14.04.2004, 12:39
    #32480817
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с IBQuery и с Update-ом
Попробуй
IBTransaction1->CommitRetaining(); два раза подряд сделать. Я как то натыкался на такую штуку.

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

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

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

Best regards,
Dnico.
...
Рейтинг: 0 / 0
15.04.2004, 09:23
    #32482146
virusik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с IBQuery и с Update-ом
Код: 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
15.04.2004, 09:51
    #32482191
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с IBQuery и с Update-ом
Не совсем понятен вот этот код:
Код: 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
15.04.2004, 10:15
    #32482233
virusik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с IBQuery и с Update-ом
нихренаськи не хочет в базе обновление делать !
А может быть это из-за того , что я на этой формочке отдельную транзакцию повесил и ее комитю . а как бы главная транзакция на главной форме , остаеться сама по себе , я ее как бы не трогаю ???
...
Рейтинг: 0 / 0
15.04.2004, 10:33
    #32482261
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с IBQuery и с Update-ом
IBQ_Dic_Schet-> Transaction ->CommitRetaining();
Это та транзакция в которой происходят изменения.

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


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

IBQ_Dic_Schet->Transaction->???

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

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


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