Выполнение SQL-скрипта через TSQLScript...

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Выполнение SQL-скрипта через TSQLScript...

Сообщение avmaksimov » 17.10.2010 13:38:00

Пишет "CommitRetaining :
-validation error for column ID, value "*** null ***"" при попытке создания уникального индекса несмотря на то, что пустых значений-то там и нет... Перерыл все и перепробовал все... Из внешних утилит все ОК (SQLLY, IBExpert), а тут странно... Откуда могут появится пустые значения, ума не приложу... Ну не может быть их там по определению!!!
Пример БД, запроса и программы с исходниками во вложении... Похоже на баг, но не уверен... Может я где ошибся!?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
avmaksimov
новенький
 
Сообщения: 21
Зарегистрирован: 17.10.2010 12:38:54

Re: Выполнение SQL-скрипта через TSQLScript...

Сообщение dunin » 17.10.2010 15:40:43

Код: Выделить всё
procedure TMainFrm.btnUpdateDBClick(Sender: TObject);
begin
  IBConnection.HostName := Trim(edtHost.Text);
  IBConnection.Connected:=True;
  SQLTransaction.Active:=True;

  SQLScript.Script.Clear; /// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  SQLScript.Script.LoadFromFile(CurPath + 'PatchDB.sql');
  SQLScript.ExecuteScript;
  MessageDlg('Обновление завершено', 'Скрипт выполнен', mtInformation, [mbOK], 0);
end;
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Выполнение SQL-скрипта через TSQLScript...

Сообщение avmaksimov » 17.10.2010 16:32:34

dunin писал(а):
Код: Выделить всё
procedure TMainFrm.btnUpdateDBClick(Sender: TObject);
begin
  IBConnection.HostName := Trim(edtHost.Text);
  IBConnection.Connected:=True;
  SQLTransaction.Active:=True;

  SQLScript.Script.Clear; /// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  SQLScript.Script.LoadFromFile(CurPath + 'PatchDB.sql');
  SQLScript.ExecuteScript;
  MessageDlg('Обновление завершено', 'Скрипт выполнен', mtInformation, [mbOK], 0);
end;

Спасибо за ответ, но насколько помню LoadFromFile сам делает очистку TStrings... И не удивительно, что ваш совет не помог...

Да, я забыл указать, что у меня Lazarus: 0.9.28.2.22279 i386-win32-win32/win64, FPC: 2.2.4, Firebird: 2.1.3.18185 Win32 Server.
avmaksimov
новенький
 
Сообщения: 21
Зарегистрирован: 17.10.2010 12:38:54

Re: Выполнение SQL-скрипта через TSQLScript...

Сообщение Vadim » 17.10.2010 16:47:22

avmaksimov
А Вы не пробовали оставлять в скрипте по одной процедуре и проверить, на какой именно происходит ошибка?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Выполнение SQL-скрипта через TSQLScript...

Сообщение avmaksimov » 17.10.2010 17:03:21

Vadim писал(а):avmaksimov
А Вы не пробовали оставлять в скрипте по одной процедуре и проверить, на какой именно происходит ошибка?

Пробовал... Получается ошибка после последнего коммита после строки "ALTER TABLE CONFIG ADD CONSTRAINT PK_CONFIG PRIMARY KEY (ID);"... Притом, что как видно, в БД ID никогда не принимает значение NULL!!! Я даже пробовал вставлять что-то вроде "update config set id=777 where id=null" - не помогло и 777 нигде не появилось...
avmaksimov
новенький
 
Сообщения: 21
Зарегистрирован: 17.10.2010 12:38:54

Re: Выполнение SQL-скрипта через TSQLScript...

Сообщение Brainenjii » 17.10.2010 17:17:16

Может сначала попробовать поменять столбец на NOT NULL?
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Выполнение SQL-скрипта через TSQLScript...

Сообщение avmaksimov » 17.10.2010 17:22:26

Brainenjii писал(а):Может сначала попробовать поменять столбец на NOT NULL?

