Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/ADO - класс для работы с данными Excel при помощи SQL - Мир MS Excel

Старая форма входа
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: _Boroda_, китин  
ADO - класс для работы с данными Excel при помощи SQL
nerv Дата: Понедельник, 08.04.2013, 12:54 | Сообщение № 1
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Всем привет!

Не то, чтобы готовое решение, но тем не менее...
Цель - простота и удобство работы с SQL из Excel.
Текущая версия 0.3

Методы:
  • Create - создает объект подключения. Автоматически вызывается при инициализации.
  • Connect - открывает соединение. Автоматически вызывается при запросе.
  • Destroy - уничтожает объект подключения и объект записей. Вызывается автоматически при выходе из программы.
  • Disconnect - закрывает открытые записи и подключения. Вызывается автоматически при выходе из программы.
  • Query - выполняет SQL запрос. Результат запроса помещается в объект Recordset. Возвращает время, когда был выполнен запрос.

Свойства:
  • Connection - объект соединения
  • Recordset - результат выполнения запроса
  • DataSoure - источник данных. Полное имя книги эксель.
  • Header - учитывать заголовки (да/нет). По умолчанию нет. В этом случае имена полей назначаются автоматически F1 ... Fn. Если да, первая строка диапазона считается заголовком поля.


Пример работы
[vba]
Код
Sub Example()
      Dim ADO As New ADO  ' Создаем экземпляр класса
        
      ADO.Query ("SELECT F1 FROM [Лист1$];")
      Range("E1").CopyFromRecordset ADO.Recordset
        
      ADO.Query ("SELECT F2 FROM [Лист1$];")
      Range("F1").CopyFromRecordset ADO.Recordset
        
      ' Закрываем соединение, чтобы не висело : )
      ADO.Disconnect
        
      ADO.Query ("SELECT F1 FROM [Лист1$] UNION SELECT F2 FROM [Лист1$];")
      Range("G1").CopyFromRecordset ADO.Recordset
        
      ' Тут автоматически закроется соединение
      ' и уничтожиться объекты Recordset и Connection
End Sub
[/vba]
К сообщению приложен файл: ADO.zip (17.0 Kb)


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Понедельник, 08.04.2013, 14:36
 
Ответить
СообщениеВсем привет!

Не то, чтобы готовое решение, но тем не менее...
Цель - простота и удобство работы с SQL из Excel.
Текущая версия 0.3

Методы:
  • Create - создает объект подключения. Автоматически вызывается при инициализации.
  • Connect - открывает соединение. Автоматически вызывается при запросе.
  • Destroy - уничтожает объект подключения и объект записей. Вызывается автоматически при выходе из программы.
  • Disconnect - закрывает открытые записи и подключения. Вызывается автоматически при выходе из программы.
  • Query - выполняет SQL запрос. Результат запроса помещается в объект Recordset. Возвращает время, когда был выполнен запрос.

Свойства:
  • Connection - объект соединения
  • Recordset - результат выполнения запроса
  • DataSoure - источник данных. Полное имя книги эксель.
  • Header - учитывать заголовки (да/нет). По умолчанию нет. В этом случае имена полей назначаются автоматически F1 ... Fn. Если да, первая строка диапазона считается заголовком поля.


Пример работы
[vba]
Код
Sub Example()
      Dim ADO As New ADO  ' Создаем экземпляр класса
        
      ADO.Query ("SELECT F1 FROM [Лист1$];")
      Range("E1").CopyFromRecordset ADO.Recordset
        
      ADO.Query ("SELECT F2 FROM [Лист1$];")
      Range("F1").CopyFromRecordset ADO.Recordset
        
      ' Закрываем соединение, чтобы не висело : )
      ADO.Disconnect
        
      ADO.Query ("SELECT F1 FROM [Лист1$] UNION SELECT F2 FROM [Лист1$];")
      Range("G1").CopyFromRecordset ADO.Recordset
        
      ' Тут автоматически закроется соединение
      ' и уничтожиться объекты Recordset и Connection
End Sub
[/vba]

Автор - nerv
Дата добавления - 08.04.2013 в 12:54
Gustav Дата: Понедельник, 08.04.2013, 13:50 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Цитата (nerv)
Цель - простота и удобство работы с SQL из Excel.

не "с SQL из Excel", а "с данными Excel при помощи SQL" - именно в этом, мне кажется, офигенная фишка подобного подхода!

Есть и ограничение у этого подхода в принципе, которое иногда бывает критичным - можно работать только с заранее СОХРАНЕННЫМИ на диске рабочими книгами.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Цитата (nerv)
Цель - простота и удобство работы с SQL из Excel.

не "с SQL из Excel", а "с данными Excel при помощи SQL" - именно в этом, мне кажется, офигенная фишка подобного подхода!

Есть и ограничение у этого подхода в принципе, которое иногда бывает критичным - можно работать только с заранее СОХРАНЕННЫМИ на диске рабочими книгами.

Автор - Gustav
Дата добавления - 08.04.2013 в 13:50
nerv Дата: Понедельник, 08.04.2013, 14:38 | Сообщение № 3
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Цитата (Gustav)
не "с SQL из Excel", а "с данными Excel при помощи SQL"

спасибо, исправил

Цитата (Gustav)
Есть и ограничение у этого подхода в принципе, которое иногда бывает критичным - можно работать только с заранее СОХРАНЕННЫМИ на диске рабочими книгами.

будем иметь ввиду


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
Цитата (Gustav)
не "с SQL из Excel", а "с данными Excel при помощи SQL"

спасибо, исправил

Цитата (Gustav)
Есть и ограничение у этого подхода в принципе, которое иногда бывает критичным - можно работать только с заранее СОХРАНЕННЫМИ на диске рабочими книгами.

будем иметь ввиду

Автор - nerv
Дата добавления - 08.04.2013 в 14:38
ikki Дата: Понедельник, 08.04.2013, 14:39 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
еще одно ограничение: полная невозможность использовать DELETE для таблиц Excel.
я совсем недавно споткнулся об эти грабли и моё огорчение ещё не развеялось.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениееще одно ограничение: полная невозможность использовать DELETE для таблиц Excel.
я совсем недавно споткнулся об эти грабли и моё огорчение ещё не развеялось.

Автор - ikki
Дата добавления - 08.04.2013 в 14:39
nerv Дата: Понедельник, 08.04.2013, 14:43 | Сообщение № 5
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Цитата (ikki)
еще одно ограничение: полная невозможность использовать DELETE для таблиц Excel

ну а что мешает перезаписать их?


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
Цитата (ikki)
еще одно ограничение: полная невозможность использовать DELETE для таблиц Excel

ну а что мешает перезаписать их?

Автор - nerv
Дата добавления - 08.04.2013 в 14:43
ikki Дата: Понедельник, 08.04.2013, 14:51 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
то самое желание решать задачу одной командой без головной боли.
кроме того, это будет цикл и это будет долго.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщението самое желание решать задачу одной командой без головной боли.
кроме того, это будет цикл и это будет долго.

Автор - ikki
Дата добавления - 08.04.2013 в 14:51
nerv Дата: Понедельник, 08.04.2013, 15:50 | Сообщение № 7
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Цитата (ikki)
то самое желание решать задачу одной командой

я согласен, что получиться конструкция сложнее, но можно и без циклов. Например (данные только в столбце А):
[vba]
Код
Sub Example()
     Dim ADO As New ADO
      
     ' ADO.Query ("DELETE FROM [A:A] WHERE F1 = 2;")
      
     ADO.Query ("SELECT * FROM [A:A] WHERE F1 <> 2;")
     Columns("A").Insert
     Range("A1").CopyFromRecordset ADO.Recordset
     Columns("B").Delete
End Sub
[/vba]


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Понедельник, 08.04.2013, 16:01
 
