Главная страница
    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-1236852850
b@v
2009-03-12 13:14
2009.05.17
ACCESS to MySQL


15-1236871256
It's not me
2009-03-12 18:20
2009.05.17
Делимость бита


15-1236893401
Юрий
2009-03-13 00:30
2009.05.17
С днем рождения ! 13 марта 2009 пятница


15-1237194918
Cobalt
2009-03-16 12:15
2009.05.17
Работа со строками через asm - переносимость между версиями?


15-1236968185
Другг
2009-03-13 21:16
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский