Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / SQL - запрос к текущей, открытой книге Excel? Возможно? / 13 сообщений из 13, страница 1 из 1
15.03.2007, 20:09:28
    #34394627
Flaer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL - запрос к текущей, открытой книге Excel? Возможно?
...
Рейтинг: 0 / 0
15.03.2007, 20:20:47
    #34394655
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL - запрос к текущей, открытой книге Excel? Возможно?
Лови пример

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
16.03.2007, 09:00:47
    #34395061
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL - запрос к текущей, открытой книге Excel? Возможно?
Senin Viktor1. Екцель не правильно определяет типы полей, и как следствие, NULL'ы там, где не совпадает формат. Выхода из этого нет , если в первых строках будут пустые значения. Так же нельзя и насильно указать тип поля. Мой способ - ниже данных я вводил псевдо данные, нужных форматов, в кол-ве 25 или 16 строк (вроде). Запрос выбирал стркои не с 1 по N, а с N по 1. Из рекодсета выбрасывал псевдоданные. Если есть возможность - то можно сделать и сверху данных (например скрытые строки). Как плюс можно сделать нужное название полей.

2. Обращаться через ADO в открытый файла екцеля нельзя - происходит утечка памяти. Эта ошибка описана в MSDN "BUG: Memory leak occurs when you query an open Excel worksheet by using ActiveX Data Objects (ADO)" #319998
Код: plaintext
When you retrieve a Microsoft ActiveX Data Objects (ADO) Recordset from an Excel worksheet that is open in Excel, a memory leak occurs in the Excel process. Repeated queries may eventually cause Excel to run out of memory and raise an error, or cause Excel to stop responding. 
Выход: юзать просто файл (не открытый). Т.е. например, скопировать данные в темп-файл, закрыть его и уже юзать ADO
Recordset
...
Рейтинг: 0 / 0
16.03.2007, 09:16:17
    #34395091
Flaer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL - запрос к текущей, открытой книге Excel? Возможно?
То vkodor :
Именно это меня и остановило, думал, что есть другой способ
...
Рейтинг: 0 / 0
16.03.2007, 10:18:04
    #34395304
Flaer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL - запрос к текущей, открытой книге Excel? Возможно?
KL (XL)Лови пример

Пример, конечно хороший, но после открытия подключения, создаётся копия книги, которая не удаляется после закрытия :
Код: plaintext
1.
    cn.Close
    Set cn = Nothing
К тому же, после каждого закпуска в project explorer-появляются новые проекты, которые так же не удаляются автоматом.
...
Рейтинг: 0 / 0
16.03.2007, 13:49:04
    #34395721
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL - запрос к текущей, открытой книге Excel? Возможно?
vkodor Senin Viktor1. Екцель не правильно определяет типы полей, и как следствие, NULL\'ы там, где не совпадает формат. Выхода из этого нет , если в первых строках будут пустые значения. Так же нельзя и насильно указать тип поля. Мой способ - ниже данных я вводил псевдо данные, нужных форматов, в кол-ве 25 или 16 строк (вроде). Запрос выбирал стркои не с 1 по N, а с N по 1. Из рекодсета выбрасывал псевдоданные. Если есть возможность - то можно сделать и сверху данных (например скрытые строки). Как плюс можно сделать нужное название полей.

2. Обращаться через ADO в открытый файла екцеля нельзя - происходит утечка памяти. Эта ошибка описана в MSDN "BUG: Memory leak occurs when you query an open Excel worksheet by using ActiveX Data Objects (ADO)" #319998
Код: plaintext
When you retrieve a Microsoft ActiveX Data Objects (ADO) Recordset from an Excel worksheet that is open in Excel, a memory leak occurs in the Excel process. Repeated queries may eventually cause Excel to run out of memory and raise an error, or cause Excel to stop responding. 
Выход: юзать просто файл (не открытый). Т.е. например, скопировать данные в темп-файл, закрыть его и уже юзать ADO
Recordset

1. Это надо читать так: если в первых восьми (8) строках будут пустые значения, ... и т.д. /topic/354960#3317980

2. Memory Leak Bug. В Excel 2003 этого, похоже, нет. Статья относится к версиям 97-2002 и у меня в Excel 2003 проблема не наблюдается.

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
16.03.2007, 13:50:59
    #34395734
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL - запрос к текущей, открытой книге Excel? Возможно?
Flaer KL (XL)Лови пример

Пример, конечно хороший, но после открытия подключения, создаётся копия книги, которая не удаляется после закрытия :
Код: plaintext
1.
    cn.Close
    Set cn = Nothing