Ответить
Сообщение
Цитата (ikki)
то самое желание решать задачу одной командой

я согласен, что получиться конструкция сложнее, но можно и без циклов. Например (данные только в столбце А):
[vba]
Код
Sub Example()
     Dim ADO As New ADO
      
     ' ADO.Query ("DELETE FROM [A:A] WHERE F1 = 2;")
      
     ADO.Query ("SELECT * FROM [A:A] WHERE F1 <> 2;")
     Columns("A").Insert
     Range("A1").CopyFromRecordset ADO.Recordset
     Columns("B").Delete
End Sub
[/vba]

Автор - nerv
Дата добавления - 08.04.2013 в 15:50
LightZ Дата: Понедельник, 08.04.2013, 15:53 | Сообщение № 8
Группа: Авторы
Ранг: Форумчанин
Сообщений: 120
Репутация: 48 ±
Замечаний: 0% ±

Недавно заметил неприятный нюанс: после Execute запроса (например из Экселя в Аксесс), в некоторых ситуациях результат запроса выходит отсортирован.
Это неприятно в тех случаях, когда необходим запрос по типу ВПРа, пример:

[vba]
Код

      sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\price.accdb;"
        
      Set pConn = CreateObject("ADODB.Connection"): pConn.Open sConn
      sSql = "SELECT t2.Pr " & _
            "FROM [Excel 12.0;Database=" & ThisWorkbook.FullName & ";HDR=Yes].[Расчет$A3:BS" & finalRow & "] AS t1 " & _
            "LEFT JOIN [data] As t2 " & _
                  "ON (t1.Filid = t2.Filid AND t1.Lid = t2.Lid);"

      shRasch.Range("bs4").CopyFromRecordset pConn.Execute(sSql)
[/vba]
На данный момент страхуюсь дополнительной сортировкой данных в Экселе


E-mail: overseerpower@gmail.com
Skype: Bogdan_Rud
WMR: R166238237296


Сообщение отредактировал LightZ - Понедельник, 08.04.2013, 15:54
 
Ответить
СообщениеНедавно заметил неприятный нюанс: после Execute запроса (например из Экселя в Аксесс), в некоторых ситуациях результат запроса выходит отсортирован.
Это неприятно в тех случаях, когда необходим запрос по типу ВПРа, пример:

[vba]
Код

      sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\price.accdb;"
        
      Set pConn = CreateObject("ADODB.Connection"): pConn.Open sConn
      sSql = "SELECT t2.Pr " & _
            "FROM [Excel 12.0;Database=" & ThisWorkbook.FullName & ";HDR=Yes].[Расчет$A3:BS" & finalRow & "] AS t1 " & _
            "LEFT JOIN [data] As t2 " & _
                  "ON (t1.Filid = t2.Filid AND t1.Lid = t2.Lid);"

      shRasch.Range("bs4").CopyFromRecordset pConn.Execute(sSql)
[/vba]
На данный момент страхуюсь дополнительной сортировкой данных в Экселе

Автор - LightZ
Дата добавления - 08.04.2013 в 15:53
nerv Дата: Понедельник, 08.04.2013, 16:07 | Сообщение № 9
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Цитата (Gustav)
"с данными Excel при помощи SQL"

и все-таки, наверное, это не совсем так. Например, запрос Богдана к аксу с моим классом можно переписать так
[vba]
Код
Sub Example2()
       Dim ADO As New ADO
          
       ADO.DataSource = ThisWorkbook.Path & "\price.accdb"
          
       ADO.Query ("SELECT t2.Pr " & _
                   "FROM [Excel 12.0;Database=" & ThisWorkbook.FullName & ";HDR=Yes].[Расчет$A3:BS" & finalRow & "] AS t1 " & _
                   "LEFT JOIN [data] As t2 " & _
                       "ON (t1.Filid = t2.Filid AND t1.Lid = t2.Lid);")
          
        shRasch.Range("bs4").CopyFromRecordset ADO.Recordset
End Sub
[/vba]
Не проверял, но должно работать smile

Спасибо за примеры. Вижу, что надо доработать smile


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Понедельник, 08.04.2013, 16:10
 
Ответить
Сообщение
Цитата (Gustav)
"с данными Excel при помощи SQL"

и все-таки, наверное, это не совсем так. Например, запрос Богдана к аксу с моим классом можно переписать так
[vba]
Код
Sub Example2()
       Dim ADO As New ADO
          
       ADO.DataSource = ThisWorkbook.Path & "\price.accdb"
          
       ADO.Query ("SELECT t2.Pr " & _
                   "FROM [Excel 12.0;Database=" & ThisWorkbook.FullName & ";HDR=Yes].[Расчет$A3:BS" & finalRow & "] AS t1 " & _
                   "LEFT JOIN [data] As t2 " & _
                       "ON (t1.Filid = t2.Filid AND t1.Lid = t2.Lid);")
          
        shRasch.Range("bs4").CopyFromRecordset ADO.Recordset
End Sub
[/vba]
Не проверял, но должно работать smile

Спасибо за примеры. Вижу, что надо доработать smile

Автор - nerv
Дата добавления - 08.04.2013 в 16:07
nerv Дата: Среда, 01.05.2013, 14:16 | Сообщение № 10
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Решил выложить обновленную версию класса.
На данный момент актуальная версия 0.5.

Зачем вообще он нужен?
Позволяет писать меньше кода, удобно работать (на мой взгляд).

Что из себя представляет?
Объект - ADO, свойства - "стандартные" Connection и Recordset. Т.е. объект ADO своего рода обертка.

Как начать работу?
Для того, чтобы начать работу с объектом ADO, надо его создать:
[vba]
Код
Dim ADO As New ADO
[/vba]

Как сделать запрос к данным текущей книги?
В данном запросе будут выбраны все данные из столбцов A:B с Листа1 текущей книги.
[vba]
Код
Sub Example()
     Dim ADO As New ADO
          
     ADO.Query ("SELECT * FROM [Лист1$A:B]")
End Sub
[/vba]
При этом используются настройки по умолчанию: Header = No, DataSource = ThisWorkbook.FullName

Как сделать запрос к данным текущей книги используя имена полей / заголовки столбцов?
[vba]
Код
Sub Example()
     Dim ADO As New ADO
          
     ADO.Header = True
     ADO.Query ("SELECT FieldName FROM [Лист1$A:B]")
End Sub
[/vba]

Как сделать запрос к данным другой книги?
[vba]
Код
Sub Example()
     Dim ADO As New ADO
          
     ADO.DataSource = Workbook.FullName   ' полный путь к книге
     ADO.Query ("SELECT * FROM [Лист1$A:B]")
End Sub
[/vba]

Как сделать запрос к "произвольным" данным (базе данных, текстовым файлам и т.п.).
[vba]
Код
Sub Example()
     Dim ADO As New ADO
          
     ADO.Connect ("Your connection string")
     ADO.Query ("SELECT * FROM ...")
End Sub
[/vba]
Т.е. в данном случае формирование строки подключения ложится целиком на плечи программиста.

Я сделал запрос. Где результат?
Результат выполнения запроса зхранится в объекте Recordset. Достучаться до него можно так:
[vba]
Код
ADO.Recordset
[/vba]

Как поместить результат выполнения запроса на лист?
[vba]
Код
Sub Example()
     Dim ADO As New ADO
          
     ADO.Query ("SELECT * FROM [Лист1$A:B]")
          
     Range("D1").CopyFromRecordset ADO.Recordset    ' поместить результат запроса на лист начиная с ячейки A1
End Sub
[/vba]

Как записать результат выполнения запроса в массив?
например, используя стандартный метод getRows() объекта Recordset
[vba]
Код
Sub Example()
     Dim ADO As New ADO
     Dim Arr As Variant
          
     ADO.Query ("SELECT * FROM [Лист1$A:B]")
          
     Arr = ADO.Recordset.getRows()    ' записать результат выполнения запроса в массив
