Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel + VBA + ODBC - как связать в кучу? Поможите! / 7 сообщений из 7, страница 1 из 1
11.02.2004, 15:21
    #32405839
IgorK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA + ODBC - как связать в кучу? Поможите!
Появилясь задачка - в ячейку Excel вставлять значение, получаемое SQL запросом из ODBC источника. Все это дело нужно оформить в макрос. Все бы ничего, но ихз VBA к ODBC я не разу не делал.
Не дайте помереть, покажите примерчик!
...
Рейтинг: 0 / 0
12.02.2004, 18:56
    #32407718
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA + ODBC - как связать в кучу? Поможите!
...
Рейтинг: 0 / 0
18.03.2004, 17:10
    #32447796
IgorE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA + ODBC - как связать в кучу? Поможите!
Я пользуюсь способом "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
15.04.2004, 01:57
    #32481964
4you
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA + ODBC - как связать в кучу? Поможите!
у меня на .MoveNext выдает еррор: object invalid or no longer set. Почему?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
20.08.2009, 19:10
    #36155562
maxim111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA + ODBC - как связать в кучу? Поможите!
IgorE
Использовал ваш код. Все работает. Но я назначил выполнение вышеуказанного кода по нажатию кнопки CommandButton1 и захотел, что бы результат отображался на Лист2. Выдает ошибку в Range("A1").Select . Помогите разобраться
...
Рейтинг: 0 / 0
20.08.2009, 19:24
    #36155574
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA + ODBC - как связать в кучу? Поможите!
maxim111,

Используйте Range.CopyFromRecordset .
...
Рейтинг: 0 / 0
21.08.2009, 15:53
    #36157271
bbx1389
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA + ODBC - как связать в кучу? Поможите!
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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel + VBA + ODBC - как связать в кучу? Поможите! / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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