К тому же, после каждого закпуска в project explorer-появляются новые проекты, которые так же не удаляются автоматом.

Думаю, что у тебя Excel более ранней версии. У меня в Excel 2003 ничего этого не происходит.

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
16.03.2007, 13:59:37
    #34395773
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL - запрос к текущей, открытой книге Excel? Возможно?
Встретился как-то с тем, что ADO не читал одну колонку из файла (если кто знает в чем дело, просветите, пжл.). Если файл немного изменить (даже непредсказуемо, что. Например, закрасить цветом колонку), то читать будет. Вот оригинал файла, не читается колонка E.
...
Рейтинг: 0 / 0
16.03.2007, 15:44:19
    #34396305
Fffffffffff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL - запрос к текущей, открытой книге Excel? Возможно?
У меня вот так вот прочиталось все сразу.
Dim cnn As New ADODB.Connection, rst As New ADODB.Recordset
strNameFile = ThisWorkbook.FullName
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strNameFile & _
"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1"""
cnn.Open strConnect
rst.Open "select * from [Стандартные$]", cnn
Sheets("Лист1").Range("A1").CopyFromRecordset rst
...
Рейтинг: 0 / 0
16.03.2007, 15:58:43
    #34396369
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL - запрос к текущей, открытой книге Excel? Возможно?
я использовал вот этот код

Код: plaintext
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.
Sub test()
    CopyRange TargetRange:=Range("A1"), _
                SourceFile:="06EHRG190_4.xls", _
                SourceRange:="A1:Z10000"
End Sub


Public Function CopyRange(TargetRange As Range, SourceFile As String, SourceRange As String) As Boolean
'В файле может быть несколько листов, но возможность чтения с нескольких листов не реализована
'TargetRange - диапазон в открытой книге, в который копировать данные
'SourceFile - полное имя файла XLS, из которого копировать данные
'SourceRange - адрес диапазона SourceFile, из которого нужно копировать данные
Dim cnn As ADODB.Connection
    Dim rsT As ADODB.Recordset
    
    Set cnn = New ADODB.Connection
    Set rsT = New ADODB.Recordset
    
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & SourceFile & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"""
    
    rsT.Open "SELECT * FROM [" & SourceRange & "]", cnn
    
    TargetRange.CopyFromRecordset rsT
    
    rsT.Close
    cnn.Close
    
    Set rsT = Nothing
    Set cnn = Nothing
End Function
...
Рейтинг: 0 / 0
16.03.2007, 16:00:41
    #34396380
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL - запрос к текущей, открытой книге Excel? Возможно?
я использовал вот этот код

Код: plaintext
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.
Sub test()
    CopyRange TargetRange:=Range("A1"), _
                SourceFile:="06EHRG190_4.xls", _
                SourceRange:="A1:Z10000"
End Sub


Public Function CopyRange(TargetRange As Range, SourceFile As String, SourceRange As String) As Boolean
'В файле может быть несколько листов, но возможность чтения с нескольких листов не реализована
'TargetRange - диапазон в открытой книге, в который копировать данные
'SourceFile - полное имя файла XLS, из которого копировать данные
'SourceRange - адрес диапазона SourceFile, из которого нужно копировать данные
Dim cnn As ADODB.Connection
    Dim rsT As ADODB.Recordset
    
    Set cnn = New ADODB.Connection
    Set rsT = New ADODB.Recordset
    
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & SourceFile & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"""
    
    rsT.Open "SELECT * FROM [" & SourceRange & "]", cnn
    
    TargetRange.CopyFromRecordset rsT
    
    rsT.Close
    cnn.Close
    
    Set rsT = Nothing
    Set cnn = Nothing
End Function
...
Рейтинг: 0 / 0
16.03.2007, 21:31:26
    #34397269
Flaer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL - запрос к текущей, открытой книге Excel? Возможно?
KL (XL)
Думаю, что у тебя Excel более ранней версии. У меня в Excel 2003 ничего этого не происходит.

Да нет, Excel у меня 2003.
Если подскажешь способ засунуть в пост картинку - прицеплю скрин
...
Рейтинг: 0 / 0
16.03.2007, 22:50:14
    #34397331
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL - запрос к текущей, открытой книге Excel? Возможно?
FlaerДа нет, Excel у меня 2003.
Если подскажешь способ засунуть в пост картинку - прицеплю скрин

Точно также как я засовываю мои примеры - с пом кнопки Browse... внизу сообщения прямо под кнопкой Опубликовать , только в твоем случае будет файл *.jpg :-)

А ты часом код не менял? Прямо так и запускал его в моем файле как он есть?

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / SQL - запрос к текущей, открытой книге Excel? Возможно? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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