End Sub
[/vba]
Но в этом случае массив будет иметь немного нестандартный вид.
Еще один способ, кот. позволяет получить "стандартный" двумерный массив:
[vba]
Код
Sub Example()
     Dim ADO As New ADO
     Dim Arr As Variant
          
     ADO.Query ("SELECT * FROM [Лист1$A:B]")
          
     Arr = ADO.ToArray()
End Sub
[/vba]

Сахар
Метод Query принимает ParamArray, что позволяет писать запросы наглядно и достаточно лаконично (без лишней конкатенации строк)
[vba]
Код
Sub Example()
     Dim ADO As New ADO
          
     ADO.Query "SELECT F1", _
           "FROM [Sheet1$A:B]", _
           "WHERE F2 > 0"
End Sub
[/vba]

Файл с новой версией класса во вложении. К сожалению, форум не позволяет редактировать первый пост темы, поэтому обновления доки не будет (на форуме).
К сообщению приложен файл: 5242752.zip (14.9 Kb)


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Среда, 01.05.2013, 14:21
 
Ответить
СообщениеРешил выложить обновленную версию класса.
На данный момент актуальная версия 0.5.

Зачем вообще он нужен?
Позволяет писать меньше кода, удобно работать (на мой взгляд).

Что из себя представляет?
Объект - ADO, свойства - "стандартные" Connection и Recordset. Т.е. объект ADO своего рода обертка.

Как начать работу?
Для того, чтобы начать работу с объектом ADO, надо его создать:
[vba]
Код
Dim ADO As New ADO
[/vba]

Как сделать запрос к данным текущей книги?
В данном запросе будут выбраны все данные из столбцов A:B с Листа1 текущей книги.
[vba]
Код
Sub Example()
     Dim ADO As New ADO
          
     ADO.Query ("SELECT * FROM [Лист1$A:B]")
End Sub
[/vba]
При этом используются настройки по умолчанию: Header = No, DataSource = ThisWorkbook.FullName

Как сделать запрос к данным текущей книги используя имена полей / заголовки столбцов?
[vba]
Код
Sub Example()
     Dim ADO As New ADO
          
     ADO.Header = True
     ADO.Query ("SELECT FieldName FROM [Лист1$A:B]")
End Sub
[/vba]

Как сделать запрос к данным другой книги?
[vba]
Код
Sub Example()
     Dim ADO As New ADO
          
     ADO.DataSource = Workbook.FullName   ' полный путь к книге
     ADO.Query ("SELECT * FROM [Лист1$A:B]")
End Sub
[/vba]

Как сделать запрос к "произвольным" данным (базе данных, текстовым файлам и т.п.).
[vba]
Код
Sub Example()
     Dim ADO As New ADO
          
     ADO.Connect ("Your connection string")
     ADO.Query ("SELECT * FROM ...")
End Sub
[/vba]
Т.е. в данном случае формирование строки подключения ложится целиком на плечи программиста.

Я сделал запрос. Где результат?
Результат выполнения запроса зхранится в объекте Recordset. Достучаться до него можно так:
[vba]
Код
ADO.Recordset
[/vba]

Как поместить результат выполнения запроса на лист?
[vba]
Код
Sub Example()
     Dim ADO As New ADO
          
     ADO.Query ("SELECT * FROM [Лист1$A:B]")
          
     Range("D1").CopyFromRecordset ADO.Recordset    ' поместить результат запроса на лист начиная с ячейки A1
End Sub
[/vba]

Как записать результат выполнения запроса в массив?
например, используя стандартный метод getRows() объекта Recordset
[vba]
Код
Sub Example()
     Dim ADO As New ADO
     Dim Arr As Variant
          
     ADO.Query ("SELECT * FROM [Лист1$A:B]")
          
     Arr = ADO.Recordset.getRows()    ' записать результат выполнения запроса в массив
