Вопрос по VBA + SQL

noro

Проблема следующая:
Есть написанная кем-то программа отправления запроса на SQL-Server. Выглядит так: Result = SQL_execute(запрос). Нужно обратиться к содержимому Result. Можно сделать так:
cells(1,1).CopyfromRecordset Result, и работать со спрэдщитом. Но надо,чтобы была функция которая выдает одно число и не было видно как она работает.
Как это сделать?
Спасибо.

Andbar

Excel можно прятать.
Что-то типа Application.Visible = False, посмотри в справке.

noro

зачем мне он спрятанные ? Мне нужно чтобы формула,которая вводится в спрэдщит, выводила значение в ячейку. Что предлагается спрятать ?

Andbar

спрячь Excel, создай дополнительный лист, проделай все промежуточные шаги на нём, скопируй результат туда, куда надо и удали временный лист. Перед выходом можешь показать Excel. Мелькание Excel'я меньше раздражает, чем куча действий, выполняющихся автоматом, да и быстрее так будет.

noro

когда временный лист удаляешь он выкидывает вопрос о том стоит ли ? Это не очень хорошо

Andbar

А в справку посмотреть?
 
Application.DisplayAlerts = False
Worksheets("Sheet3").Delete
Application.DisplayAlerts = True

FRider

перед удалением поставь свойство у Application DisplayAlerts в False, после удаления верни в True

FRider

апиридил

noro

Спасибо. Справка у экселя не очень. Как там предлагается искать ?

noro

Да и просто интересно - неужели нет возможности напрямую обратиться к содержимому. Это же уродство какое-то.

FRider

Как там предлагается искать ?
google.com

FRider

я правильно понял, что функция тебе возвращает рекордсет в котором на самом деле лежит одно число?
Ну так напиши функцию обертку, которая вычитает из рекордсета нужное и вернет как результат, и уже к этой функции обращайся

noro

нет, там матрица в общем случае. Неужели нет возможности обратиться к содержимому напрямую типа как-нибудь Result.fields(1,1) или что-то такое ?

FRider

я что то не понял, что ты хочешь
В общем случае рекордсет - это нечто вроде итератора. Т.е. строку сначала надо прочитать(MoveNext) а потом уже обращаться к полям. Т.е. если хочешь получить матрицу как результат запроса - будь добр вычитай рекордсет.

noro

расскажи плс поподробнее как там все это устроено, желательно с примером.

FRider

ну привет :) Это нужно лекцию тебе чтоль прочесть?
Ты вообще знаком с объектом Recordset, с ADODB? Примеры и описание есть же в MSDN

noro

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

Andbar

Спасибо. Справка у экселя не очень. Как там предлагается искать ?
У VBA довольно хорошая справка. Я нашёл приведённый кусок кода за 3 шага: открыл справку по коллекции листов (Worksheets вроде от туда открыл справку по листу (Worksheet затем из списка методов открыл Delete.

kill-still

скорее msdn.com

noro

Вот это то,что нужно. Спасибо.

kill-still

тоже самое на мсдн:
http://msdn.microsoft.com/en-us/library/ms681017%28v=VS.85%2...
Оставить комментарий
Имя или ник:
Комментарий: