Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.21;
Скачать: CL | DM;

Вниз

Добавление записей в БД   Найти похожие ветки 

 
Олеся ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.034 c
3-1098560506
Zif
2004-10-23 23:41
2004.11.21
Подсоединение к Access через AdoConection с паролем...


14-1098946507
1008
2004-10-28 10:55
2004.11.21
Я уж и забыл, что такое от души посмеяться


3-1098699289
Zif
2004-10-25 14:14
2004.11.21
Оптимальный поиск...


3-1098451721
Ivan_
2004-10-22 17:28
2004.11.21
колонка типа TdxDBGridButtonColumn какая кнопка нажата


6-1094837666
Victor!
2004-09-10 21:34
2004.11.21
И все-таки - как копировать по сети.