End Sub
[/vba]
Но в этом случае массив будет иметь немного нестандартный вид.
Еще один способ, кот. позволяет получить "стандартный" двумерный массив:
[vba]
Код
Sub Example()
     Dim ADO As New ADO
     Dim Arr As Variant
          
     ADO.Query ("SELECT * FROM [Лист1$A:B]")
          
     Arr = ADO.ToArray()
End Sub
[/vba]

Сахар
Метод Query принимает ParamArray, что позволяет писать запросы наглядно и достаточно лаконично (без лишней конкатенации строк)
[vba]
Код
Sub Example()
     Dim ADO As New ADO
          
     ADO.Query "SELECT F1", _
           "FROM [Sheet1$A:B]", _
           "WHERE F2 > 0"
End Sub
[/vba]

Файл с новой версией класса во вложении. К сожалению, форум не позволяет редактировать первый пост темы, поэтому обновления доки не будет (на форуме).

Автор - nerv
Дата добавления - 01.05.2013 в 14:16
LightZ Дата: Четверг, 02.05.2013, 11:28 | Сообщение № 11
Группа: Авторы
Ранг: Форумчанин
Сообщений: 120
Репутация: 48 ±
Замечаний: 0% ±

nerv, +


E-mail: overseerpower@gmail.com
Skype: Bogdan_Rud
WMR: R166238237296
 
Ответить
Сообщениеnerv, +

Автор - LightZ
Дата добавления - 02.05.2013 в 11:28
nerv Дата: Суббота, 01.06.2013, 13:12 | Сообщение № 12
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

актуальные версии и дока здесь


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщениеактуальные версии и дока здесь

Автор - nerv
Дата добавления - 01.06.2013 в 13:12
AndreTM Дата: Вторник, 04.06.2013, 02:24 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Цитата (nerv)
актуальные версии и дока здесь
Поскольку ты в последнне время увлёкся UTF-8, позволю себе выложить прямо сюда актуальный модуль класса в ANSI-кодировке. А то юзеры обычно не настолько продвинуты, чтобы ещё и декодированием заниматься...
К сообщению приложен файл: ADO.cls (5.3 Kb)


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
Цитата (nerv)
актуальные версии и дока здесь
Поскольку ты в последнне время увлёкся UTF-8, позволю себе выложить прямо сюда актуальный модуль класса в ANSI-кодировке. А то юзеры обычно не настолько продвинуты, чтобы ещё и декодированием заниматься...

Автор - AndreTM
Дата добавления - 04.06.2013 в 02:24
nerv Дата: Среда, 05.06.2013, 23:31 | Сообщение № 14
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Цитата (AndreTM)
Поскольку ты в последнне время увлёкся UTF-8

github не понимает ansi. В любом случае анси версию можно было из файла забрать. Не каждый, конечно, догадается, но тем не менее...

спасибо )


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
Цитата (AndreTM)
Поскольку ты в последнне время увлёкся UTF-8

github не понимает ansi. В любом случае анси версию можно было из файла забрать. Не каждый, конечно, догадается, но тем не менее...

спасибо )

Автор - nerv
Дата добавления - 05.06.2013 в 23:31
maradona Дата: Понедельник, 07.10.2013, 17:26 | Сообщение № 15
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Столкнулся с проблемой связанной с переносом файла на другой компьютер, не осуществляется запрос в макросе. Видимо несоответствие библиотек ? Помогите? В модуле ничего не менял, эксель 2007 на XP
 
Ответить
СообщениеСтолкнулся с проблемой связанной с переносом файла на другой компьютер, не осуществляется запрос в макросе. Видимо несоответствие библиотек ? Помогите? В модуле ничего не менял, эксель 2007 на XP

Автор - maradona
Дата добавления - 07.10.2013 в 17:26
nerv Дата: Понедельник, 07.10.2013, 19:34 | Сообщение № 16
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Я по фотографии порчу не снимаю :)

