Текущий архив: 2005.02.20;
Скачать: CL | DM;
ВнизКак лучше сравнить два разнотипных DateSet Найти похожие ветки
← →
slaga © (2005-01-19 11:25) [0]Такая ситуация:
есть Оракл и есть Интербейс, Ора на серваке рядом, интербейс на кассе далеко, есть два справочника товаров один на Оре другой на кассе, оба по 200 000 записей, мне нужно сравнить эти два справочника на нахождение таких записей в Оре каких нет в Ибейсе.
Я придумал пока только так:
Беру выгребаю все из Оры в ОраДатаСет
выгребаю все из ИБ в ИБКверя
И в цикле Локейтом ищу в ИБ записи из Оры и если не нахожу пишу их в третий АДОДатаСет для того что б вывести результаты в грид.
Но это предположительно займет 5!!! часов, это же очень долго.
Подскажите пожалуйста как мне лучше решить эту задачу.
← →
Соловьев © (2005-01-19 11:28) [1]попробуй LocalSQL.hlp - Heterogeneous joins
Не знаю Оракл. но должна быть возможность делать запросы к другим базам через ODBC
← →
Johnmen © (2005-01-19 11:31) [2]Да, гетерогенные запросы
www.ibase.ru/devinfo/bde.htm
← →
slaga © (2005-01-19 11:43) [3]Ага, надо попробовать, но у меня кол-во и положение касс меняется, эот ж куча супермаркетов.
← →
Danilka © (2005-01-19 11:47) [4]Если разовая операция, то выгрузить все в орокол, и там сравнить. Предположительно 200к записей займет несколько секунд. :))
← →
msguns © (2005-01-19 11:56) [5]Дело-гниль. По чему сравнивать ? По наименованиям ? Чушь, т.к. если одно и то же вводилось разными тетями, то и разнобой будет в наименованиях. Это во-первых. Во-вторых, если учет партионный (по поставкам), то наименования это еще не ключ для установления строгого соответствия между складским документом (приходом-расходом) и карточкой (позицией в фактурах движения).
Мало информации. Надо полную схему документооборота и данные о ПО в офисе и точках.
← →
Danilka © (2005-01-19 12:02) [6][3] slaga © (19.01.05 11:43)
> Ага, надо попробовать, но у меня кол-во и положение касс
> меняется, эот ж куча супермаркетов.
Похоже, что не разовая операция.. Тогда думать нада и сравнивать.. Как чвариант - открыть ИБ датасет, перекачать все поле, по которому идет сравнение у всех записей во временную орокловую таблицу и сделать запрос запрос уже в орокле, думаю на все уйжет пара минут а не 5 часов..
Чем-то мне вариант с БДЕ не нравится..
[5] msguns © (19.01.05 11:56)
> Мало информации.
Угу. Может быть вся номенклатура заводится только в орокле и выгружается в удаленные базы, и id везде совпадает.
← →
Erik1 © (2005-01-19 12:14) [7]Вобщето такие задачи решаются с другой стороны, надо продумать механизм дабавления новых записей и устанавливать им флаг, что они новые. Тогда сравнивать можно порциями, например по 20000 или вобще по 2000 это уже в 10-100 зар меньше.
Второе закинуть эти записи в отсортированом порядке, можно использовать TClientDataSet он умеет индексы строить и сравнивать поиском по индексу. Все эти действия в месте сведут время синхронизации к секундам.
← →
slaga © (2005-01-19 12:35) [8]Да нет не разовая
← →
slaga © (2005-01-19 12:55) [9]Да нет, все просто насчет сравнивания, есть Код записи и Версия записи, Код ункальный ключь, это как в Оракле так и ИБ (упрощеное строение таблиц), мне нужно только получить коды товаров которых нет на кассе.
← →
msguns © (2005-01-19 13:05) [10]Вообще "правильная" схема при такой структуре объекта (офис/склад - розн.точки) заключается в том, что весь приходящий товар (поступления от поставщиков) регистрируется на складе, а затем внутренним движением переносится в точки. Т.е. товар уже закодирован и прописан по справочникам. Передача данных о товаре в розн.точку либо через ПО типа кэш-драйва, либо "подручными" (как файлы через модем, инет, магн.носители), где они программно "доливаются" в БД точки и разносятся по кассам (загрузка касс). Обычно 1 раз в сутки, чаще всего утром.
Встречное движение, по сути товарный отчет, снимается с касс "локальным" ПО и пересылается манером, аналогичным описанному выше. Т.е. при такой системе не должно даже возникать траблов с какими-то стыковками. Все изначально централизовано и, как следствие, синхронизированно. Может быть я чего-то недопонял ?
← →
Johnmen © (2005-01-19 13:12) [11]>msguns © (19.01.05 13:05) [10]
<offtop>
Серёга, ты письмо моё получил ?
Если нет, то я твоего не получил...:(
</offtop>
← →
msguns © (2005-01-19 13:17) [12]>Johnmen © (19.01.05 13:12) [11]
Блин, Женя, оба письма валяются в Outbox`е и не хотят итти в Sent, хотя оба передавались ;(( (Юзаю зебат)
Может потому, что вложение здоровое, а ? А порезать рар не хочет почему-то (недавно новую версию поставил). Может дела в объеме вложения ? И стоит с другой тачки со старым раром порубить на куски и отправить цепочкой ?
← →
msguns © (2005-01-19 13:19) [13]Твоего письма тоже нетути ;((
← →
Johnmen © (2005-01-19 13:21) [14]>msguns © (19.01.05 13:17) [12]
<offtop>
Я тоже думаю, что из-за размеров. Но mail.ru пропускает до 10Мб.
Если сможешь порубить раром, то поруби.
Я в ожидании...:)
</offtop>
← →
Johnmen © (2005-01-19 13:25) [15]>msguns © (19.01.05 13:19) [13]
>Твоего письма тоже нетути ;((
А вот это уже странно....................
Как вариант выхода - создай свой ящик на mail.ru и пользуясь ихним почтовым сервисом отправь письмо. Это, конечно, если есть время...
← →
msguns © (2005-01-19 13:30) [16]Рублю..
← →
msguns © (2005-01-19 13:40) [17]Ушли все 3. Проверь ящик. Один файл топтать не захотел, так я добавил первый попашийся файл (что-то типа Autoexec)
В общем, разберешься.
← →
Val © (2005-01-19 16:34) [18]>slaga © (19.01.05 11:25)
Я бы выбрал вариант закачивания идентификаторов из ИБ в схему Оракла и сравнения именно там. Хотя, зависит от нюансов.
← →
slaga © (2005-01-19 18:44) [19]А сколько займет время закачки и как это лучше сделать ?
← →
Danilka © (2005-01-20 09:50) [20][19] slaga © (19.01.05 18:44)
"Практика - критерий истины" :)
Коннектишься к ИБ, открываешь датасет на запрос "select id from goods", перебираешь все в цикле и там-же выполняешь запрос на вставку в орокол: "insert into my_temp_table (id) values (:id)". Затем, в орокле делаешь такой запрос: "select id from goods minus select id from my_temp_table". Последний отработает за несколько секунд, самое долгое - перенос данных в орокол, но, думаю, за несколько минут справится. Главное, запрос на вставку с параметром сделай и в цикле просо подставляй параметр. Лажа на вроде: "insert into my_temp_table (id) values ("+id+")" может отработать на порядок медленнее, чем с параметром.
Страницы: 1 вся ветка
Текущий архив: 2005.02.20;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.043 c