Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Оптимизация переноса данных из одной таблицы в другую.
 
 автор: Improver   (07.09.2006 в 00:00)
 
 

Подскажите, плз., по сабжу...
На базе одного из примеров сделал так (с сокращениями):

-----------
Sub transfer(strTableNameS As String, strTableNameN As String)

Dim db As Database
Dim rss As DAO.Recordset
Dim rsn As DAO.Recordset
Dim str As String
Dim lngRecordCount As Long
Dim fldField As DAO.Field

Set db = CurrentDb

Set rss = db.OpenRecordset(strTableNameS, dbOpenDynaset)
If rss.RecordCount <> 0 Then
Set rsn = db.OpenRecordset(strTableNameN, dbOpenDynaset)

rss.MoveLast
lngRecordCount = rss.RecordCount
rss.MoveFirst
Debug.Print "Количество записей в таблице """ & _
strTableNameS & """: " & lngRecordCount
Do Until rss.EOF
rsn.AddNew
For Each fldField In rss.Fields
If fldField.Value <> "" Then
rsn(fldField.Name) = fldField.Value
End If
Next fldField
rsn.Update
rss.MoveNext
Loop
rsn.Close
Else
Debug.Print "Таблица """ & strTableNameS & _
""" не содержит записей."
End If

Debug.Print "Конец обработки."
rss.Close
db.Close

Exit Sub

End Sub
------------

Скорость обработки -- тысяча строк таблицы за 9,5 минуты! А таблицы есть и в 100 тысяч строк...

Подскажите, как это можно оптимизировать, т.е. ускорить обработку?

  Ответить  
 
 автор: osmor   (07.09.2006 в 00:00)
 
 

sql запрос INSERT INTO таблица2
SELECT *
FROM таблица1;

добавит все записи из таблица1 в таблицу2

  Ответить  
 
 автор: osmor   (07.09.2006 в 00:00)
 
 

и скажите где Вы такой пример взяли....

  Ответить  
 
 автор: Improver   (08.09.2006 в 00:00)
 
 

Re: и скажите где Вы такой пример взяли.... Да тут же и взял, как за основу это: http://hiprog.com/access/article.asp?id=224
Писатель из меня еще тот...

  Ответить  
 
 автор: osmor   (08.09.2006 в 00:00)
 
 

ну это ж просто демонстрация работы с Recordset... его нельзя так буквально

  Ответить  
 
 автор: Improver   (25.09.2006 в 10:02)
 
 

А как надо? Что в приведенном фрагменте не так?

  Ответить  
 
 автор: Improver   (08.09.2006 в 00:00)
 
 

Re: sql запрос Хм... Надо будет попробовать...
А если еще понадобится поля изменять? (некоторые таблицы не совсем совпадают)

  Ответить  
 
 автор: osmor   (08.09.2006 в 00:00)
 
 

попробуте в конструкторе запросов построить запрос на добавление + Help по SQL если структура таблиц не одинаковая, тогда нужно будет указывать соответствие полей

  Ответить  
 
 автор: Improver   (25.09.2006 в 10:01)
 
 

Пока форум был недоступен испробовал несколько разных методов, работа в настоящее время фактически выполнена. Да, еще забыл сказать, что таблицы эти подключаются через ODBC. Вот выводы:
1. SQL-запрос, как это ни странно, ничуть не быстрее приведенного выше скрипта.
2. Если юзать ADODB вместо DAO, с прямым подключением к базам и промежуточным кешем и пакетной обработкой, то скорость можно поднять раз в десять, но он может обработать только часть таблиц, некоторые, по стечению обстоятельств, самые "жирные" не берет -- ошибка ODBC. :-(
3. Импорт исходной таблицы в Access дает повышение скорости обработки примерно на 25-50%, хотя и занимает определенное время.
4. Размещение баз на RAM-диске позволяет поднять скорость обработки примерно в четыре раза.

И самое неприятное -- при любом методе получаем неприятный вылет всего аццесса, как правило после 10-20 тыс. обработанных строк. Приходится продолжать с последней обработанной записи...

  Ответить  
 
 автор: osmor   (25.09.2006 в 10:09)   личное сообщение
 
 

Кончено ODBC несколько меняет дело, но не сильно...
По моим представлениям, запрос должет работать на пару порядков быстрее скрипта(ну при ODBC возможно на порядок)
ПРи импорте данных в ACCESS уж точно запрос должен быть значительно быстрее.
Какой источник данных? Если Вы используете ADODB, то ван не нужно использовать ODBC (это альтернативные способы доступа)
Используйте всесто связанных таблиц "запрос к серверу", тогда работать будет быстрее, но запросы нужно будет писать используя синтаксис источника (т.е. если это MySQL то синтаксис запроса должен быть MYsql, а не ACCESS (JET))

  Ответить  
 
 автор: Improver   (04.10.2006 в 08:11)
 
 

>Какой источник данных?

TopSpeed ODBC Driver. Базы данных были из Clarion.

>Если Вы используете ADODB, ...... Используйте всесто связанных
>таблиц "запрос к серверу", тогда работать будет быстрее, но запросы
>нужно будет писать используя синтаксис источника (т.е. если это MySQL то
>синтаксис запроса должен быть MYsql, а не ACCESS (JET))

Так, в принципе, и делал. Работет на порядок быстрее, но на некоторых таблицах вылетает ошибка.

  Ответить  
 
 автор: osmor   (04.10.2006 в 08:25)   личное сообщение
 
 

>Так, в принципе, и делал. Работет на порядок быстрее, но на некоторых таблицах вылетает >ошибка.
Про Clarion знаю только то, что он есть ...
А какая ошибка?

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList