Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2018, 02:15   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Параллельное формирование двух таблиц с поиском дублей

Доброе время суток форумчане.
Есть таблица устройств в БД на FireBird (с полями «Наименование», «Тип», «Зав.номер» и т.д.) в которую из Excel экспортируются данные (устройства).
В БД добавилась вторая таблица «Человеко/часы», в которой нужно содержать только «Наименование» и «Тип» этих устройств ну и еще некоторые поля.

Поэтому при импорте в БД, мне нужно вставлять данные уже в две таблицы, но перед вставкой в таблицу «Человеко/часы», я сначало должен каждое устройство проверить на дубль, если такого устройства нет, то вставить устройство.
В файле бывает до 100 устройств.

Вот я и думаю, как мне сделать и проверку на дубли и не снижать скорость импорта при этом.
1. или при импорте каждого устройства/записи в табл. Устройств, делать запрос в таблицу «Человеко/часы»
Код:
Select ID from PEOPLE_HOURS where NAME=’наименование’ and TYPE=‘тип’
- если нет такого в таблице, то вставлять запись.
2. или в соответствующем DataSet таблицы «Человеко/часы», при проверке записи на дубль, пробегаться по всему DataSet.
3. или ПОСЛЕ импорта устройств в таблицу устройств (я ж буду знать какие устройства проимпортировались), включать уже в параллельном потоке, копирование с проверкой на дибли устройств, из таблицы устройств в таблицу «Человеко/часы».

Как лучше поступить?

Заранее спасибо за ответ.
KBO вне форума Ответить с цитированием
Старый 13.06.2018, 15:43   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Сделать все нужные поля ключевыми не? СУБД сама решит что и как...
Баламут вне форума Ответить с цитированием
Старый 26.06.2018, 11:47   #3
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 979
По умолчанию

если запись уже имеет дубль то это не поможет.
Код:
Select ID from PEOPLE_HOURS where NAME=’наименование’ and TYPE=‘тип’
лучше спрашивать количество записей
Код:
Select count(ID) as val1, ID  from PEOPLE_HOURS where NAME=’наименование’ and TYPE=‘тип’
, если val1=0 нет такой пары, если =1 то есть одна пара, если >1 то руками проверяй кривые пары, записав их id куда-нибудь.
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 26.06.2018, 12:06   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

В огнептице же с 2.1 есть UPDATE OR INSERT. Можно и применить ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Параллельное выполнение двух кусков кода pas abc Kujivunia Паскаль, Turbo Pascal, PascalABC.NET 1 31.12.2016 02:07
Параллельное добавление данных в двух таблицах Avetis62 Microsoft Office Access 6 30.06.2016 15:19
Формирование итоговой динамической таблицы из двух отдельных таблиц akd2009 Microsoft Office Excel 4 27.10.2014 11:30
Параллельное скачивание или как добиться скачивания сразу двух файлов fezilk25 Работа с сетью в Delphi 5 07.02.2011 22:22
Формирование нескольких сводных таблиц FormAlDeGid Microsoft Office Excel 0 24.10.2009 12:04