Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: использование хранимой процедуры(MSSQL) в Access(2003)
 
 автор: Dmitry   (06.05.2008 в 16:49)   личное сообщение
 
 

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

  Ответить  
 
 автор: osmor   (06.05.2008 в 17:36)   личное сообщение
 
 

... да начинаю забывать
попробуйте создать запрос к серверу в котором укажите
"Exec ИМЯSP"
и уже этот запрос подсунуть как источник строк.

А через VBA можно создать Conncetion и в нем

Set rs = CurrentProject.Connection.Execute ("exec dbo.ИмяПроцедуры")
получите Recordset с данными

  Ответить  
 
 автор: Dmitry   (06.05.2008 в 18:10)   личное сообщение
 
 

Вроде бы "Exec ИМЯSP" так нельзя(пробовал делать так: создать запрос при помощи конструктора, правой кнопкой - режим SQL) - там можно только писать сам запрос сразу а хранимый вызывать нельзя. Так может там и написать весь sql-код? но я не знаю откуда получить в таком случае входные параметрвы для процедуры. На форме есть таблица для которой указан датасорс(таблица из БД). мне надо добавить столбец где для каждой записи в таблице будет комбик со значениями возвращаемыми моей процедурой(процедура должна принимать 1но из полей таблицы БД являющей датасорсом для таблицы на форме)

  Ответить  
 
 автор: osmor   (06.05.2008 в 18:16)   личное сообщение
 
 

Нужно создать не просто запрос, а запрос к серверу.

  Ответить  
 
 автор: Dmitry   (06.05.2008 в 18:40)   личное сообщение
 
 

а можно пример? спасибо

  Ответить  
 
 автор: Кабан   (06.05.2008 в 18:59)   личное сообщение
 
 

пример вам дали. потрудитесь посмотреть в хелпе или погуглить - "ms access запрос к серверу", плз

  Ответить  
 
 автор: osmor   (06.05.2008 в 21:08)   личное сообщение
 
 

не не могу. Просто в режиме конструктора запроса в меню "запрос"-"запрос SQL" - "К серверу", а в тексте запроса напишите EXEC......

  Ответить  
 
 автор: Dmitry   (07.05.2008 в 11:02)   личное сообщение
 
 

так. вроде получилось создать запрос к серверу способом вами описанным. но почему-то при подстановке его в качестве источника строк в выпадающем списке вместо списка возвращаемых значений я вижу только само название моего запроса. может потому что не передан входящий параметр(ожидаемый sql процедурой). а где и как его передать?

  Ответить  
 
 автор: osmor   (07.05.2008 в 11:08)   личное сообщение
 
 

exec dbo.ИмяПроцедуры параметр1, параметр2

  Ответить  
 
 автор: Dmitry   (07.05.2008 в 11:21)   личное сообщение
 
 

а откуда получить "параметр1". он должен для каждой строки подставляться свой из таблицы(таблица - источник данных для грида. есть FK поле - его и надо подставить).
зы сорри за исключительную ламерность вопросов :)
ззы смущает факт что после создания запроса и двойному клику по нему открывается таблица результатов в случае же запроса к серверу открывается некая табличка где можно\нужно насраивать подключение к серверу.

  Ответить  
 
 автор: osmor   (07.05.2008 в 12:57)   личное сообщение
 
 

В своствах запроса к серверу нужно указать подключение.
если нужно менять параметр, то можно менять сам текст запроса к серверу т.е. на событие ... ну не знаю например "текущая запись" или сами решите на какое вам удобнее пишите

Currentdb.querydefs("ИмяЗапросаКСерверу").sql = "Exec ИмяSP " & me.полеСПараметром
me.Список.RowSource = "ИмяЗапросаКСерверу"

  Ответить  
 
 автор: Dmitry   (07.05.2008 в 13:42)   личное сообщение
 
 

поставил данный вами код в обработчик GotFocus. посмотрел в дэбагере до выполнения кода RowSource = "имяЗапросаАксес" (выставляю руками в источнике строк). после выполнения кода оно такое же.. а на форме когда жму на комбик почему то опять вижу вместо списка значений только "имяЗапросаАксес" :(

>>"В своствах запроса к серверу нужно указать подключение."
а какое нужно выбрать?
сделал так. DNS -> New -> SqlServer(type) -> FileName:сервер где лежит БД -> FInish;
create new datasource: Description: DBName; Server:сервер где лежит БД (выбираем из комбика); with SQL authentification; next ..next; finish;
создалось новое DNS подключение и теперь когда я выбираю его и указываю sql подключение то выполняется sql запрос с параметром NULL.
по идее то что надо но в программе все равно возвращает вместо списка значений имя аксес-запроса
спасибо.

  Ответить  
 
 автор: osmor   (07.05.2008 в 17:53)   личное сообщение
 
 

какой тип источника данных установлен для списка?

  Ответить  
 
 автор: Dmitry   (07.05.2008 в 19:53)   личное сообщение
 
 

:) точно. бага была в этом. однако теперь при нажатии на комбик он требует явного указания DNS. можно это обойти?
спасибо.

  Ответить  
 
 автор: osmor   (07.05.2008 в 22:19)   личное сообщение
 
 

может DSN?
Без DSN не получится, должен же запрос знать где находится сервер и скакой базы брать данные

  Ответить  
 
 автор: Dmitry   (08.05.2008 в 11:38)   личное сообщение
 
 

Да. DSN - опечатался. так может как то можно прописать чтоб всегда с 1го сервера бралось. я пользователь ПО я жму на комбик и хочу увидеть рез-тат запроса а не выбирать какой то сервер или еще чтото там..

  Ответить  
 
 автор: osmor   (08.05.2008 в 12:30)   личное сообщение
 
 

Нужно создать DSN в администраторе ODBC
Панель управления- администрировнаие - Источники данных(ODBC)
Потом этот DSN нужно указать в запросе к серверу (при редактировании там есть оно свойств, где указывается соединение, там же можно сохранить пароль, правда он в открытом виде будет храниться)
ПОсле сохранение запроса при его запуске никаких вопросов возникать не должно

  Ответить  
 
 автор: Dmitry   (08.05.2008 в 13:16)   личное сообщение
 
 

хм. это надо будет сделать на каждой машине где бyдет запускаться приложение или только на той где установлен сервер БД ?

  Ответить  
 
 автор: osmor   (08.05.2008 в 14:09)   личное сообщение
 
 

что-то я наверное вру... можно указать в запросе к серверу соединение к серверу и без создания DSN
В строке подключения пишите

ODBC;DRIVER={sql server};DATABASE=ИМЯБАЗЫ;SERVER=192.168.100.1;UID=ИмяПользователя;PWD=ПАРОЛЬ;Trusted_Connection=No;DBPrompt_NoPrompt

  Ответить  
 
 автор: Dmitry   (12.05.2008 в 16:20)   личное сообщение
 
 

Сделал как вы сказали. ситуация прежняя. то есть не смотря на то что все данные конекшн стринга указаны в свойствах запроса при двойном клике по запросу(аксес вкладка Запросы) требует явно указать DSN.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList