powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Есть ли способы ускорить процесс обновления справочника?
73 сообщений из 73, показаны все 3 страниц
Есть ли способы ускорить процесс обновления справочника?
    #37656366
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый!

Стоит простая задачка сделать обновление справочника. Есть основная база на SQL и есть присылаемый из вне справочник DBF количество записей порядка 250 000. Т.е. сходу приходит только один вариант решения:

Выборка всех записей из dbf , Циклический перебор отобранных записей с поиском в SQL. если такая же найдена, то Update если нет то addnew.

Единственное что приходит в голову сделать для ускорения это использовать курсор adOpenForwardOnly, adLockReadOnly при чтении dbf.

Может есть еще какие способы? например я знаю в 4GL есть возможность проверять без физического перемещения по запися. Есть ли аналог в SQL?
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37656368
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_men,
Таблицы SQL индексированы
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37656391
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) а чем не устраивает SELECT ... WHERE ....? Зачем нужен перебор?
2) если на нужное поле есть уникальный индекс, можно просто попытаться добавить запись. Есил возникнет ошибка и запись не добавится, значит она уже есть.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37656392
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bulk заюзать для загрузки всего из dbf в sql. далее запросом update+insert
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37656399
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так, может я недостаточно внимательно прочитал
Alex_menЕсть основная база на SQLэто что значит? Какая СУБД конкретно? Если MSSQL - там есть классная штуковина - Linked Server. Таблица чужеродной базы станет как бы локальной.

Кстати и причем тогда тут VB? Это надо делать процедурами на сервере.

ЗЫ: ну и мой вариант №2 это не отменяет
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37656400
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Onebulk заюзать для загрузки всего из dbf в sqlну или так
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37656407
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One
+100

Shocker.ProЕсил возникнет ошибка и запись не добавится, значит она уже есть.Обработка исключений еще медленнее перебора.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37656421
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro1) а чем не устраивает SELECT ... WHERE ....? Зачем нужен перебор?
2) если на нужное поле есть уникальный индекс, можно просто попытаться добавить запись. Есил возникнет ошибка и запись не добавится, значит она уже есть.

а SELECT...WHERE разве не подразумевает перебор? получается я встал на запись в DBF делаю SELECT в SQL и далее по обстоятельствам INSERT или UPDATE. Потом переход к следующей записи.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37656424
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
интересно тут надо почитать.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37656431
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мыслите кортежами(наборами) данных, а не отдельными строками в таблице
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37656444
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proтак, может я недостаточно внимательно прочитал
это что значит? Какая СУБД конкретно? Если MSSQL - там есть классная штуковина - Linked Server. Таблица чужеродной базы станет как бы локальной.

да MSSQL. Как Линкед сервер влияет на быстродействие? Далее база многопользовательская, получается при замене файла мне надо проверять не сидит ли кто в таблице и не выполняется ли с ней какие авто процедуры я так понимаю? потом мне это дело надо еще дальше рассылать и лично я хотел только то что изменилось. А в этом случае мне придется кидать полную DBF что а великовато по размерам и требует ручного размещения на стороне удаленных клиентов с офлайн базкой.

Shocker.ProКстати и причем тогда тут VB? Это надо делать процедурами на сервере.

ЗЫ: ну и мой вариант №2 это не отменяет

ну я не настолько хорошо знаком с этими процедурами, а не подразумевает ли это размещение исходной dbf на сервере? Имеются ввиду хранимки?
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37656492
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

