powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не удаляются строки из БД (Interbase 6, мистика).
24 сообщений из 24, страница 1 из 1
Не удаляются строки из БД (Interbase 6, мистика).
    #38420306
baurgun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в следующем. Есть ActionManager в нём Action на удаление записи из БД (ну это не так уж важно).
Код на удаление (в клиенте ):
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
procedure Tfrm.ggdelExecute(Sender: TObject);
var
  result_:integer;
begin
  result_:=dm.Connection.AppServer.delGy(ch, RXGG.FieldByName('gg').AsInteger)

 case  result_ of
  0: begin // тут просто обновляется измененный список, с удаленной записью
       GetGG('gg');
      TfrmModule(Self.GetParentComponent).ReStart:=True;
       MessageDLG('Удаление прошло успешно.',mtInformation,[MBOK],0);
 end;
  1: begin
      MessageDLG('Удаление невозможно.',mtError,[MBOK],0);
     end;
  2: begin
      MessageDLG('Ошибка удаления.',mtError,[MBOK],0);
     end;
  3: begin
      MessageDLG('Удаление невозможно. У него есть магия.',mtError,[MBOK],0);
     end;
  end;
 end;
end;



Что делается на серваке:

Код: pascal
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.
// TRDM=class(TRemoteDataModule,IRDM);
function TRDM.delGG(ch,gg: Integer): Integer;
begin
  qWork.Close;// qWork - TIBQuery
  qWork.SQL.Text:= 'select * from tb_f where ch=:ch and gg=:gg';
  qWork.ParamByName('ch').AsInteger:= ch;
  qWork.ParamByName('gg').AsInteger:= gg;
  qWork.Open;

  if qWork.RecordCount <> 0 then
    result:= 1
  else
    begin
     qWork.Close;
     qWork.ParamByName('ch').AsInteger:= ch;
     qWork.ParamByName('gg').AsInteger:= gg;
     qWork.Open;
      if qWork.RecordCount <> 0 then
        result:= 3
      else
        begin
          Tran.Active:= false;
          Tran.StartTransaction;
          try
             try
            qWork.Close;
            qWork.SQL.Text:= 'delete from sp_gg where ch=:ch and gg=:gg';
 //qWork.SQL.Text:= 'delete from sp_gg where uch='+inttostr(ch)+ ' and gg='+inttostr(gg);
// Пробовал таким способом, также не удаляет

            qWork.ParamByName('ch').AsInteger:= ch;
            qWork.ParamByName('gg').AsInteger:= gg;
            qWork.ExecSQL;
            Tran.Commit;
            Tran.Active:= false;
             result:=0;
        except
            result:= 2;
            Tran.Rollback;
            Tran.Active:= false;
        end;
  end;
end; 



У таблицы sp_gg никаких зависимостей нет. В IBexpert'е если ввести запрос вручную , все прекрасно удаляется. Триггеров никаких нет. MessageBox'ом проверил значение передаваемых параметров (ch,gg) они верные. Тип поля ch и gg - Integer.
Уже два дня с бубном пляшу, мистика прям какая-то.
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420313
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, baurgun!
You wrote on 8 октября 2013 г. 14:18:58:

baurgunВ IBexpert'е если ввести запрос вручную,
все прекрасно удаляется значит ошибка у тебя в программе.
ищи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420318
baurgun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,
Кстати забыл совсем сказать ! На форме когда жму кнопку удалить, появляется сообщение "Удаление прошло успешно", но запись не удаляется.
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420334
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baurgun,

Код: pascal
1.
2.
            Tran.Commit;
            Tran.Active:= false;



бред

Код: pascal
1.
2.
3.
4.
5.
6.
  qWork.SQL.Text:= 'select * from tb_f where ch=:ch and gg=:gg';
  qWork.ParamByName('ch').AsInteger:= ch;
  qWork.ParamByName('gg').AsInteger:= gg;
  qWork.Open;

  if qWork.RecordCount <> 0 then



Таким образом проверять существование записи... Ужас!

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

Interbase 6 - выкинь каку (используй хотя бы FB 1.0)
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420339
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baurgun,

А зачем повторно открывать датасет?
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420342
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baurgunУже два дня с бубном пляшу, мистика прям какая-то.
Не надо плясать с бубном. Достаточно не забывать в блоке except ставить raise.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420353
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baurgun,

и ещё зачем ты один и тот же Query используешь для всех запросов?
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420368
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baurgun,

код вообще белиберда какая-то. Например:

Tran.Commit;
Tran.Active:= false;