В личку писать не надо, лучше создайте тему на форуме.

А личку платно и дорого )


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Понедельник, 07.10.2013, 19:37
 
Ответить
СообщениеЯ по фотографии порчу не снимаю :)

В личку писать не надо, лучше создайте тему на форуме.

А личку платно и дорого )

Автор - nerv
Дата добавления - 07.10.2013 в 19:34
Watcher_1 Дата: Суббота, 02.11.2013, 14:49 | Сообщение № 17
Группа: Гости
Приветствую!
А как ваш класс будет реагировать на колличество записейц больше 65536 строк. Аналогичная функция RDmitry просто не видит такое кол-во строк.
Возможно ли обойти это ограничение?
 
Ответить
СообщениеПриветствую!
А как ваш класс будет реагировать на колличество записейц больше 65536 строк. Аналогичная функция RDmitry просто не видит такое кол-во строк.
Возможно ли обойти это ограничение?

Автор - Watcher_1
Дата добавления - 02.11.2013 в 14:49
AndreTM Дата: Суббота, 02.11.2013, 16:16 | Сообщение № 18
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Watcher_1, достаточно исходный проект (содержащий класс ADO) запустить в Excel выше 2003-го.


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеWatcher_1, достаточно исходный проект (содержащий класс ADO) запустить в Excel выше 2003-го.

Автор - AndreTM
Дата добавления - 02.11.2013 в 16:16
Watcher_1 Дата: Воскресенье, 03.11.2013, 20:39 | Сообщение № 19
Группа: Гости
Уважаемый AndreTM
Прочитав ваш ответ может сложиться впечатление что 2003 позволяет занести больше 65536 строк.... ^_^
Задав этот вопарос я априори предполагаю офис выше 2003.
 
Ответить
СообщениеУважаемый AndreTM
Прочитав ваш ответ может сложиться впечатление что 2003 позволяет занести больше 65536 строк.... ^_^
Задав этот вопарос я априори предполагаю офис выше 2003.

Автор - Watcher_1
Дата добавления - 03.11.2013 в 20:39
Gustav Дата: Четверг, 07.11.2013, 10:54 | Сообщение № 20
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
актуальные версии и дока здесь

При просмотре кода класса вдруг увидел "4.0" в том месте, где обычно вижу "8.0". Подозреваю, что опечатка. Возможно, даже невольно ограничивающая функционал по тому же количеству строк - ведь в Excel 4.0 их было всего 16K. Или это сознательный шаг?

Private Function GetExcelConnectionString() As String
     Dim Params As String
     Params = IIf(Val(Application.Version) < 12, _
         "Provider='Microsoft.Jet.OLEDB.4.0';Data Source=':1';Extended Properties='Excel 4.0;HDR=:2;IMEX=1';", _
         "Provider='Microsoft.ACE.OLEDB.12.0';Data Source=':1';Extended Properties='Excel 12.0;HDR=:2;IMEX=1';")


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Четверг, 07.11.2013, 10:55
 
Ответить
Сообщение
актуальные версии и дока здесь

При просмотре кода класса вдруг увидел "4.0" в том месте, где обычно вижу "8.0". Подозреваю, что опечатка. Возможно, даже невольно ограничивающая функционал по тому же количеству строк - ведь в Excel 4.0 их было всего 16K. Или это сознательный шаг?

Private Function GetExcelConnectionString() As String
     Dim Params As String
     Params = IIf(Val(Application.Version) < 12, _
         "Provider='Microsoft.Jet.OLEDB.4.0';Data Source=':1';Extended Properties='Excel 4.0;HDR=:2;IMEX=1';", _
         "Provider='Microsoft.ACE.OLEDB.12.0';Data Source=':1';Extended Properties='Excel 12.0;HDR=:2;IMEX=1';")

Автор - Gustav
Дата добавления - 07.11.2013 в 10:54
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!