гм кортеж вроде как для многомерных наборов данных, а тут плоская таблица, никаких кубиков. Пойду себе книжицу по программированию SQL подищу. Есть на эту тему какие нибудь рекомендации по авторам изданиям?
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37656726
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обновлять надо только одну таблицу в БД MSSQL?
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37656802
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_menа SELECT...WHERE разве не подразумевает перебор?не подразумевает, потому что будет сканирование дерева индекса а это на порядки быстрее, не говоря уж о том, что это будет делать сервер, не передавая никуда данные.
Alex_menа MSSQL. Как Линкед сервер влияет на быстродействие?Тем, что он зальет к себе эту таблицу, дальше единственным INSERT-ом с JOIN-ом можно вставить несовпадающие записи.
Самое главное в этом всем - уйти от перебора на клиенте - это самое худшее, что можно придумать
Alex_menДалее база многопользовательская, получается при замене файла мне надо проверять не сидит ли кто в таблице и не выполняется ли с ней какие авто процедуры я так понимаю?Сервер сам решит эту задачу посредством блокировки таблицы во время выполнения запроса.
Alex_menпотом мне это дело надо еще дальше рассылать и лично я хотел только то что изменилось.Это решается дополнительным столбцом в таблицы с временем создания записи (ну или версией, номером обновления и т.п.)
Alex_menА в этом случае мне придется кидать полную DBF что а великовато по размерам и требует ручного размещения на стороне удаленных клиентов с офлайн базкой.Зачем? Опять же потом выбросить результат в DBF. отобранный по вышеназванному полю
Alex_menа не подразумевает ли это размещение исходной dbf на сервере?на сервере или на сетевом диске, ну да, доступ должен быть даден серверу

Вообще, чтобы четче понимать задачу, обрисуй порядки цифр, сколько записей в исходной таблице, сколько записей в DBF-ке и сколько записей добавляется за одно обновление.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37659614
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

Да только одну.

Что то я в книгах по программированию SQL нигде описания bulk и как его правильно использовать не нахожу. Там максимум INSERT SELECT нашел. Да и запрос update+insert что то я не нашел
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37660015
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_menЧто то я в книгах по программированию SQL нигде описания bulk и как его правильно использовать не нахожу.И не найдешь. Это надо искать в книгах на конкретный сервер, множественная заливка данных есть не везде а там где есть реализована по разному. Если у тебя MS SQL, то читай главу посвященную bcp.exe.

Alex_men Там максимум INSERT SELECT нашел. Да и запрос update+insert что то я не нашелТоже есть не везде. В MS SQL нет вообще.
На MSSQL это делается тремя отдельными командами: select чтобы проверить есть ли строка с нужным первичным ключом, потом insert если такой строки нет и update если она уже есть.
Либо двумя: безусловный delete строки с первичным ключом, потом insert. Это конечно не будет работать в случае с внешними ключами. Сразу предупрежу: bulk insert работает именно по этому принципу. Вернее bulk insert просто вставляет, удалять старое ты должен будешь сам. Еще там есть особенности по триггерам и логу...


Alex_menВыборка всех записей из dbf , Циклический перебор отобранных записей с поиском в SQL. если такая же найдена, то Update если нет то addnew.Это самое надежное решение.

Впрочем, можно еще попробовать делать bcp in во вспомогательную таблицу, потом insert из вспомогательной в главную тех первичных ключей который отсутствуют, потом update главной таблицы на основе вспомогательной, и последний шаг - полная очистка вспомогательной. Это будет чуть сложнее с SQL точки зрения, но намного быстрее чем цикл на клиенте.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37660035
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНа MSSQL это делается тремя отдельными командами: select чтобы проверить есть ли строка с нужным первичным ключом, потом insert если такой строки нет и update если она уже есть.можно обойтись без SELECT

если строка одна - пытаться сделать UPDATE и смотреть @@rowcount, если 0 - делать INSERT

если строк несколько - лучше запихать их в отдельную таблицу, а затем два пакетных запроса - INSERT и UPDATE, приджойнив таблицы между собой.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37660080
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlпотом insert из вспомогательной в главную тех первичных ключей который отсутствуют, потом update главной таблицы на основе вспомогательнойПочему сразу не вставить и ключи и прочие данные?
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37660105
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да.
Суть в чём: таблицу в самой БД нам жалко, - она в это время может быть заюзана; опять же, сервер на ходу и нагружен... С другой стороны, присланная DBF-ка (ну, копия её) нам по-барабану - мы её можем иметь, как хотим. Вот её грузим в отдельную таблицу - и над этой таблицей работаем - удаляем из нее дубли, а остальные записи помечаем для UPDATE/INSERT. А затем двумя движениями вливаем в наш справочник...
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37660452
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так все таки, правильно я понял что одним запросом я не могу сделать так:

