02.09.2004, 10:04 | #1 |
drc
|
Фильтрация записей при импорте
Доброго времени суток!
Необходимо импортировать данные из *.dbf. Что сделали: - создали шаблон Exel - забили туда данные - импорт пошел очень медленно! Отсюда вопросы: - как оптимальнее сделать импорт - как реализовать импорт только определенных данных (удовлетворяющих условию) Буду благодарен любому совету! |
|
02.09.2004, 10:08 | #2 |
Участник
|
Если есть навыки программирования - то проще и быстрее сделать все через job импортом из текстового файла, там вам и фильтрация и все что хочешь.
|
|
02.09.2004, 10:11 | #3 |
drc
|
Да это то что надо! Спасибо!
Как читать текстовый файл? Есть ли примеры кода? |
|
02.09.2004, 10:36 | #4 |
Участник
|
Суперпростенький код - импорт банковских счетов из файла
PHP код:
|
|
02.09.2004, 10:38 | #5 |
Administrator
|
Господа! Зачем так извращаться??
Есть совершенно замечательный способ импорта данных через ODBC. Минус правда в том, что ODBC нужно создавать (это обязательное условие). Зато делаешь импорт откуда хочешь. Я сам делал импорт из .dbf и скажу - что синтаксис SQL-запроса к DBF-нику - практически такой же как в Access (условно - берем Access, импортим туда DBF, создаем запрос, смотрим SQL и переносим в аксапту). Отлаживать данный SQL запрос можно в SQL Server (причем именно запрос к данному драйверу ODBC). job не обязателен. Я делал класс, наследуемый от RunBase... и все. Тем более что импорт скорее всего будет периодической операцией а не разовой |
|
02.09.2004, 10:43 | #6 |
drc
|
Благодарю! Сейчас буду разбираться!
|
|
02.09.2004, 10:51 | #7 |
Administrator
|
Итак, создаем ODBC с именем "My ODBC". В ODBC указываем драйвер и путь к каталогу dbf-ников (у меня есть for_ax.dbf и в нем поле XXX). Я считаю кол-во уникальных записей в поле XXX
PHP код:
|
|
02.09.2004, 11:24 | #8 |
drc
|
Благодарю! Способ отличный!
И такой вопрос -- как приконнектиться в QueryAnalizer к dbf-нику? Действительно удобно отлаживать запрос там! |
|
02.09.2004, 11:51 | #9 |
Administrator
|
Цитата:
И такой вопрос -- как приконнектиться в QueryAnalizer к dbf-нику?
Однако есть следующая возможность: Открываем Enterprise Manager - свой SQL Server - Data Transformation Services - Local Packages Делаем New Package Далее делаем Add Conection. Добаляем SQL Server (на самом деле он не нужен, однако последовательность действий важна) Далее делаем Add Connection. Добавляем Other (ODBC DataSource). Указываем свой созданный DSN. Жмем ОК. Выделяем 2 получившихся значка (сначала ODBC, затем SQL Server). Щелкаем правой кнопкой по SQL Server делаем Transform Data Task. После чего нарисуется стрелка. Ее направление обязательно должно идти от ODBC. Щекаем по стрелке - заходим в Properties. Выбираем не Table а SQL Query. В окошке пишем запрос. Нажимаем кнопку Preview. Если запрос написан правильно - мы увидим данные. Если неправильно - увидим ошибку. После отладки - запрос копируем один в один в аксапту и присваиваем переменной (у меня sSQL). Единственный момент. В зависимости от запроса - строка может быть ОЧЕНЬ длинной. Поэтому рекомендую заложиться на длину строки (у меня 600 символов) |
|
02.09.2004, 12:00 | #10 |
Administrator
|
Кстати еще рекомендую обратить внимание на тип OdbcDsn_RU и форму (пункт меню display) OdbcAdmin_RU.
Первый поможет создать на диалоге раскрывающийся список ODBC (это уже интерфейс для пользователя) Вторая - поможет создать на диалоге кнопку вызова самих ODBC. Это очень актуально если база работает под AOS. Потому что только так можно достучаться обычному юзеру до ODBC на сервере не имея прав админа на сервере. |
|
02.09.2004, 12:00 | #11 |
drc
|
С коннектом разобрался!
У меня общий вопрос -- а такая выборка с помощью естественного SQL запроса не противоречит логике Axapt-ы? (Ведь есть же специальные конструкции языка) |
|
02.09.2004, 12:00 | #12 |
1C
|
Использовать для импорта текстовый файл - это вовсе не извращение, а стандартный аксаптовский прием. Для задания определнный условий загоните сначала все данные из текстового файла во временную таблицу, а уже потом можно формировать какие угодно к ней запросы.
|
|
02.09.2004, 12:06 | #13 |
Administrator
|
Цитата:
такая выборка с помощью естественного SQL запроса не противоречит логике Axapt-ы? (Ведь есть же специальные конструкции языка)
|
|
02.09.2004, 12:11 | #14 |
drc
|
Спасибо огромное за советы!! Сейчас разбираюсь!
|
|
02.09.2004, 12:15 | #15 |
Administrator
|
Цитата:
Использовать для импорта текстовый файл - это вовсе не извращение
И встроенный язык гораздо менее емкий чем естественный SQL. Например в моем примере придется перебирать лишние записи, если решать все это через текстовый файл. Мой вариант - существенно быстрее на больших объемах данных или если импорт производится через интернет-канал. С моей точки зрения -лучше разбираться в 10 строчках кода с естественным SQL чем в 100 с встроенным в данной ситуации. |
|
02.09.2004, 12:17 | #16 |
drc
|
Особо благодарю sukhanchik!!!!
|
|
02.09.2004, 13:34 | #17 |
1C
|
2sukhanchik:
Администрирование->Периодические операции->Экспорт/Импорт данных. При создании группы определения можно задать критерий отбора по какому либо полю. Это несколько строчек кода. И все, почти никакого программирвания. Кстати, очень спорно ваше утверждение о скорости импорта при больших объемах информации.Хотелось бы услышать доказательства. |
|
02.09.2004, 13:56 | #18 |
Участник
|
Доказательства??
Хм... а случай закачки 6 заджойненых таблиц в качестве сводной? В коде sukhanchik'а - это делается одним запростом и все... текстовым файлом или стандартными группами тут нужно будет писать много больше - факт Плюс ручной перегон табличек. Просто разные потребности... если просто табличка - то можно хоть через ехель стандартом лить Ну и текстовый файл, конечно, форева |
|
02.09.2004, 14:36 | #19 |
Участник
|
2 sukhanchik
sSQL = "SELECT COUNT(*) FROM (SELECT DISTINCT XXX FROM FOR_AX)"; Такой селект просто супер! Вариант SELECT COUNT(DISTINCT XXX) FROM FOR_AX конечно же, работать не будет! |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Обновление записей при импорте из csv | 14 | |||
Фильтрация записей | 9 | |||
Фильтрация записей | 0 | |||
фильтрация записей по месяцу в поле дата | 9 | |||
Проблема при импорте в Axapta | 6 |
|