powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel + VBA + ODBC - как связать в кучу? Поможите!
7 сообщений из 7, страница 1 из 1
Excel + VBA + ODBC - как связать в кучу? Поможите!
    #32405839
IgorK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Появилясь задачка - в ячейку Excel вставлять значение, получаемое SQL запросом из ODBC источника. Все это дело нужно оформить в макрос. Все бы ничего, но ихз VBA к ODBC я не разу не делал.
Не дайте помереть, покажите примерчик!
...
Рейтинг: 0 / 0
Excel + VBA + ODBC - как связать в кучу? Поможите!
    #32407718
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Excel + VBA + ODBC - как связать в кучу? Поможите!
    #32447796
IgorE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я пользуюсь способом "ODBCDirect"

Для русской версии Office:

1. Должен быть установлен "Доступ к данным"

2. в Панели управления создать user DSN ODBC-источник данных для своего SQL-сервера и базы

3. В редакторе VB запустить Просмотр объектов, правой кнопкой на поле
"Все библиотеки", из выпадающего списка выбрать "Ссылки" и поставить галку
напротив Microsoft DAO (версия по вкусу;).

Вот короткий пример, естественно, надо поправить строку Set MyCon...

Код: 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.
30.
31.
32.
33.
34.
35.
Dim wrkODBC As Workspace
Dim MyCon As Connection
Dim MyRec As Recordset

Set wrkODBC = CreateWorkspace("NewOBDCWorkspace", "admin", "", dbUseODBC)
wrkODBC.DefaultCursorDriver = dbUseODBCCursor

Set MyCon = wrkODBC.OpenConnection("MyConnect", dbDriverNoPrompt, , "ODBC;DATABASE=BASENAME;UID=sa;PWD=saPassword;DSN=MyDSN")
Set MyRec = MyCon.OpenRecordset( "SELECT UserName,UserID FROM Users", dbOpenSnapshot)

With MyRec

If .EOF Then
    NumberOfSQL =  0 
Else
    .MoveLast
    NumberOfSQL = .RecordCount
    .MoveFirst
End If

Sheets("Лист1").Select
Range("A1").Select

For i =  1  To NumberOfSQL
    ActiveCell.Value = .Fields( 0 ).Value
    ActiveCell.Offset( 0 ,  1 ) = .Fields( 1 ).Value
    .MoveNext
    ActiveCell.Offset( 1 ,  0 ).Select
Next i

End With

MyRec.Close
Set MyRec = Nothing
MyCon.Close
wrkODBC.Close
...
Рейтинг: 0 / 0
Excel + VBA + ODBC - как связать в кучу? Поможите!
    #32481964
4you
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня на .MoveNext выдает еррор: object invalid or no longer set. Почему?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Excel + VBA + ODBC - как связать в кучу? Поможите!
    #36155562
maxim111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorE
Использовал ваш код. Все работает. Но я назначил выполнение вышеуказанного кода по нажатию кнопки CommandButton1 и захотел, что бы результат отображался на Лист2. Выдает ошибку в Range("A1").Select . Помогите разобраться
...
Рейтинг: 0 / 0
Excel + VBA + ODBC - как связать в кучу? Поможите!
    #36155574
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxim111,

Используйте Range.CopyFromRecordset .
...
Рейтинг: 0 / 0
Excel + VBA + ODBC - как связать в кучу? Поможите!
    #36157271
Фотография bbx1389
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4youу меня на .MoveNext выдает еррор: object invalid or no longer set. Почему?
Скорее всего просто нет следующей записи.
4you
With MyRec

If .EOF Then
NumberOfSQL = 0
Else
.MoveLast
NumberOfSQL = .RecordCount
.MoveFirst
End If

Sheets("Лист1").Select
Range("A1").Select

For i = 1 To NumberOfSQL
ActiveCell.Value = .Fields(0).Value
ActiveCell.Offset(0, 1) = .Fields(1).Value
.MoveNext
ActiveCell.Offset(1, 0).Select
Next i

End With



Я бы предложил Вам что-нибудь типо:
'Проверяем, а есть ли записи, если есть ставим курсор на первую
If not (MyRec.EOF and MyRec.BOF) Then MyRec.MoveFirst


Dim t as Integer
t=1
'Цикл по записям, пока не достигнем конца
Do Until MyRec.EOF
'Пишете значения в соответствующие ячейки
Лист1.Cells(t, 1).Value=MyRec.Fields(0).Value
Лист1.Cells(t, 2).Value=MyRec.Fields(1).Value

MyRec.MoveNext
t=t+1
Loop

Можете и имена столбцов вставить:
MyRec.Fields(0).Name



Возможно чего-то в вопросе не понял, но как-то так
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel + VBA + ODBC - как связать в кучу? Поможите!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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