найти запросом все совпадающие записи (в SQL табличке с DBF) и проапдейтить этот набор записей одним запросом? всетаки нужно построчно?
ну и соответственно потом просто все остальные записи добавить
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37660508
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_menТак все таки, правильно я понял что одним запросом я не могу сделать так:двумя запросамиAlex_menвсетаки нужно построчно?нет, это одним запросом (для всех записей сразу)
Alex_menну и соответственно потом просто все остальные записи добавитьэто вторым запросом
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37660605
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Вот теперь определился пошел работать
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37660637
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Хотел уточнить (просто раньше никогда не делал UPDATE целыми таблицами) правильно ли я понимаю:

Код: vbnet
1.
2.
3.
UPDATE T1
set t1.p1=t2.p1,t1.p2=t2.p2
WHERE t1.p0=t2.p0



а INSERT Соответственно

Код: vbnet
1.
2.
3.
4.
INSERT INTO t1
(t1.p1,t1.p2)
Values (t2.p1,t2.p2)
WHERE t1.p0<>t2.p0
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37660681
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблицу t2 тоже надо объявить в запросе

что-то типа
Код: sql
1.
2.
3.
UPDATE t1
SET ...
FROM t1 INNER JOIN t2 ON ....



или
Код: sql
1.
2.
3.
4.
UPDATE t1
SET ...
FROM t1, t2
WHERE ....


я предпочитаю первую запись, она понятнее
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37660693
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В update одна ошибка:
Код: sql
1.
2.
3.
4.
UPDATE T1
set t1.p1=t2.p1,t1.p2=t2.p2
from t2
WHERE t1.p0=t2.p0



В insert две. values это набор конкретных значений для вставки одной записи. А условие t1.p0<>t2.p0 вставит все записи из t2 для каждой записи из t1 кроме той, значения p0 которых равны. То есть в результате вставится (count(t2.*) - 1) * count(t1.*) записей.

Правильно это делается так:
Код: sql
1.
2.
3.
insert into t1 (p1,p2)
select p1,p2 
from t2 where not exsists (select * from t1 where t1.p0=t2.p0)


Если записей в t1 много, лучше перед этим очистить t2 от уже обработанных записей:
Код: sql
1.
delete from t2 where exsists (select * from t1 where t1.p0=t2.p0)

Очистка от записей, которые были обновлены
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37660741
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЕсли записей в t1 многоЗабыл, после очистки insert делать без where.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37660948
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

Спасибо!!!
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37661177
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

Вопрос пытаюсь забросить данные из внешней DBF во временную таблицу следующим кодом
Код: vbnet
1.
cn_base.Execute "INSERT INTO LOCAL TEMPORARY TABLE swtmp FROM sw_list IN 'D:\work\access\korr_otnosheniya\server\import\sprv\sw_list.dbf' 'dBASE IV;' "



Получаю ошибку Incorrect syntax near 'TEMPORARY'

Пробовал делать так
Код: vbnet
1.
cn_base.Execute "SELECT * INTO LOCAL TEMPORARY TABLE swtmp FROM sw_list IN 'D:\work\access\korr_otnosheniya\server\import\sprv\sw_list.dbf' 'dBASE IV;' "



Эффект тот же
где я заблуждаюсь? или надо вначале создать временную а потом перелить туда данные?
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37661192
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_men,

Это не синтаксис MSSQL

1) временные таблицы в MSSQL имеют приставку # перед именем.
типа SELECT * INTO #tm
2) IN там тоже не работает, кури OPENQUERY

