Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование хранимой процедуры(MSSQL) в Access(2 
:(
    Опции темы
_Dream
Дата 6.5.2008, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 4.11.2006
Где: Там

Репутация: нет
Всего: нет



проект: приложение - access2003, БД - MSSQL2002
В базе есть хранимая процедура возвращающая('1','2','3') надо на форме в аксесе подключить ее как "источник строк" для колонки(если я правильно понимаю это и есть значения комбика). подскажите пожалуйста как это вообще можно реализовать? как сделать чтобы я увидел эту процедуру в аксесе? в поле "источник строк" я вижу запросы созданные в аксесе. возможно надо  создать свой запрос. но как запросом вернуть данные возвращаемые хранимой процедурой? возможно надо сделать это средствами VBasic. если да то как?
спасибо.


Это сообщение отредактировал(а) _Dream - 6.5.2008, 16:27
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
Akina
Дата 7.5.2008, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Нужно написать собственную Public-функцию в модуле (не модуле формы или отчета!), которая открывает ADO Connection на CurrentDB, выдергивает из хранимки данные и возвращает их. Эт функцию нужно использовать в запросе для получения там результатов работы хранимки.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
_Dream
Дата 7.5.2008, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 4.11.2006
Где: Там

Репутация: нет
Всего: нет



сорри но мало что понятно(по сути в 1е сталкиваюсь вообще с аксесоми и VB).
есть грид на форме(датасорс для него просто 1на из таблиц в БД)
есть хранимая процедура(MSSQL) в БД(принимает значение "поляХ" из таблицы являющейся датасорсом для грида на форме)
надо создать запрос в Access такой чтобы он возвращал рузультат хранимой процедуры.
попробовал создать "запрос SQL -> запрос к серверу" где прописал "EXEC storageProcedureName" 
возникает вопрос - правильный ли это путь и как можно передать туда входной параметр.
пока что после указания моего access-запроса в качестве источника строк в выпадющем списке вместо списка значения показывается только 1но значение - название access-запроса.
заранее спасибо
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
Akina
Дата 7.5.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(_Dream @  7.5.2008,  11:10 Найти цитируемый пост)
правильный ли это путь и как можно передать туда входной параметр

Нет. Соответственно никак.
Путь описан выше.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
_Dream
Дата 7.5.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 4.11.2006
Где: Там

Репутация: нет
Всего: нет



просто подумал что можно передавать входной параметр на событии типа перехода между строк(например GotFocus - когда кликаем в комбик срабатывает событие параметр бьерется из текущей строки и соотв. запрс выполняется как надо.)
с другой стороны не совсем понятно как мне поможет функция. ведь опять же процедура по сути должна вызываться каждый раз при переходе на новую строку.
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
bopoha
Дата 8.5.2008, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Если у вас форма ленточная и вы хотите видеть для каждой записи свои данные в поле со списком, то ничего не выйдет. Т.к. для всех записей поле со списком содержит одинаковый набор строк. Тут вариант только один - простая форма. И на событии Current Record можно менять sql запрос к серверу и подсовывать его полю со списком. Не элегантно, но будет работать.

Более элегантно будет реализовать функцию заполнения Поля со списком.

Справка:

The next example uses a static array to store the names of the databases in the current directory. To call this function, enter ListMDBs as the RowSourceType property setting and leave the RowSource property setting blank.

Код

Function ListMDBs(fld As Control, id As Variant, _
     row As Variant, col As Variant, _
     code As Variant) As Variant
    Static dbs(127) As String, Entries As Integer
    Dim ReturnVal As Variant
    ReturnVal = Null
    Select Case code
        Case acLBInitialize                ' Initialize.
            Entries = 0
            dbs(Entries ) = Dir("*.MDB")
            Do Until dbs(Entries) = "" Or Entries >= 127
                Entries = Entries+1
                dbs(Entries) = Dir
            Loop
            ReturnVal = Entries
        Case acLBOpen                        ' Open.
            ' Generate unique ID for control.
            ReturnVal = Timer
        Case acLBGetRowCount            ' Get number of rows.
            ReturnVal = Entries
        Case acLBGetColumnCount    ' Get number of columns.
            ReturnVal = 1
        Case acLBGetColumnWidth    ' Column width.
            ' -1 forces use of default width.
            ReturnVal = -1
        Case acLBGetValue                    ' Get data.
            ReturnVal = dbs(row)
        Case acLBEnd                        ' End.
            Erase dbs
    End Select
    ListMDBs = ReturnVal
End Function



PM MAIL WWW ICQ Skype GTalk   Вверх
Akina
Дата 8.5.2008, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(_Dream @  7.5.2008,  15:15 Найти цитируемый пост)
не совсем понятно как мне поможет функция

Делаем функцию типа
Код

public function returnvalues(param1, param2)
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

cn.ConnectionString = CurrentProject.BaseConnectionString
cn.Open
Set rs = cn.Execute("storedproc") ' а может, rdoConnection.OpenResultset ?

' нужные обработки

returnvalues = SomeVar
end func

и далее уже 

Код

select fld1, fld2, ..., returnvalues(fldM, fldN) as val1
from mytable
where ... group by ... having ...



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
_Dream
Дата 13.5.2008, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 4.11.2006
Где: Там

Репутация: нет
Всего: нет



Цитата

Если у вас форма ленточная и вы хотите видеть для каждой записи свои данные в поле со списком, то ничего не выйдет. Т.к. для всех записей поле со списком содержит одинаковый набор строк. Тут вариант только один - простая форма. И на событии Current Record можно менять sql запрос к серверу и подсовывать его полю со списком. Не элегантно, но будет работать.

сделал так но возникла одна сложность. чтоб настроить запрос к серверу необходимо настроить DSN и каждый раз на событии его явно! указывать. не смог это обойти вствив в свойства запроса к серверу(описание)
ODBC;DRIVER={sql server};DATABASE="DBName";SERVER="DB IP";UID="login";PWD="password";Trusted_Connection=No;DBPrompt_NoPrompt
все равно требует явного указания DSN.. что я сделал не так?

2Akina. Не совсем понял. то есть функция возвращает резалтСет некий а уже этот запрос
Код

select fld1, fld2, ..., returnvalues(fldM, fldN) as val1
from mytable
where ... group by ... having ...
будет как датасорс к гриду?
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
Akina
Дата 13.5.2008, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Нет. Функция возвращает ОДНО значение. Для конкретной записи результирующего набора выполняется хранимка, и получается вычисленное для этой записи значение поля.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bopoha
Дата 13.5.2008, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Цитата(_Dream @  13.5.2008,  15:15 Найти цитируемый пост)
все равно требует явного указания DSN.. что я сделал не так?


У запроса пишем: ODBC;DSN=имя.
DSN созадем програмно. У Access для этого есть спец фукнция. Сейчас не помню, могу дома глянуть, если нужно.
Так намного лучше. Иначе можно запарится меняя пароль или пользователя.

P.S. Могу глянуть строку подключения и без DSN.
PM MAIL WWW ICQ Skype GTalk   Вверх
_Dream
Дата 13.5.2008, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 4.11.2006
Где: Там

Репутация: нет
Всего: нет



Цитата

Сейчас не помню, могу дома глянуть, если нужно.
Так намного лучше. Иначе можно запарится меняя пароль или пользователя.

P.S. Могу глянуть строку подключения и без DSN. 

было бы здорово

Добавлено через 3 минуты и 6 секунд
Цитата

Нет. Функция возвращает ОДНО значение. Для конкретной записи результирующего набора выполняется хранимка, и получается вычисленное для этой записи значение поля. 

не уверен что понимаю вас. ведь моя хранимка возвращает список значений(который я пытаюсь установить как источник строк для комбика) а не одно значение. я сделал в принципе но остается проблема с ДСН. 
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
bopoha
Дата 14.5.2008, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Создать DSN можно при помощи функции RegisterDatabase.

Если хочется без DSN, то необходимо использовать библиотеку ADO. А это только програмно. DAO (и хранимые запросы) всегда требуют DSN.

Тут можно посмотреть на форматы строк подключения к разным серверам для разных библиотек доступа к данным:
http://www.codeproject.com/database/connec...LE%20DB%20MySQL
http://www.connectionstrings.com/
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.