Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2011, 15:18   #1
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию SQL, Recordset в Excel

Подскажите пожалуйста как правильно составить макрос, который позволит работать с определённым участком Excel-таблицы как с небольшой базой данных. И какой для этого нужно подключить дополнительный модуль? Допустим мне нужно обозначить Range("A1:E5") как источник данных, и с помощью SQL-запроса выбрать все записи, со значением "1" в поле "B1" (Типа "Select * from ??? where 'b1'=1"). Пытался читать про всякие объекты Recordset, но не совсем понимаю как это правильно использовать..
Sanek_81 вне форума Ответить с цитированием
Старый 14.04.2011, 15:41   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Примера нет(ленивый я),поэтому разбирайтесь сами.Во вложении 2 вариата
для 2003 и 2007.у них дрова разные.
Библиотеку ADO подключите
Вложения
Тип файла: rar ADO2.rar (1.1 Кб, 29 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 14.04.2011, 17:30   #3
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию

Разбираюсь, но немного запутался. Изначально осмелюсь предположить что для данного примера можно исключить эти константы:
Public Const sCn1 = "Provider=Microsoft.Jet.OLEDB.4.0;D ata Source="
Public Const sCn11 = "Provider=Microsoft.ACE.OLEDB.12.0; ;Data Source="

Public Const sCn2 = ";Extended Properties=""Excel 8.0;HDR=No"";"
Public Const sCn12 = ";Extended Properties=""Excel 12.0;HDR=No"";"

А также я немогу понять следущее:
FROM [" & S_mame & "$A6:G65500]...
S_mame что в этом примере означает? Вернее что мне надо в это место подставить, если я скажем беру таблицу из открытого текущего листа?

Последний раз редактировалось Sanek_81; 14.04.2011 в 17:39.
Sanek_81 вне форума Ответить с цитированием
Старый 14.04.2011, 17:37   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Давайте файл,с какими то данными.и что хотите взять,так проще будет.

В примере я
Код:
FROM [" & S_mame & "$A6:G200000]...
с листов S_mame беру данные из диапазона $A6:G200000
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 14.04.2011, 17:53   #5
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию

Вот файлик, в нём таблица 5х5 мне нужно отобрать sql-запросом строки в которых стоблец "B" равен 1.
Вложения
Тип файла: rar test.rar (4.4 Кб, 12 просмотров)
Sanek_81 вне форума Ответить с цитированием
Старый 14.04.2011, 18:08   #6
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию

Я что-то наподобие пытаюсь делать а мне на строке "rs.Open sSql, cn, adOpenStatic, adLockReadOnly " выдаёт ошибку 'Run-time error 3709' невозможно использование подключения для выполнения операции. Оно закрыто или не допускается в данном контексте.
Sanek_81 вне форума Ответить с цитированием
Старый 14.04.2011, 18:18   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я тут нарисовал такой Sanek_81.dqy
Код:
XLODBC
1
DSN=Excel Files;DBQ=C:\temp\Sanek_81\test.xls;DefaultDir=C:\temp\Sanek_81;DriverId=790;MaxBufferSize=2048;PageTimeout=5;
SELECT `Лист3$`.`test ok`, `Лист3$`.F2, `Лист3$`.`test ok1`, `Лист3$`.`test ok2`, `Лист3$`.`test ok3`  FROM `C:\temp\Sanek_81\test`.`Лист3$` `Лист3$`  WHERE (`Лист3$`.F2=1)


test ok	F2	test ok1	test ok2	test ok3
Подправить пути, сохранить текст как имя.dqy, запустить.
Работает, но вытягивает только данные-цифры. Т.е. выбрал такие две строки, если единичку к семёркам поставить:
Код:
7	1	7	7	7
	1
Может пригодится...

P.S. А почему именно SQL?
Я как-то массивами обхожусь - и быстрее получается, и код как хочешь можно повернуть...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 14.04.2011 в 18:23.
Hugo121 вне форума Ответить с цитированием
Старый 14.04.2011, 18:48   #8
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию

Что-то я ещё больше запутался... как это "работает но цифры вытягивает".. мне надо чтобы работал как с текстовыми данными
SQL мне удобен, много разных выборок в дальнейшем предстоит делать, поэтому хочу научиться именно этим методом работать.
Sanek_81 вне форума Ответить с цитированием
Старый 14.04.2011, 19:41   #9
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Послушайтесь совета Hugo121.У вас данные должны быть сохранены как текст,иначе возьмет только числа

Код:
Public Const sCn1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
Public Const sCn2 = ";Extended Properties=""Excel 8.0;HDR=No"";"
Public Sub Go_Junior()
Dim cn As ADODB.Connection, rs As ADODB.Recordset
Dim sCon As String, n As Long, sCon_R As String
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
  sCon = sCn1 + ThisWorkbook.FullName + sCn2
    cn.Open sCon
 If Not cn.State = 1 Then Exit Sub
   sSql = "SELECT F1, F2, F3, F4, F5  " + _
    " FROM [Лист3$A1:E5] T " & _
    "WHERE F2 Like '1' ;"
     rs.Open sSql, cn, adOpenStatic, adLockReadOnly
'
Лист1.Cells(1, 1).CopyFromRecordset rs
rs.Close

 cn.Close

Set cn = Nothing

Set rs = Nothing
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 15.04.2011, 16:08   #10
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию

Спасибо большое, разобрался. В общем вся заминка у меня была в этом месте FROM [Лист3$A1:E5], тоесть не понимал что сюда надо прописать. А что означает буква T в запросе?

Последний раз редактировалось Sanek_81; 15.04.2011 в 16:32.
Sanek_81 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка Recordset Woodlin Microsoft Office Access 2 31.03.2011 07:51
Запросы SQL в Excel clbman Microsoft Office Excel 2 15.06.2010 17:43
Update Recordset Kveldulv Microsoft Office Excel 0 13.05.2010 16:42
Иморт данных из SQL в Excel при помощи QueryTable VBS, Иморт данных из SQL в Excel при помощи QueryTable Valdocco Microsoft Office Excel 1 16.07.2009 21:50