(когда тыришь откуда-то код, не забывай смотреть, к какой СУБД он относится)
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37661218
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Вы правы. Оновы кода брал из книги Криса Фиайли SQL QUICK START. Я не дочитал примечания. Там дается синтаксис для разных СУБД. Обычно основной идет для MSSQL. а тут еще уточняющее примечание.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37661247
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Еще хочу уточнить, а в VB по SQL синтаксису ориентироваться надо непосредственно на MSSQL или на TransactSQL? Вообще я не пойму зачем мелкософту так много диалектов.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37661253
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ms sql - это сервер sql, который использует диалект Transact SQL (T-SQL).
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37661273
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_menа в VB по SQL синтаксису ориентироватьсяVB по барабану - он отправляет текстовую строку, которую уже будет интерпретировать СУБД.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37661278
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
Виноват очепятка имелся ввиду JetSQL. Или оный только для MDB хранилищ?
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37661279
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
понял, ориентироваться по СУБД.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37661507
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Что не так делаю? пытаюсь зацепиться через ODBC. если открываю через connection.open проблем нет могу делать выборку из DBF а если вот так как ниже то говорит не указан провайдер или источник не найден. Строчку скопировал из UDL файла
Код: vbnet
1.
2.
cn_base.Execute "SELECT * INTO #swtmp " & _
                    "FROM OPENROWSET ('MSDASQL','Provider=MSDASQL.1;Persist Security Info=False;Data Source=swlist','SELECT * FROM sw_list') "
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37661552
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Data Source=c:\folder;Extended Properties=dBASE IV;', 'SELECT * FROM sw_list') 
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37661615
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

А с помощью ODBC никак? просто хотелось бы более универсальную настройку сделать.

Если нет видимо настройку путей надо будет в базе хранить.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37661650
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через dsn что ли? А у вас mssql на том же компьютере, где выполняется cn_base.Execute?
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37661657
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

В данном случае да, а вообще предполагается базу держать на сервере
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37661670
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда и dsn должен быть на сервере. И сервер должен иметь доступ к dbf-файлам. Либо нужно будет подключать ему шару сетевым диском, либо в dsn указывать сетевой путь. Да и в предыдущем примере соответственно не c:\folder. А открывать dsn так:
Код: sql
1.
OPENROWSET('что здесь не знаю, возможно тот же jet', 'DSN=swlist;', 'SELECT * FROM sw_list') 
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37662510
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Не пойму вроде все верно сделал, запрос не пашет. постоянно выдает "Время истекло". что я мог упустить

Код: vbnet
1.
2.
cn_base.Execute "SELECT * INTO #swtmp " & _
                    "FROM OPENROWSET ('MSDASQL','DSN=swlist','SELECT * FROM sw_list ORDER BY id') "


если прописываю
Код: vbnet
1.
'Driver={Microsoft dBase Driver (*.dbf)};Persist Security Info=False;Data Source=sw_list.dbf;Initial Catalog=D:\111','SELECT * FROM sw_list ORDER BY id') "