и там еще масса сомнительного.
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420375
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробую в стиле DS

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  qWork.SQL.Text:= 'select * from tb_f where ch=:ch and gg=:gg';
  qWork.ParamByName('ch').AsInteger:= ch;
  qWork.ParamByName('gg').AsInteger:= gg;
  qWork.Open; // открываем запрос

  if qWork.RecordCount <> 0 then // проверяем что из него возвращается хоть она запись
    result:= 1 // у нас есть записи
  else
    begin
     // мало ли результат изменился пока мы открывали запрос 
     // поэтому сделаем тоже самое с теми же параметрами
     qWork.Close; // сначала конечно закроем запрос
     // присвоим те же параметры
     qWork.ParamByName('ch').AsInteger:= ch;
     qWork.ParamByName('gg').AsInteger:= gg;
     // откроем набор данных
     qWork.Open;
      if qWork.RecordCount <> 0 then // проверяем что из него возвращается хоть она запись
        result:= 3 // но теперь значение 3 (хотя по идее до если выполнился предыдущий if ... then мы сюда не попадём никогда)
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420378
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baurgun,

почему ты решил, что :
1. запись не удаляется ?
2. запись в sp_gg вообще есть ?
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420379
baurgun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,
1) что в этом не правильного ?
2) что именно сомнительно ? какие строки?
3) код писал не я, мне нужно допилить
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420381
baurgun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,
запись в базу данных добавляется корректно. там она есть, пробовал в ibexpert'е вручную вбивать запрос на удаление, все удаляется.
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420382
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baurgunkdv,
1) что в этом не правильного ?
2) что именно сомнительно ? какие строки?
3) код писал не я, мне нужно допилить

нужно допилить конечно, а то он даже не скомпилируется.
try 2 штуки, а except один
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420385
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baurgunhvlad,
запись в базу данных добавляется корректно. там она есть, пробовал в ibexpert'е вручную вбивать запрос на удаление, все удаляется.Ты не ответил ни на один мой вопрос.

Намёк: про изоляцию тр-ций слышал что-нибудь ?
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420391
baurgun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,
код писал не я, его писали 10 лет назад, там очень сильный мрак. Помогите хоть чем-то, советиком, направлением, книжкой, хот ьчем, буду рад любой помощи!
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420396
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baurgun1) что в этом не правильного ?
Потому что Commit - это уже ЗАКРЫТИЕ транзакции, какой смысл ей Active:=False делать?
читал http://www.ibase.ru/devinfo/ibx.htm ?
Смотрел код, что делает Active:=False? Что делает Commit?
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420398
baurgun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tactical Nuclear Penguin,
компилируется все нормально, и когда удаляю запись , пишет что успешно (окошко вылезает), но сама не удаляется
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420402
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, тут программист нужен...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420403
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baurgun,

почитай мои комментарии. Подумай... Исправь хоть эту ересь.
После Tran.Commit; или Tran.Rollback; делать Tran.Active:= false; необязательно
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420406
baurgun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,
1) решил что не удаляется, так как в базе данных она остается.
2) в базе все строки есть, которые пытаюсь удалить.
Еще раз напомню, код писал не я, его писали 10 лет назад, программа очень большая.
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420407
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baurgunПомогите хоть чем-то, советиком, направлением, книжкой
1) Прочитай http://ibase.ru/devinfo/ibx.htm
2) Весь старый код сотри
3) Напиши новый с нуля
4) Если он не получился хотя бы вдвое короче старого, переходи к п.1.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420478
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baurgunМимопроходящий,
Кстати забыл совсем сказать ! На форме когда жму кнопку удалить, появляется сообщение "Удаление прошло успешно", но запись не удаляется.

Не инициализированный Result будет как раз содержать 0. А потому твоя прога может легко думать что запись удалена.
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420581
baurgun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
вы не поверите из-за чего не удалялось ничего. Я **ять просто в **уе, как будто специально сделали ! Надо руки оторвать нахрен таким людям.
Все дело в том что в самом начале кода (а он очень очень огромный, во многом из-за того, что через жопу написано) функции удаления присваивалась функция пустая!!! .

Не поленюсь и выложу это *лядство

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
 function IRDM_delGy(ch, gg: Integer;): Integer;
      safecall;
//сразу после этого идет
 function IRDM.delGy = IRDM_delGy;
// а сама "функция" выглядит так
function TRDM.IRDM_delGy(ch, gg: Integer;): Integer;
begin
//
end;



Извиняюсь за беспокойство !
...
Рейтинг: 0 / 0
Не удаляются строки из БД (Interbase 6, мистика).
    #38420603
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baurgun,

да там всё кривое. Выкинуть код нафиг!
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не удаляются строки из БД (Interbase 6, мистика).
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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