Конференция "Базы" » Получить значение инкрементного поля [D7]
 
  • RGV © (08.06.12 03:13) [0]
    Доброе время суток!
    Есть 3 связанные таблицы:
    MasterTable,DetailTable,SubDetailTable;
    Задача следующая:
    Мне необходимо сделать запись в detailTable
    затем узнать значение автоинкрементного поля "ID" созданной записи
    А затем создать запись в SubDetailTable и указать значение  поля "DetailTableID"
    Проблема возникает, когда я создаю запись в DetailTable и при этом значение поля "MasterTableID" не совпадает с текущим значением поля "ID" в таблице MasterTable:

    Как узнать значение автоинкрементного поля "ID" в DetailTable вновь созданной записи? Или как по другому решить данную промбему?

    Фуф.. изложил. Надеюсь поймете суть вопроса. )

    P.S. используется AdoConnection и AdoDataSet
  • Anatoly Podgoretsky © (08.06.12 07:16) [1]
    > RGV  (08.06.2012 03:13:00)  [0]

    И ты конечно думаешь, что в разных СУБД это одинаково
  • RGV © (08.06.12 09:44) [2]

    > Anatoly Podgoretsky ©   (08.06.12 07:16) [1]

    Стыдно однако ((( , но чесно признаюсь я понятия не имею что там происходит за кулисами AdoDataSet и AdoConnection

    Есть ли всетаки решение проблемы где-то не далеко от поверхности?
  • Cobalt © (08.06.12 09:49) [3]
    Есть УНИКАЛЬНЫЙ СПОСОБ, ТОЛЬКО У НАС! ДЛЯ ВСЕХ БАЗ ДАННЫХ!

    добавляешь в таблицу колонку типа строка, при вставке записываешь туда cгенерированный CreateGUID
    после вставки, находишь эту строку по уникальному ГУИДу, и читаешь из неё этот автоинкремент.

    А можно еще проще - не использовать автоинкремент, а использовать сразу это поле с ГУИДом, тогда не потребуется после вставки что-то там искать.
  • Cobalt © (08.06.12 09:55) [4]
    Правда, потом, при росте объема базы, или при массовой вставке записей, вам это встанет боком - искать после каждой вставки строку в таблице.
  • RGV © (08.06.12 10:07) [5]

    > Cobalt ©   (08.06.12 09:49) [3]

    Скорее всего вы меня не совсем поняли.
    поиск по guid ничего не даст, т.к. DetailTable "как бы фильтруется" по ID MasterTable, таким образом этого Guid просто не будет в таблице.

    Пока скланяюсь к тому(без углубления в БД), чтобы вообще отказаться от MasterField и использовать фильтр, т.к. я всеравно для отображения не использую стандартные компоненты, а использую TListView для которого я писал LVDataLink (read only)
  • RGV © (08.06.12 10:11) [6]
    Есть еще идея использовать не автоинкремент, а самому плюсовать, а последий ID сохранять тойже базе.
  • stas © (08.06.12 11:12) [7]
    А что написано в AdoConnection в поле ConnectionString ?
  • Anatoly Podgoretsky © (08.06.12 11:15) [8]
    > RGV  (08.06.2012 10:11:06)  [6]

    Хороший путь - на кладбище
  • MsGuns © (08.06.12 11:28) [9]
    Если акцес, то после вставки в мастер-таблицу
    Select @@identity
  • Кщд (08.06.12 18:46) [10]
    >RGV ©   (08.06.12 09:44) [2]
    >Стыдно однако (((
    Вам намекнули, что необходимо указать СУБД.
  • RGV © (09.06.12 00:58) [11]
    Кщд ( 08.06.12 18:46 ) [10]
    да акцез. я не понял.
    MsGuns © (08.06.12 11:28 ) [9]
    только не в мастер а в детаил

    без изучения все-таки необойдется
    пошел читать.
  • Плохиш © (09.06.12 04:39) [12]

    > только не в мастер а в детаил

    Интересно, чем вставка в детаил отличается от вставки в мастер?
 
Конференция "Базы" » Получить значение инкрементного поля [D7]
Есть новые Нет новых   [119603   +140][b:0][p:0]