то таблица в файле не найдена :(
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37662627
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот еще такой вопрос если делать импорт визардом, то можно сохранить скрипт выполнения импорта. Этот скрипт можно прикрутить к программе или лучше не стоит?
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37662735
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_menНе пойму вроде все верно сделал, запрос не пашет. постоянно выдает "Время истекло". что я мог упуститьПопробуй SELECT top 1 * FROM sw_list

Alex_men Этот скрипт можно прикрутить к программе или лучше не стоит?В принципе можно, но лучше не стоит. Я пробовал, капризная штука. Ровно в том виде, который был сгенерен, работает, а делаешь шаг влево-вправо в плане добавления какой-никакой автоматизации и универсализации, перестает работать, выдает малопонятные ошибки.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37662809
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел еще вот такой код. и тоже не слава богу.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim Cl_Base As Database
    Dim MainPath As String
    Dim SQLExecString As String
    
    MainPath = "D:\work\access\korr_otnosheniya\server\import\sprv"
        
    Set Cl_Base = DAO.OpenDatabase(MainPath, False, False, "dBASE IV;LANGID=0x0419;CP=866;COUNTRY=0")
    SQLExecString = "SELECT id,code,cod_bank,cod_branch, " & _
                        "name_swift,iso_dig,iso_lat2,iso_lat3, " & _
                        "subtype,co_type,cb_date,ce_date,upsize_ts " & _
                    "FROM sw_list "
    Set rst_in = Cl_Base.OpenRecordset(SQLExecString)



говорит слишком мало параметров, требуется 13.
Вот не ожидал тут такой засады :(
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37662834
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

Да TOP10 отбирает пуле, а вот полную таблицу переварить не может :(
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37662838
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyПопробуй SELECT top 1 * FROM sw_list


TOP 100 000 тоже отбирает
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37662844
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_menговорит слишком мало параметров, требуется 13.дык, значит в таблице sw_list нет всех этих полей name_swift,iso_dig,iso_lat2,iso_lat3 и т.п. как раз количеством 13 штук
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37662855
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

так я их оттуда и списал (правда открывал аксесом). Может они как то иначе описываться должны? и SQL тож нашел их визаром
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37662884
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

и еще одна странность он говорит то 3 то 13 параметров
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37662908
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_menAntonariyПопробуй SELECT top 1 * FROM sw_list


TOP 100 000 тоже отбираетНу значит действительно "время истекло". Нужно увеличить таймаут выполнения команд.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37662955
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

я правильно понимаю это в настройках ODBC делается? а то я уже там 200 поставил а все мало
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37662963
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cl_Base.QueryTimeout
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37662984
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

сейчас с connetionTimeOut поиграюсь но 50 там уже не хватает
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37662993
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
connetionTimeOut это таймаут установки соединения, а не выполнения запроса.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37663021
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProCl_Base.QueryTimeout

Я прошу прощения, малость запутал Вас. Я просто разные варианты прокручиваю. По мере нахождения решений в форуме и литературе.

пока самый рабочий вариант
Код: vbnet
1.
2.
3.
cn_base.Execute "SELECT * INTO tmpsw " & _
                    "FROM OPENROWSET ('MSDASQL','Provider={Microsoft dBase Driver (*.dbf)};Persist Security Info=False;DSN=swlist;Extended Properties=DBASE 5;','SELECT * FROM sw_list') "
                    



за исключением того что отваливается по тайм ауту. 150 тыс записей отбирает, а на 200 уже привет, у меня в таблице что то околи 230 тыс.
я так понимаю надо параметры OPENROWSET копать
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37663031
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС,

вы задачу "к верх ногами" решаете. вам нужно делать это всё на стороне сервера. будет быстрее и проще.
а так, как вы сейчас пытаетесь, никакого ускорения не добьётесь, т.к. на клиента пытаетесь данные все вытягивать, что просаживает производительнось
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37663038
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_men,

Век живи век учись
Код: vbnet
1.
cn_base.commandTimeOut

Спасибо Ребята за подсказки!
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37663063
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

Почему? Вроде как он на сервер пытается базу залить
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37663071
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем же таким грубым способом то?
на сервере есть специальные средства для этого.
-визарды импорта/экспорта
-bcp
-bulkcopy
-SSIS, наконец.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37663109
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
How to: Connect to a dBASE or Other DBF File (MS SQL Server 2008):
http://msdn.microsoft.com/en-us/library/aa337084.aspx

читайте
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37663449
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Все это хорошо только есть некоторые но:
1) у меня SQL2000
2) заливку отдаю в руки пользователей а им на сервере делать нечего, а соответственно и визордами не воспользуешся (во всяком случае я пока не знаю как пользователь в сети сможет его использовать со своей машины.
3) К моему стыду я слишком мало знаю, а вот литературы по таким вещам я покамест не нашел. Читаю форум и хелп.
4) чем метод который я применил плох? (спрашиваю в целях расширения кругозора и познаний)
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37663471
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

