Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Добавление новой записи - Invalid variant type convertion [D6, IB5.x]


Страницы:   1 2

reticon ©   (2005-07-01 14:21:00) 

Работаю с таблицей через IBQuery. Если в таблице уже есть хотя бы одна запись, то добавление, редактирование и удаление других новых записей проходит нормально. Если же удалить все записи из таблицы, а потом попытаться довавить новую, то получаем Invalid variant type convertion. Где грабли?


Danilka   (2005-07-01 15:43:00) [21]

Stakan ©   (01.07.05 15:31)

> На твое имхо есть мое, которое категорически
> несогласное

Обоснуй чем плоха ХП


Хотя-бы тем, что я (или любой другой воинствующий ламер :) ) могу зайти в твою базу и накуралесить прямыми вставками в таблицу, а предьявлять юзеры будут не мне, а тебе. И ламер воинствующий будет в первых рядах. И прав он будет, кстати.
:)


Danilka   (2005-07-01 15:43:00) [22]

Stakan ©   (01.07.05 15:38)


Хм. Неужели в ИБ нет возможности узнать значение после вставки? Какого-нибудь returning?


Stakan   (2005-07-01 15:38:00) [23]

Sergey13 ©   (01.07.05 15:34) [13]
А тем что значение ID которое она вернула у тебя под рукой, и ты его можешь использовать. Как правило, в сложных системах после добавления записи требуется выполнить ещё ряд действий с этой записью (например,  зарегистрировать добавление). Если программа простая, то можно обойтись и триггером, но лучше везде использовать один подход.


reticon   (2005-07-01 15:36:00) [24]

понятно, разобрался, спасибо :)
для ID оставлю триггер


Sergey13   (2005-07-01 15:34:00) [25]

2[12] Stakan ©   (01.07.05 15:31)
А чем же она хороша?
(с)
8-)


Stakan   (2005-07-01 15:31:00) [26]


> На твое имхо есть мое, которое категорически
> несогласное

Обоснуй чем плоха ХП


Danilka   (2005-07-01 15:30:00) [27]

Stakan ©   (01.07.05 15:17)

ИМХО лучше ХП


На твое имхо есть мое, которое категорически несогласное!


msguns   (2005-07-01 15:29:00) [28]

Если триггер во всех случаях сам вставляет новый ID, на кой его предварительно определять, с помощью ХП или без.
Либо вставить в триггер проверку на NULL, либо не солить соль.


Stakan   (2005-07-01 15:17:00) [29]


> ХП нужна просто для получения ID, или можно обойтись
> без нее?

Так ты - же в триггере ID получаешь, оставь что - нибудь одно, ИМХО лучше ХП


Sergey13   (2005-07-01 15:08:00) [30]

2 [7] reticon ©   (01.07.05 15:03)
В таблицу вставится не то что ты получил в процедуре.


reticon   (2005-07-01 15:03:00) [31]

ХП нужна просто для получения ID, или можно обойтись без нее?


Johnmen   (2005-07-01 14:58:00) [32]

Занятно. Сам написал и сам не понимаешь что...
Два разА дернуть генератор - это зачем ?
:)))


Sergey13   (2005-07-01 14:58:00) [33]

2[3] reticon ©   (01.07.05 14:45)
>а вот что там максоам ищется и про NULL + 1 я не совсем тебя понял :)
Я просто предположил что новый ИД находится как max(ID)+1. Соответственно на пустой таблице и получишь NULL + 1. Не так, значит мое предположение не верно.

2[4] reticon ©   (01.07.05 14:48)
А зачем тебе процедура эта? Как она к таблице относится?


reticon   (2005-07-01 14:48:00) [34]

Тю, кажется нашел в чем причина...

При добавлении записи у меня сначала идет вот что:
IBQuery1.Params[0].asInteger := MainForm.IBStoredProc1.Params[0].asInteger;

где ХП реализована в виде

CREATE PROCEDURE GET_NEW_CD_ID
RETURNS (CD_ID INTEGER)
AS
BEGIN
 CD_ID = GEN_ID(CD_ID_GEN, 1);
END;^

Неужели отсюда грабля?


reticon   (2005-07-01 14:45:00) [35]

да, ID генерится в триггере:

SET TERM ^;
CREATE TRIGGER TBI_CD FOR CD
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
 NEW.ID = GEN_ID(CD_ID_GEN, 1);
END;^

а вот что там максоам ищется и про NULL + 1 я не совсем тебя понял :)


Stakan   (2005-07-01 14:43:00) [36]

Грабли в твоём коде, в том месте где ты добавляешь запись.


Sergey13   (2005-07-01 14:28:00) [37]

В тригере (или в проге) наверное новый ИДшник максом ищется. От NULL +1 и дает подобное.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо