-
Доброе время суток!
Есть 3 связанные таблицы:
MasterTable,DetailTable,SubDetailTable;
Задача следующая:
Мне необходимо сделать запись в detailTable
затем узнать значение автоинкрементного поля "ID" созданной записи
А затем создать запись в SubDetailTable и указать значение поля "DetailTableID"
Проблема возникает, когда я создаю запись в DetailTable и при этом значение поля "MasterTableID" не совпадает с текущим значением поля "ID" в таблице MasterTable:
Как узнать значение автоинкрементного поля "ID" в DetailTable вновь созданной записи? Или как по другому решить данную промбему?
Фуф.. изложил. Надеюсь поймете суть вопроса. )
P.S. используется AdoConnection и AdoDataSet
-
> RGV (08.06.2012 03:13:00) [0]
И ты конечно думаешь, что в разных СУБД это одинаково
-
> Anatoly Podgoretsky © (08.06.12 07:16) [1]
Стыдно однако ((( , но чесно признаюсь я понятия не имею что там происходит за кулисами AdoDataSet и AdoConnection
Есть ли всетаки решение проблемы где-то не далеко от поверхности?
-
Есть УНИКАЛЬНЫЙ СПОСОБ, ТОЛЬКО У НАС! ДЛЯ ВСЕХ БАЗ ДАННЫХ!
добавляешь в таблицу колонку типа строка, при вставке записываешь туда cгенерированный CreateGUID
после вставки, находишь эту строку по уникальному ГУИДу, и читаешь из неё этот автоинкремент.
А можно еще проще - не использовать автоинкремент, а использовать сразу это поле с ГУИДом, тогда не потребуется после вставки что-то там искать.
-
Правда, потом, при росте объема базы, или при массовой вставке записей, вам это встанет боком - искать после каждой вставки строку в таблице.
-
> Cobalt © (08.06.12 09:49) [3]
Скорее всего вы меня не совсем поняли.
поиск по guid ничего не даст, т.к. DetailTable "как бы фильтруется" по ID MasterTable, таким образом этого Guid просто не будет в таблице.
Пока скланяюсь к тому(без углубления в БД), чтобы вообще отказаться от MasterField и использовать фильтр, т.к. я всеравно для отображения не использую стандартные компоненты, а использую TListView для которого я писал LVDataLink (read only)
-
Есть еще идея использовать не автоинкремент, а самому плюсовать, а последий ID сохранять тойже базе.
-
А что написано в AdoConnection в поле ConnectionString ?
-
> RGV (08.06.2012 10:11:06) [6]
Хороший путь - на кладбище
-
Если акцес, то после вставки в мастер-таблицу
Select @@identity
-
>RGV © (08.06.12 09:44) [2]
>Стыдно однако (((
Вам намекнули, что необходимо указать СУБД.
-
Кщд ( 08.06.12 18:46 ) [10]
да акцез. я не понял.
MsGuns © (08.06.12 11:28 ) [9]
только не в мастер а в детаил
без изучения все-таки необойдется
пошел читать.
-
> только не в мастер а в детаил
Интересно, чем вставка в детаил отличается от вставки в мастер?