Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > анализ запросов UIB SQL MONITOR


Автор: SergXP 10.12.2009, 15:20
Всем добрый день. 

Есть программка, которая коннектится и работает со своей БД.
Пишу программку, которая коннектится к этой же базе и умеет добавлять, редактировать и удалять данные.
Проблема в том, что мне неизвестны индексы таблиц, и при добавлении в одну из таблиц получаю:
Код

violation of PRIMARY or UNIQUE KEY constraint "PK_DBTABLE_CATEGORY" on table "DBTABLE_CATEGORY"


код запроса:
Код

IBQuery1.SQL.Clear;
      IBQuery1.SQL.Add('INSERT INTO DBTABLE_CATEGORY VALUES (:id,:cat,:n);');
      IBQuery1.ParamByName('id').AsInteger :=18;
      IBQuery1.ParamByName('cat').asString:='test2';
      IBQuery1.ParamByName('n').AsBoolean :=false;
      IBQuery1.ExecSQL;


С помощью софтины UIB SQL Monitor. Попытался поймать запросы оригинальной программы:
Код

/* SQL */
INSERT INTO DBTABLE_CATEGORY (ID,CATNAME,SUBID) VALUES (?  ,?       ,?     )

/* PLAN */

/* EXECUTE PARAMETERS */
PARAM_0 = NULL
PARAM_1 = NULL
PARAM_2 = NULL



не знаю почему нулл все данные, на самом деле все добавляется в БД.
Затем идет запрос:
Код

SELECT <тут все нужные поля> FROM  DBTABLE left join DBTABLE_CATEGORY on DBTABLE.IDCATEGORY=DBTABLE_CATEGORY.ID where (idcategory=1000)

/* PLAN */
PLAN JOIN (DBTABLE INDEX (FK_DBTABLE_2), DBTABLE_CATEGORY INDEX (PK_DBTABLE_CATEGORY)) // думаю что этот запрос нужно выполнить мне, но он не срабатывает вылетает ошибка



Не могу понять, как выполнить запрос PLAN?


Автор: Akella 10.12.2009, 16:01
Цитата(SergXP @  10.12.2009,  15:20 Найти цитируемый пост)
умеет добавлять, 

Ты каким образом добавляешь? Нужно посмотреть триггеры и понять, как заносятся данные в первичный ключ.

Автор: Akella 10.12.2009, 16:41
Цитата(SergXP @  10.12.2009,  15:20 Найти цитируемый пост)
Не могу понять, как выполнить запрос PLAN?

PLAN - это не запрос. Это план запроса.

Добавлено через 2 минуты и 33 секунды
Цитата(SergXP @  10.12.2009,  15:20 Найти цитируемый пост)
PLAN JOIN (DBTABLE INDEX (FK_DBTABLE_2), DBTABLE_CATEGORY INDEX (PK_DBTABLE_CATEGORY)) // думаю что этот запрос нужно выполнить мне,

Зачем?

Автор: SergXP 10.12.2009, 18:04
в общем назову так есть: "оригинальная" программа и "самописная(моя)" программа
извиняюсь, не указал. Структура базы мне не известна, единственное что я могу, расшарить ее с помощью программы: xBaseView

вот так я сам пытаюсь добавить запись(самописная)
Код
:
IBQuery1.SQL.Clear;
      IBQuery1.SQL.Add('INSERT INTO DBTABLE_CATEGORY VALUES (:id,:cat,:n);');
      IBQuery1.ParamByName('id').AsInteger :=18;
      IBQuery1.ParamByName('cat').asString:='test2';
      IBQuery1.ParamByName('n').AsBoolean :=false;
      IBQuery1.ExecSQL;


и получаю ошибку
violation of PRIMARY or UNIQUE KEY constraint "PK_DBTABLE_CATEGORY" on table "DBTABLE_CATEGORY"
но при этом, запись в БД происходит!

Цитата

Зачем? 

Не знай, думаю в нем дело  smile  монитор "оригинальной" показывает, что после запроса INSERT выполняется PLAN.
Может он, что-то врет  smile  

Автор: SergXP 10.12.2009, 18:49
итак, вроде бы заработало... счас точнее проверю:
Код

IBQuery1.SQL.Clear;
      IBQuery1.SQL.Add('INSERT INTO DBTABLE_CATEGORY VALUES (:id,:cat,:n);');
      IBQuery1.ParamByName('id').IsNull;                    // тут NULL должен быть))) 
      IBQuery1.ParamByName('cat').asString:='test2';
      IBQuery1.ParamByName('n').AsBoolean :=false;
      IBQuery1.ExecSQL;

Автор: Akella 11.12.2009, 10:00
Цитата(SergXP @  10.12.2009,  18:04 Найти цитируемый пост)
IBQuery1.SQL.Add('INSERT INTO DBTABLE_CATEGORY VALUES (:id,:cat,:n);');
      IBQuery1.ParamByName('id').AsInteger :=18;


Цитата(SergXP @  10.12.2009,  18:04 Найти цитируемый пост)
и получаю ошибку
violation of PRIMARY or UNIQUE KEY constraint "PK_DBTABLE_CATEGORY" on table "DBTABLE_CATEGORY"


тебе ясно дают понять, что значение 18 уже есть в таблице

Добавлено через 39 секунд
Я тебе сказал про триггеры не просто так ведь?

Автор: SergXP 11.12.2009, 13:00
Akella, не просто так)) БД нарушена и замусорена... потом подчищу)) спасибо! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)