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

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
SQL - запрос к текущей, открытой книге Excel? Возможно?
    #34395061
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
...
Рейтинг: 0 / 0
SQL - запрос к текущей, открытой книге Excel? Возможно?
    #34395091
Flaer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То vkodor :
Именно это меня и остановило, думал, что есть другой способ
...
Рейтинг: 0 / 0
SQL - запрос к текущей, открытой книге Excel? Возможно?
    #34395304
Flaer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)Лови пример

Пример, конечно хороший, но после открытия подключения, создаётся копия книги, которая не удаляется после закрытия :
Код: plaintext
1.
    cn.Close
    Set cn = Nothing
К тому же, после каждого закпуска в project explorer-появляются новые проекты, которые так же не удаляются автоматом.
...
Рейтинг: 0 / 0
SQL - запрос к текущей, открытой книге Excel? Возможно?
    #34395721
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SQL - запрос к текущей, открытой книге Excel? Возможно?
    #34395734
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flaer KL (XL)Лови пример

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

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

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
SQL - запрос к текущей, открытой книге Excel? Возможно?
    #34395773
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Встретился как-то с тем, что ADO не читал одну колонку из файла (если кто знает в чем дело, просветите, пжл.). Если файл немного изменить (даже непредсказуемо, что. Например, закрасить цветом колонку), то читать будет. Вот оригинал файла, не читается колонка E.
...
Рейтинг: 0 / 0
SQL - запрос к текущей, открытой книге Excel? Возможно?
    #34396305
Fffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня вот так вот прочиталось все сразу.
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
SQL - запрос к текущей, открытой книге Excel? Возможно?
    #34396369
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я использовал вот этот код

Код: 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
SQL - запрос к текущей, открытой книге Excel? Возможно?
    #34396380
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я использовал вот этот код

Код: 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
SQL - запрос к текущей, открытой книге Excel? Возможно?
    #34397269
Flaer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)
Думаю, что у тебя Excel более ранней версии. У меня в Excel 2003 ничего этого не происходит.

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

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

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

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


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