а чем плохо настроить соединение через ODBC конкретного компьютера пользователя и использовать это соединение?
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37663543
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Alex_men
> Все это хорошо только есть некоторые но:
> 1) у меня SQL2000
> 2) заливку отдаю в руки пользователей а им на сервере делать нечего, а соответственно и визордами не
> воспользуешся (во всяком случае я пока не знаю как пользователь в сети сможет его использовать со своей машины.
> ...


Хм, у меня похожая ситуация, я скачал отсюда
Microsoft OLE DB Provider for Visual FoxPro 9.0 и проставил его на сервере с SQL Server 2000. По
инструкции настроил связь, собственно вся связь - это указание пути к
папке с dfb и выбор Collation равный Collation базы приемника, дабы не прописывать из при каждом текстовом поле :) После
сделал ХП в которой два запроса, один на обновление, второй на вставку того что не обработалось при обновлении. Например
так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE  PROCEDURE [dbo].[load_directions] AS

/* Обновляем справочник продавцов */
/* Обновляем существующие данные */
UPDATE sellers
SET    name_seller = sp.naim
FROM   sellers s
       INNER JOIN dbf...spr_prod sp
            ON  s.okpo = sp.okpo

/* Все что не обновилось, вставляем */
INSERT INTO sellers
  (
    name_seller,
    okpo
  )
SELECT sp.naim,
       sp.okpo
FROM   dbf...spr_prod sp
WHERE  NOT EXISTS (
           SELECT *
           FROM   sellers s
           WHERE  sp.okpo = s.okpo
       )

GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


И пользователю досталась только кнопка, которая вызывает выполнение этой процедуры

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37663558
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос,
А файл опять же этой кнопкой копируете на сервер? или папку расшарили? Просто получение справочника входит в обязанности пользователя и не очень хотелось бы чтобы он дергал для такой ерунды как положить файл в нужную папку ИТ отдел.
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37663617
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Alex_men
> Игорь Горбонос,
> А файл опять же этой кнопкой копируете на сервер? или папку расшарили?

Папку расшарил

> Просто получение справочника входит в обязанности пользователя и не очень хотелось бы чтобы он дергал для такой
> ерунды как положить файл в нужную папку ИТ отдел.

У меня справочники получаются из 1с. И они так-же складываются в эту шару.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37663699
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,

+1

ТСу как раз это и надо сделать. практически готовое промышленное решение
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37664508
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос,

Хорошо, а вот клиентская часть (клиентское место может быть в другом городе). там своя база mdb там ведь хранимку такую не сделаешь? насколько я понимаю
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37664641
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда делайте репликацию, избавляйтесь от mdb, ставьте локальный sql express
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37664710
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

моя беда в том, что я не пока знаю как отредактировать скрипт инсталла чтобы развернуть базу, приаттачить ее и заполнить ее нужными данными. А передавать многостраничное описание для установки это не дело. Поэтому пока mdb и выбрал. сроки жмут :(
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37883368
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос описание внешних драйверов в разных операционках различается? Столкнулся с тем что запрос к выше обсуждаемой DBF работавший на ХР не хочет работать на 7-ке ни в какую. Говорит источник данных не найден и не определен драйвер по умолчанию
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37883421
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Alex_men
> Вопрос описание внешних драйверов в разных операционках различается? Столкнулся с тем что запрос к выше
> обсуждаемой DBF работавший на ХР не хочет работать на 7-ке ни в какую. Говорит источник данных не найден и не
> определен драйвер по умолчанию

Нет, все давно стандартизировано. Вариант только если 7-ка 64-bit тогда драйвера могут стоять тоже 64-х битные. Нужно
найти и поставить 32-х битные.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Есть ли способы ускорить процесс обновления справочника?
    #37883643
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос,

хм тогда надо проверить наличие драйверов и библиотек на новой машине. буду искать
...
Рейтинг: 0 / 0
73 сообщений из 73, показаны все 3 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Есть ли способы ускорить процесс обновления справочника?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]