Так он уже NOT NULL:
Код: Выделить всё
ALTER TABLE CONFIG ADD TEMP$$ID Smallint NOT NULL;
COMMIT WORK;
UPDATE CONFIG SET TEMP$$ID = ID;
ALTER TABLE CONFIG DROP ID;
COMMIT WORK;
ALTER TABLE CONFIG ALTER COLUMN TEMP$$ID TO ID;

COMMIT WORK;


Все-таки я все больше склоняюсь к багу Lazarus'а.

P.S. Если выполнить строку "ALTER TABLE CONFIG ADD CONSTRAINT PK_CONFIG PRIMARY KEY (ID);" в следующий раз (т.е. подправить SQL-файл), то все ОК.
avmaksimov
новенький
 
Сообщения: 21
Зарегистрирован: 17.10.2010 12:38:54

Re: Выполнение SQL-скрипта через TSQLScript...

Сообщение Vadim » 17.10.2010 17:35:27

avmaksimov
avmaksimov писал(а):"ALTER TABLE CONFIG ADD CONSTRAINT PK_CONFIG PRIMARY KEY (ID);"

А Вы можете обычными словами (не кодом :) ) описать, что эта строка должна сделать? :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Выполнение SQL-скрипта через TSQLScript...

Сообщение avmaksimov » 17.10.2010 18:05:16

Vadim писал(а):avmaksimov
avmaksimov писал(а):"ALTER TABLE CONFIG ADD CONSTRAINT PK_CONFIG PRIMARY KEY (ID);"

А Вы можете обычными словами (не кодом :) ) описать, что эта строка должна сделать? :)

Прикольно :). Ну вообще-то добавляет первичный ключ по полю ID с названием PK_CONFIG - http://www.firebirdsql.su/doku.php?id=constraint.
avmaksimov
новенький
 
Сообщения: 21
Зарегистрирован: 17.10.2010 12:38:54

Re: Выполнение SQL-скрипта через TSQLScript...

Сообщение Vadim » 18.10.2010 12:19:46

avmaksimov писал(а):Ну вообще-то добавляет первичный ключ по полю ID с названием PK_CONFIG

Я догадывался об этом, но хотел просто Вас плавно подвести к следующему вопросу. ;)
В колонке, по которой Вы делаете первичный ключ, не должно существовать ни NULLовых значений, ни повторяющихся. Поскольку колонка у Вас уже есть, можно предположить, что там есть и значения какие-то. Какие?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Выполнение SQL-скрипта через TSQLScript...

Сообщение avmaksimov » 18.10.2010 13:42:13

Vadim писал(а):
avmaksimov писал(а):Ну вообще-то добавляет первичный ключ по полю ID с названием PK_CONFIG

Я догадывался об этом, но хотел просто Вас плавно подвести к следующему вопросу. ;)
В колонке, по которой Вы делаете первичный ключ, не должно существовать ни NULLовых значений, ни повторяющихся. Поскольку колонка у Вас уже есть, можно предположить, что там есть и значения какие-то. Какие?

Ненулевые... Вообще, я думал, что все заметят, но нет ... в архиве файл есть suo.gdb - там как раз эта таблица CONFIG и есть.

Получается, что либо это баг и мне писать в баг-трекер надо, либо параметр какой-то надо поставить... Чтоб коммит коммитил реально... Хотя и дело не в коммите вроде... Блин, непонятно...
avmaksimov
новенький
 
Сообщения: 21
Зарегистрирован: 17.10.2010 12:38:54

Re: Выполнение SQL-скрипта через TSQLScript...

Сообщение avmaksimov » 04.11.2010 14:41:26

Создал запись в баг-трекере: http://mantis.freepascal.org/view.php?id=17829 . Посмотрим, что ответят!
avmaksimov
новенький
 
Сообщения: 21
Зарегистрирован: 17.10.2010 12:38:54


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 55

Рейтинг@Mail.ru
cron