Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

внешние данные dbf

464
10 октября 2003 года
WildAn
147 / / 19.05.2003
Кто-нибудь работает с внешними данными из файлов dbf? Построение sql-запросов
Как строить оптимально такие запросы А то обработка и возврат данных затягивается надолго Дело в Экселе
478
14 октября 2003 года
XtreamAll
279 / / 01.10.2003
Цитата:
Originally posted by WildAn
Кто-нибудь работает с внешними данными из файлов dbf? Построение sql-запросов
Как строить оптимально такие запросы А то обработка и возврат данных затягивается надолго Дело в Экселе

478
14 октября 2003 года
XtreamAll
279 / / 01.10.2003
Цитата:
Originally posted by WildAn
Кто-нибудь работает с внешними данными из файлов dbf? Построение sql-запросов
Как строить оптимально такие запросы А то обработка и возврат данных затягивается надолго Дело в Экселе



Я тоже занимаюсь этим вопросом.
Программы на VBA под Excel вообще работают быстрее, если поотключать всю авто-хрень на время выполнения программы:

With Application
.Calculation = xlManual
.CalculateBeforeSave = False
.EnableAnimations = False
.ErrorCheckingOptions.BackgroundChecking = False
End With

Если не пробовал - попробуй...

258
14 октября 2003 года
SergeySV
1.5K / / 19.03.2003
тогда здесь наоборот, сюда добавим: Application.ScreenUpdating = False
464
16 октября 2003 года
WildAn
147 / / 19.05.2003
Конкретизирую. Создаю запрос в MICROSOFT QUERY. Там отображение данных происходит относительно быстро А вот возврат данных в excel занимает много часов В чем тут дело и как можно решить эту проблему?
265
16 октября 2003 года
Gauss
975 / / 20.02.2000
Цитата:
Originally posted by WildAn
Конкретизирую. Создаю запрос в MICROSOFT QUERY. Там отображение данных происходит относительно быстро А вот возврат данных в excel занимает много часов В чем тут дело и как можно решить эту проблему?

Здесь может быть очень много факторов влияющих на работу, ну например: состояние операционной системы, забитость реестра всякой чушью, недостаток оперативной памяти, прочие проблемы с быстродействием железа, размер файла xls (это может влиять на быстродействие очень значительно), наличие значительного количества зависящих формул выстроенных в цепочки, ну итд. если можно выложи файлы на посмотреть, попробовать.

464
16 октября 2003 года
WildAn
147 / / 19.05.2003
Цитата:
Originally posted by Gauss
Здесь может быть очень много факторов влияющих на работу, ну например: состояние операционной системы, забитость реестра всякой чушью, недостаток оперативной памяти, прочие проблемы с быстродействием железа, размер файла xls (это может влиять на быстродействие очень значительно), наличие значительного количества зависящих формул выстроенных в цепочки, ну итд. если можно выложи файлы на посмотреть, попробовать.



Оперативка 128 Мб, проц 1700 Формул зависящих нет. Открываю новую книгу, сразу внешние данные/создать запрос и связываю 5-6 таблиц Три из них большие порядка 25000 строк, остальные - справочники. QUERY делает запрос в теч 2-3 мин А вот возврат данных в эксель....

265
16 октября 2003 года
Gauss
975 / / 20.02.2000
Цитата:
Originally posted by WildAn


Оперативка 128 Мб, проц 1700 Формул зависящих нет. Открываю новую книгу, сразу внешние данные/создать запрос и связываю 5-6 таблиц Три из них большие порядка 25000 строк, остальные - справочники. QUERY делает запрос в теч 2-3 мин А вот возврат данных в эксель....


Есть небольшая разница между тем как работает Query и Excel, в Query тебе показывают только страницу данных и по мере необходимости подкачивают данные, Excel же закачивает все данные к себе, посему 5-6 таблиц 3 из которых 25000 строк - это очень много, попробуй проделать то-же самое на компе с большим количеством памяти (хотя-бы 256), я думаю что быстродействие возрастет значительно!

464
16 октября 2003 года
WildAn
147 / / 19.05.2003
Цитата:
Originally posted by Gauss

Есть небольшая разница между тем как работает Query и Excel, в Query тебе показывают только страницу данных и по мере необходимости подкачивают данные, Excel же закачивает все данные к себе, посему 5-6 таблиц 3 из которых 25000 строк - это очень много, попробуй проделать то-же самое на компе с большим количеством памяти (хотя-бы 256), я думаю что быстродействие возрастет значительно!


А вот к другому железу добраться не могу :(

265
16 октября 2003 года
Gauss
975 / / 20.02.2000
Цитата:
Originally posted by WildAn

А вот к другому железу добраться не могу :(

ты из какого города?

464
16 октября 2003 года
WildAn
147 / / 19.05.2003
Цитата:
Originally posted by Gauss
ты из какого города?


Уляновск. Просто не охота бабки ради этого тратить :-) Тем более на работе.

265
16 октября 2003 года
Gauss
975 / / 20.02.2000
Цитата:
Originally posted by WildAn

Уляновск. Просто не охота бабки ради этого тратить :-) Тем более на работе.

