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

Вниз

Импорт записей в главную и подчиненную таблицы из файла   Найти похожие ветки 

 
bobwild   (2009-04-02 11:06) [0]

Добрый день!

Делаю базу данных на СУБД Firebird, проект на Delphi 7 + FIBPlus компоненты.

Столкнулся вот с такой проблемкой:
Есть файл с данными, которые нужно импортировать в базу.
Данные в файле четко структурированы.
Операция разбора файла выделяет данные для занесения в таблицу.
Мы должны последовательно занести данные в таблицы: сначала в главнуюю затем, узнав ID записи в главной таблице, занести в дочернии.

Вот как узнать ID записи в главной таблице?????

вот простенький код вставки записей из цикла обработки файла импорта:...

{занесение записи в главную таблицу Main}
MainDataModule.pFIBDataSetMain.Insert();
MainDataModule.pFIBDataSetMainFIELD1. AsString := Str1;
MainDataModule.pFIBDataSetMainFIELD2. AsString := Str2;
MainDataModule.pFIBDataSetMain.Post();

{занесение записив дочернюю таблицу Slave}
MainDataModule.pFIBDataSetSlave.Insert();
MainDataModule.pFIBDataSetSlaveFK. AsInteger := ??????? ID записи из главной таблицы?????
MainDataModule.pFIBDataSetRolesFIELD3. AsString := Str3;
MainDataModule.pFIBDataSetSlave.Post();

Заранее спасибо.


 
Сергей М. ©   (2009-04-02 11:12) [1]


> узнав ID записи в главной таблице


Она , очевидно, в триггере формируется обращением к соотв.генератору ?


 
Дикая фасоль   (2009-04-02 11:15) [2]

Хранимая процедура + query спасёт отца русской демократии...


 
Sergey13 ©   (2009-04-02 11:34) [3]

> [0] bobwild   (02.04.09 11:06)
> Вот как узнать ID записи в главной таблице?????

Select Gen_Id(Gen_name,X) from rdb$database
где X - количество вставляемых записей.
Получишь Id - последней записи. Вычти их него Х и получишь Id первой. Далее в цикле наращивай Id на 1.
Естественно в тригере нужно загасить генерацию при заранее известном new.Id.


 
Одичавший горошек   (2009-04-02 12:10) [4]


> Sergey13 ©   (02.04.09 11:34) [3]
> Получишь Id - последней записи. Вычти их него Х и получишь Id первой...

... и потенциальный источник плавающих ошибок :)


 
Sergey13 ©   (2009-04-02 12:52) [5]

> [4] Одичавший горошек   (02.04.09 12:10)

Обоснуй.


 
Sergey13 ©   (2009-04-02 13:18) [6]

> [4] Одичавший горошек   (02.04.09 12:10)

Это ты про то что вычитать нужно Х-1? Так это не плавающая ощибка а постоянная. 8-)
С другой стороны я ведь не код для копипаста написал, а идею.


 
Горошек в трусочек   (2009-04-02 13:33) [7]


> Sergey13 ©   (02.04.09 13:18) [6]
> Это ты про то что вычитать нужно Х-1? Так это не плавающая ощибка а постоянная. 8-)

Я о том - что этот способ с Select Gen_Id(Gen_name,X) будет работать в однопользовательском режиме а-ля "монопольный режим 1С" или же для Firebird embedded-версии.

А из вопроса непонятно - будет ли эта операция единоразовой под контролем программиста или же это будет работать с кучей юзеров одновременно...

Мне кажеться, что всётаки лучше удет организовать код вставки и получения ID отдельной ранимой процедурой :)


 
Sergey13 ©   (2009-04-02 13:42) [8]

> [7] Горошек в трусочек   (02.04.09 13:33)
> Я о том - что этот способ с Select Gen_Id(Gen_name,X) будет
> работать в однопользовательском режиме

С чего бы это?


 
Сергей М. ©   (2009-04-02 13:43) [9]


> способ с Select Gen_Id(Gen_name,X) будет работать в однопользовательском
> режиме а-ля "монопольный режим 1С" или же для Firebird embedded-
> версии


С чего бы вдруг ?
Генераторы в IB/FB/YA работают вне контекстов транзакций.


 
Игорь Шевченко ©   (2009-04-02 14:20) [10]

Дикая фасоль   (02.04.09 11:15) [2]
Одичавший горошек   (02.04.09 12:10) [4]
Горошек в трусочек   (02.04.09 13:33) [7]

Читаем правила форума, не удивляемся



Страницы: 1 вся ветка

Текущий архив: 2009.05.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
2-1238737468
Roman88
2009-04-03 09:44
2009.05.17
Функция FileSize


15-1237120235
Юрий
2009-03-15 15:30
2009.05.17
С днем рождения ! 15 марта 2009 воскресенье


15-1237307414
KSergey
2009-03-17 19:30
2009.05.17
Посетил концерт Гару


15-1237130340
DillerXX
2009-03-15 18:19
2009.05.17
В чём может быть причина? (установка .NET Framework 3.5)


15-1236677968
It's me
2009-03-10 12:39
2009.05.17
Восстановление БД по индексам?