Форум: "Базы";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];
ВнизДобавление записей в БД Найти похожие ветки
← →
Олеся © (2004-10-22 14:50) [0]Проблема такая, есть некая таблица Table1, данная таблица связана с Table2, Table3 и т.д., допустим, через ключ id, причем Table2,3 и т.д. являются как бы дочерними таблицами, будем так называть, при вызове функции добавления, появляется форма, в которую пользователь заносит нужные данные, вопрос вот в чем, при одновременном добавлении записей в главную и дочерние таблицы, возникает ошибка, так как без Post первой таблицы не передается ключ id, а если делать Post до добавления в дочернии, то при отмене действия, в главной таблице запись все же остается.
← →
Sergey13 © (2004-10-22 14:58) [1]Значит надо попробовать получить значение ИД главной таблицы заранее.
← →
Ega23 © (2004-10-22 15:00) [2]Вообщето обычно сначала заполняют справочные таблицы, а потом подчиненные. Но если ДЕЙСТВИТЕЛЬНО НЕОБХОДИМО добавлять записи во все таблицы сразу, то лучше воспользуйся написанием хранимой процедуры на сервере.
Да, вот ещё что: забудь про TTable.
← →
Ega23 © (2004-10-22 15:00) [3]Вообщето обычно сначала заполняют справочные таблицы, а потом подчиненные. Но если ДЕЙСТВИТЕЛЬНО НЕОБХОДИМО добавлять записи во все таблицы сразу, то лучше воспользуйся написанием хранимой процедуры на сервере.
Да, вот ещё что: забудь про TTable.
← →
msguns © (2004-10-22 15:11) [4]Если при вводе надо скакать по окнам (панелям) главной и подчиненных, то следует сразу отказаться от DB-aware контролов, а все впихивать либо в стрингриды (массивы записей), либо, если данных много, использовать клиентские датасеты с промежуточным сохранением на лок.диске.
А вообще мне лично непонятно, откуда такое суровое условие. И почему нельзя ввести до конца заголовок, запостить его, а потом уж заниматься деталями.
← →
Anatoly Podgoretsky © (2004-10-22 15:35) [5]Трансакции
← →
Олеся © (2004-10-22 15:35) [6]Sergey32: А как получить значение будущего id, без вставки записи? И притом мне это мало что дает, при вставке в дочернии таблицы я использую append, а не запрос типа insert into (так как подобный запрос при таком количестве таблиц, и записей...), поэтому свой, личный id, вручную я передать не могу.
Ega23: я думала об этом, если честно, но не представляю себе как написать подобную хранимую процедуру, возможно я не полностью осведомлена в этой теме.
Я использую ADOTable.
msguns: я использую DBEhoGrid, и отказаться от него не представляет никакой возможности. Условие должно выполнятся, такое ТЗ.
← →
Олеся © (2004-10-22 15:37) [7]Anatoly Podgorelsky: проходили мы такое, делала для ADOConnection BeginTran, толку было ноль, очень сложно все преобразования уследить, да еще сделать так, чтобы они были в одной транзакции, но может вы подскажете ваш подход?
← →
Ega23 © (2004-10-22 15:38) [8]Забудь про TADOTable и будет тебе счастье.
Вредный элемент.
← →
Олеся © (2004-10-22 15:42) [9]Ega23: а что вы мне предлагаете использовать как замену?аргументируйте пожалуйста, у меня огромнейший проект весь на ADO компонентах, если я из-за исправления одной ошибки, буду все переделывать, мне нужны необходимые для этого аргументации. Да еще при условии, что у меня не возникнут новые проблемы, которые при таком перевороте могут оказаться более значимыми!
← →
Ega23 © (2004-10-22 15:44) [10]TADOQuery.
И что-то не верится мне, что "огромнейший проект" построили на ADOTable"ах. Ну редактирование справочных таблиц. Да вот, собственно, и всё. Больше применения - не вижу...
← →
Johnmen © (2004-10-22 15:46) [11]Как верно заметил АП, здесь надо вдумчиво изучать и аналогично применять управление транзакциями...
← →
DenK_vrtz © (2004-10-22 15:52) [12]>Ega23 ©
Видел я как-то у одного "маньяка" проект. Из DataSet-ов одни TTable. А потом начинается беготня по while not() do. Душераздирающее зрелище! :)
← →
Олеся © (2004-10-22 15:59) [13]Ega23: А-а, я просто не поняла постановку совета, так у меня на дочерние таблицы и есть ADOQuary, куда передается параметр id, но как я смогу узнать заранее какой id у меня примет главная запись?
← →
Anatoly Podgoretsky © (2004-10-22 16:11) [14]Либо запрашиваешь самостоятельно и вставляешь вручную, либо после вставки узнаешь у сервера @IDENTITY
Трансакции позволят вернуть все в исходное состояние, если будет желание отказаться от модификации.
← →
Олеся © (2004-10-22 16:14) [15]Спасибо всем за советы, попробую разобраться в транзакциях.
← →
bushmen © (2004-10-22 16:38) [16]"SCOPE_IDENTITY returns values inserted only within the current scope; @@IDENTITY is not limited to a specific scope."
← →
dim- © (2004-10-23 10:44) [17]а еще можешь в качестве id использовать GUID.
при создании записи в главной таблице формируешь GUID, а в дочернии его передаешь.
uses
..ActiveX,ComObj;
Function GetGUID ():ShortString;
var
Guid: TGuid;
strGuid: string;
begin
CoCreateGuid(Guid);
strGuid := GuidToString(Guid);
Delete(strGuid,length(strGuid),1);
Delete(strGuid,1,1);
Result := strGuid;
end;
← →
bushmen © (2004-10-23 12:59) [18]>а еще можешь в качестве id использовать GUID
Ключ будет медленне работать, чем int с identity
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.038 c