powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Recordset
18 сообщений из 18, страница 1 из 1
Recordset
    #33427921
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.

Подскажите почему неработает?

Код: 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.
Private Sub Worksheet_Activate()
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim strCnnString As String
    Dim strSource As String
    
    strSource = ThisWorkbook.FullName
    
    ' ODBC.
    strCnnString = "DRIVER={Microsoft Excel Driver (*.xls)};" _
      & "ReadOnly=1;DBQ=" & strSource
    
    Set cnn = New ADODB.Connection
    
    cnn.Open strCnnString
    
     Set rst = cnn.Execute("SELECT * FROM [Sheet1$]table1 WHERE otdel = '01' AND data IS NULL")

    rst.Close
    cnn.Close

    Set rst = Nothing
    Set cnn = Nothing
End Sub
так работает
Set rst = cnn.Execute("SELECT * FROM [Sheet1$]table1 WHERE otdel = '01' ")
и так работает
Set rst = cnn.Execute("SELECT * FROM [Sheet1$]table1 WHERE data IS NULL")
...
Рейтинг: 0 / 0
Recordset
    #33429818
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
значит нет записей для условия
Код: plaintext
otdel = ' 01 ' AND data IS NULL
...
Рейтинг: 0 / 0
Recordset
    #33429897
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забавно но запись точно есть.
...
Рейтинг: 0 / 0
Recordset
    #33429978
Попробовал. Все нормально выбирает.
...
Рейтинг: 0 / 0
Recordset
    #33430164
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2Попробовал. Все нормально выбирает.

Покажи пожалуста строку set может у меня синтаксис неправильный
...
Рейтинг: 0 / 0
Recordset
    #33430170
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Recordset
    #33430272
Код: 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.
Private Sub Worksheet_Activate()
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim strCnnString As String
    Dim strSource As String
    
    strSource = ThisWorkbook.FullName
    
    ' ODBC.
    strCnnString = "DRIVER={Microsoft Excel Driver (*.xls)};" _
      & "ReadOnly=1;DBQ=" & strSource
    
    Set cnn = New ADODB.Connection
    
    cnn.Open strCnnString
    
    Set rst = cnn.Execute("SELECT * FROM [Sheet1$]table1 WHERE otdel = '01' AND data IS NULL")
    
    Do Until rst.EOF
        Debug.Print rst.Fields( 0 ); " "; rst.Fields( 1 )
        rst.MoveNext
    Loop

    rst.Close
    cnn.Close

    Set rst = Nothing
    Set cnn = Nothing
End Sub

Зачем использовать ODBC подключение, если нужно вытащить данные с другого листа этой же книги?
...
Рейтинг: 0 / 0
Recordset
    #33430277
Результат:

Код: plaintext
01 Null
...
Рейтинг: 0 / 0
Recordset
    #33430318
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2
Зачем использовать ODBC подключение, если нужно вытащить данные с другого листа этой же книги?

Мысль была такая что бы запихнуть большую таблицу в рекордсет и делать нужные выборки

сейчас это куча формул типа
={СУММ(ЕСЛИ(Sheet1!$A$2:$A$30000=A3;ЕСЛИ(ЕПУСТО(Sheet1!$E$2:$E$30000);1;0)))}
памяти нехватает, пересчет ведется долго
...
Рейтинг: 0 / 0
Recordset
    #33430700
Попробуй поставить MDAC 2.7 или выше.
...
Рейтинг: 0 / 0
Recordset
    #33430797
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2Попробуй поставить MDAC 2.7 или выше.

К сожелению ничего поставить не могу
пришлось бы ставить на очень много машин в компании ~ 500 машин
политика компании "пользоваться только теми продуктами которые купили"
ну а покупать для такой проблемы никто не будет
...
Рейтинг: 0 / 0
Recordset
    #33430890
5631
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решений много.
1). Достань дешевую СУБД (Access,FoxPro).
2). Достань бесплатную СУБД(...).
3). Поставь бесплатный Office с бесплатной СУБД (Open Office).
...
Рейтинг: 0 / 0
Recordset
    #33430909
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5631Решений много.
1). Достань дешевую СУБД (Access,FoxPro).
2). Достань бесплатную СУБД(...).
3). Поставь бесплатный Office с бесплатной СУБД (Open Office).

не хочу остатся без работы
...
Рейтинг: 0 / 0
Recordset
    #33432080
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkodor а попробуйте выполнить ваш запрос через Microsoft Query
(Данные-Импорт внешних данных-Создать запрос)

в принципе, может и использовать MS Query для ваших нужд?
...
Рейтинг: 0 / 0
Recordset
    #33432560
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Екцель не правильно определяет типы полей, и как следствие, 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
...
Рейтинг: 0 / 0
Recordset
    #33433470
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senin Viktor1. Екцель не правильно определяет типы полей, и как следствие, NULL'ы там, где не совпадает формат. Выхода из этого нет , если в первых строках будут пустые значения. Так же нельзя и насильно указать тип поля. Мой способ - ниже данных я вводил псевдо данные, нужных форматов, в кол-ве 25 или 16 строк (вроде). Запрос выбирал стркои не с 1 по N, а с N по 1. Из рекодсета выбрасывал псевдоданные. Если есть возможность - то можно сделать и сверху данных (например скрытые строки). Как плюс можно сделать нужное название полей.

это не подходит
т.к. юзуют этот фаил многие (всем не обьяснить что там лишние строки)
Senin Viktor
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

а если DAO recordset?
Возможно?
Dim reRecordSet As DAO.Recordset
Dim reSortRecordSet As DAO.Recordset
...
Рейтинг: 0 / 0
Recordset
    #33433525
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkodor
это не подходит
т.к. юзуют этот фаил многие (всем не обьяснить что там лишние строки)


Подходит. Развивайте фантазию :) Я же написал про темп-файл
Другого способа я не нашел.

vkodor
а если DAO recordset?
Возможно?
Dim reRecordSet As DAO.Recordset
Dim reSortRecordSet As DAO.Recordset

Если это про Memory Leak, то не знаю. Последний раз юзал ДАО "100 лет тому назад" (с) Ч.Тортилла
А так попробуйте - потом раскажите
...
Рейтинг: 0 / 0
Recordset
    #33433973
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senin Viktor vkodor
это не подходит
т.к. юзуют этот фаил многие (всем не обьяснить что там лишние строки)


Подходит. Развивайте фантазию :) Я же написал про темп-файл
Другого способа я не нашел.

vkodor
а если DAO recordset?
Возможно?
Dim reRecordSet As DAO.Recordset
Dim reSortRecordSet As DAO.Recordset

Если это про Memory Leak, то не знаю. Последний раз юзал ДАО "100 лет тому назад" (с) Ч.Тортилла
А так попробуйте - потом раскажите

Спасибо буду пробовать.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Recordset
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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