Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.05.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.004 c
15-1237178607
hinst
2009-03-16 07:43
2009.05.17
Pascal operating system


15-1237197118
Немо2
2009-03-16 12:51
2009.05.17
Что имеется ввиду?


4-1208885015
Dmitry
2008-04-22 21:23
2009.05.17
Прочитать UNICODE файл с китайским текстом


2-1238647976
Evggeniy
2009-04-02 08:52
2009.05.17
с какой БД работать?


15-1237324761
Kostafey
2009-03-18 00:19
2009.05.17
Посоветуйте железо для сервера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский