Форум: "Базы";
Текущий архив: 2002.06.06;
Скачать: [xml.tar.bz2];
ВнизDelphi 5.0 InterBase 6.0 Найти похожие ветки
← →
mad0max (2002-05-14 04:49) [0]Народ!!! Help please!!
Тупой вопрос.
Имеется база - в базе табличка и три процедуры: на добавление, изменение, удаление записи.
В Delphi беру компонент TIBQuery заполняю пропертя как надо + ложу IBUpdateSQL. Прописываю в в скриптах на добавление, обновление, удаление - вызов процедур. Схема до тупого проста.
Запускаю приложение, независимо от того какие действия произвожу(изменение, добавление, удаление) - делаю сохрание а прога мне дает обшибку Update Failed, хотя все изменение в таблице сохраняются
Что за маразм? Мож кто знает?
Если использовать Delphi ADO MS SQL Server - все проходит на ура и никаких проблем
← →
fnatali (2002-05-14 06:04) [1]Эта ошибка, скорее всего, возникает из-за попытки изменения более,чем одной записи. Проверь - update должен делаться для одной записи. Если я ничего не путаю.
← →
mad0max (2002-05-14 06:11) [2]to fnatali
Да нет конечно же :0)
Тут все правильно! Я говорю, что если использовать Delphi ADO MS SQL Server, все работает, тут видимо или в движке проблема(Interbase), или в компонентах
← →
Johnmen (2002-05-14 09:18) [3]>...Схема до тупого проста...
А есть еще проще - TIBDataSet - и никаких проблем !
← →
mad0max (2002-05-14 12:00) [4]to Johnmen
Базара нет - есть такой компонент!!! Но почти те же траблы а именно:
Прописываю InsertSQL, DeleteSQL, ModifySQL те же процедуры что и опи сывал выше. Говорю сохранить, а он мне говорит, что-то параметры процедур у тебя не заданы. Смотрю через монитор, а там действительно все параметры NULL!!
Могет подскажешь как быть?
← →
Johnmen (2002-05-14 12:14) [5]Что-то не догоняю...
Если InsertSQL, DeleteSQL, ModifySQL прописаны идеологически верно, то проблем быть не должно...
Если все-таки есть - приведи подробности....
← →
mad0max (2002-05-14 12:57) [6]to Johnmen
Ну как пишу например IBDataSet.InsertSQL
EXECUTE PROCEDURE Element_Insert(:Name, :Number)
Конечно же Name и Number - поля НД который возвращается в IBDataSet
← →
Johnmen (2002-05-14 13:10) [7]IBDataSet.InsertSQL :
INSERT INTO ... (Name,Number) VALUES(:Name,:Number)
← →
mad0max (2002-05-14 13:22) [8]
Да не хочу я через insert! Я через процедуры хочу
В этом -то и прикол! Через обычные INSERT, UPDATE, DELETE все получается но мне надо не это, а изменение через хранимые процедуры
← →
Johnmen (2002-05-14 13:29) [9]А можно поинтересоваться, зачем именно так ?
← →
mad0max (2002-05-14 13:41) [10]to Johnmen
Потому что запись добавляется сразу в несколько таблиц.
Триггера вешать не хочется.
Работал по такой схеме с SQL ыукмук, все ок а тут вот не получается
← →
Johnmen (2002-05-14 14:04) [11]Придется тебе подрихтовать идеологию...
Используй IBStoredProc...
Не думаю, что схема с SQL ыукмук была такой же :))
← →
mad0max (2002-05-14 14:10) [12]to Johnmen
>>схема с SQL ыукмук да схема как надо :)))
На самом деле действительно там все работает.
А вот IBStoredProc я использовать не хочу!
А если у меня штук 10 объектов? 30 IBStoredProc!! БРРРР
Можно динамически менять имя процедуры, но енто я думаю маразм!
Придется свой iBUpdateSQL писать
← →
Fareader (2002-05-14 14:45) [13]Можно было конечно написать и одну ХП (для вставки, удаления, изменения), описать нужные запросы, а потом передав определенный флаг - выполнить нужные действия
← →
mad0max (2002-05-14 14:52) [14]to Fareader
Можно но ядумаю это не есть гут
← →
Fareader (2002-05-14 15:14) [15]Это почему? тогда не будет вот этого:
>>А если у меня штук 10 объектов? 30 IBStoredProc!! БРРРР
← →
mad0max (2002-05-14 15:24) [16]Бардак в базе!!
Уж лучше компонент написать, в котором 3 IBStoredProc и все проблемы, прописать каждой процедуре свое дейсвие и все.
Но блин как геморойно!!! Я понимаю MS - must die но тут ребята постарались как надо, работать просто класс, но где взять столько денег на движок?
← →
Johnmen (2002-05-14 15:35) [17]Все описанные геморрои - надуманны....
← →
Fareader (2002-05-14 15:43) [18]2Johnmen - полностью согласен.
← →
mad0max (2002-05-14 15:52) [19]to Johnmen Fareader
Не скажите друзья мои!!! Конечно несложно но
1. Писать лишний раз компонент - трата времени
2. Триггера - увеличивается время обработки данных
3. Куча одинаковых компонентов на форме(Датамодуле) - рябит в глазах, пока найдешь, что надо
Вот так-то! Из всех зол надо выбрать меньшее и однако меньшее это написать свой компонент.
Спасибо что откликнулись, не буду занимать вашего времени
← →
Fareader (2002-05-14 15:52) [20]А тебе нужно одну и туже запись в разных таблицах и править и вставлять и удалять? Может БД спроектирована неверно? А программа более развернутое сообщение не дает кроме Update failed?
← →
Johnmen (2002-05-14 15:55) [21]>mad0max (14.05.02 15:52)
>1.
это верно...
>2.
это неверно...
>3.
это верно...
← →
mad0max (2002-05-14 16:05) [22]to Fareader
База реализована в виде объектов. Есть начальный объект от которого наследуются потомки. Так вот надо сохранять и родителя и потомка
to Johnmen
Почему ты думаешь, что на скорость не повлияет количесво триггегов? А если их 4-5 на одну операцию?
← →
Fareader (2002-05-14 16:12) [23]А зачем тебе 4-5 тригеров на одну операцию?
← →
Johnmen (2002-05-14 16:12) [24]1.Объекты и потомки в IB ??? Ты не путаешь ее с Oracle8 ?
2.А ты почему думаешь, что множественные вызовы ХП работают быстрее триггеров ? :)))
← →
mad0max (2002-05-16 07:03) [25]to Johnmen Fareader
Вы будете смеяться (зато как я поматерился)
Помните я писал
>>Ну как пишу например IBDataSet.InsertSQL
>>EXECUTE PROCEDURE Element_Insert(:Name, :Number)
Ну кто же мог подумать, что названия полей надо писать большими буквами!!!
EXECUTE PROCEDURE Element_Insert(:NAME, :NUMBER)
Короче полез в сырцы IBUpdateSQL, IBDataSet, IBQuery - там багов немеряно!!! Я даже не захотел ничего делать - опустились руки.
Решил поработать IBDataSet, пишу название полей большими буквами :( , блин, вот так
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.06.06;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.007 c