Жаль, если-бы ты был из Москвы, я нашел-бы лишний DIMM из своих запасов и дал поиграть........... :(

464
16 октября 2003 года
WildAn
147 / / 19.05.2003
Цитата:
Originally posted by Gauss
Жаль, если-бы ты был из Москвы, я нашел-бы лишний DIMM из своих запасов и дал поиграть........... :(


Да, жаль Будем искать решение. Хотя времени нет, блин

478
16 октября 2003 года
XtreamAll
279 / / 01.10.2003
Цитата:
Originally posted by WildAn

Да, жаль Будем искать решение. Хотя времени нет, блин


:???: А если попробовать выгрузить нужные тебе данные в какую-нибудь промежуточную таблицу (*.dbf например, ее просто Excel легко открывает)? А потом импортируй эти данные в Excel и делай там с ними чего тебе надо!:-?

459
18 октября 2003 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by WildAn

Да, жаль Будем искать решение. Хотя времени нет, блин



А все-таки ты используешь то, что предлагал SergeySV ?

Application.ScreenUpdating = False
....
Application.ScreenUpdating = True

Мне это ускоряет работу с объемными данными на порядки.:x

5.3K
18 октября 2003 года
abcd
5 / / 14.09.2003
Цитата:
Originally posted by WildAn
Кто-нибудь работает с внешними данными из файлов dbf? Построение sql-запросов
Как строить оптимально такие запросы А то обработка и возврат данных затягивается надолго Дело в Экселе




' Попробуй использовать DAO, это должно значительно ускорить работу
'больших баз dBase у меня нет, пробовал на базе Борей.mdb
'831 запись возвращает менее чем за секунду
'Operating System Windows 2000 v5.1.2600
'CPU Model/Name x86 Family 6 Model 8 Stepping 1 with MMX(tm) Technology
'CPU Speed 1403MHz
'Total Physical Memory 512MB


Sub CopyRecords()
'Перед использованием обязательно установить ссылку на Microsoft DAO любой версии!!!
'в папке C:\Program Files\Common Files\Microsoft Shared\DAO
'должны быть библиотеки dao350.dll или dao360.dll
'они копируются при инсталяции Microsoft Office

Dim db As Database, rec As Recordset
Dim iCols As Integer, dPath As String
t = Timer
'путь к базе данных (файлам dbf)
dPath = "c:\Program Files\Microsoft Office\Office10\1049"
'Открываем базу данных
Set db = OpenDatabase(dPath, 0, 0, "dBase IV")
'Открываем набор записей из базы
'текст запроса хранится в Sheets("лист2").Cells(1, 1), в модуле неудобно
'можно вместо Sheets("лист2").Cells(1, 1).Value
Set rec = db.OpenRecordset(Sheets("лист2").Cells(1, 1).Value, dbOpenDynaset)
'для упрощения написания устанавливаем объектную переменную (ссылку на лист)
Set ws = Worksheets("лист1")
'Цикл по всем полям, в котором выводим имена полей
For iCols = 0 To rec.Fields.Count - 1
ws.Cells(1, iCols + 1).Value = rec.Fields(iCols).Name
Next
'копируем набор данных начиная с ячейки "A2"
ws.Range("A2").CopyFromRecordset rec
'Закрываем набор данных
rec.Close
'Закрываем базу данных
db.Close
MsgBox "Затрачено " & Timer - t & "секунд", vbOKOnly, "Затраченное время"
End Sub

464
20 октября 2003 года
WildAn
147 / / 19.05.2003
Цитата:
Originally posted by abcd

Sub CopyRecords()
Dim db As Database, rec As Recordset
Dim iCols As Integer, dPath As String
t = Timer
'путь к базе данных (файлам dbf)
dPath = "c:\Program Files\Microsoft Office\Office10\1049"
'Открываем базу данных
Set db = OpenDatabase(dPath, 0, 0, "dBase IV")....
End Sub


А если таблицы между собой увязываются по ключевым полям? НАпример, основная таблица содержит только определенные коды, а в других таблицах dbf есть словари к этим кодам. Пусть основная (I) таблица dbf содержит поля: 1 поставщики(код), 2 продукция (код) II dbf-таблица содержит: 1 код поставщика, 2 наименование поставщика. III dbf-таблица содержит: 1 код продукции, 2 наименование продукции.
В итоге мне нужно вывести Не коды поставщиков и продукции, а их полные наименования.
Вот Надеюсь понятно

258
20 октября 2003 года
SergeySV
1.5K / / 19.03.2003
Хм, а ты разве не так делал в начале. Я думал ты уже пробовал открывать recordset на SQL запросе....

Но если нет, то попробуй так. Как правильно уже писали открываешь recordset (можно через DAO, а можно через более современный ADO - типа универсальный DAO для все баз данных), а в качестве источника задаешь строку SQL-запроса. В твоем случае нужно составить сложный SQL запрос: говоришь всякие связанные таблицы, значит надо юзать конструкцию - INNER JOIN (Загрузи Access, загрузи nnelf твои реальные таблицы и в конструкторе запросов составь итоговый запрос, в нем всеж полегче работать новичкам, например INNER JOINон сам автоматом добавит, когда увидит, что твои таблицы связаны)

На счет заполнения потом ячеек из recordset. Тут такой момент: необходимо контролировать тип данных, если просто брать значение поля в recordset и пихать его ячейку Excel, то тогда Excel будет заниматься неявным преобразованием и далеко не всегда удачно, так что последи за ним.
464
20 октября 2003 года
WildAn
147 / / 19.05.2003
Цитата:
Originally posted by SergeySV
Хм, а ты разве не так делал в начале. Я думал ты уже пробовал открывать recordset на SQL запросе....


Никогда не пользовался Можно примерчик с пояснением и использованием SQL-запроса?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог