|
|
|
| проект: приложение - access2003, БД - MSSQL2002
В базе есть хранимая процедура возвращающая('1','2','3') надо на форме в аксесе подключить ее как "источник строк" для колонки(если я правильно понимаю это и есть значения комбика). подскажите пожалуйста как это вообще можно реализовать? как сделать чтобы я увидел эту процедуру в аксесе? в поле "источник строк" я вижу запросы созданные в аксесе. возможно надо создать свой запрос. но как запросом вернуть данные возвращаемые хранимой процедурой? возможно надо сделать это средствами VBasic. если да то как?
спасибо. | |
|
| |
|
|
|
| ... да начинаю забывать
попробуйте создать запрос к серверу в котором укажите
"Exec ИМЯSP"
и уже этот запрос подсунуть как источник строк.
А через VBA можно создать Conncetion и в нем
Set rs = CurrentProject.Connection.Execute ("exec dbo.ИмяПроцедуры")
| получите Recordset с данными | |
|
| |
|
|
|
| Вроде бы "Exec ИМЯSP" так нельзя(пробовал делать так: создать запрос при помощи конструктора, правой кнопкой - режим SQL) - там можно только писать сам запрос сразу а хранимый вызывать нельзя. Так может там и написать весь sql-код? но я не знаю откуда получить в таком случае входные параметрвы для процедуры. На форме есть таблица для которой указан датасорс(таблица из БД). мне надо добавить столбец где для каждой записи в таблице будет комбик со значениями возвращаемыми моей процедурой(процедура должна принимать 1но из полей таблицы БД являющей датасорсом для таблицы на форме) | |
|
| |
|
|
|
| Нужно создать не просто запрос, а запрос к серверу. | |
|
| |
|
|
|
|
| пример вам дали. потрудитесь посмотреть в хелпе или погуглить - "ms access запрос к серверу", плз | |
|
| |
|
|
|
| не не могу. Просто в режиме конструктора запроса в меню "запрос"-"запрос SQL" - "К серверу", а в тексте запроса напишите EXEC...... | |
|
| |
|
|
|
| так. вроде получилось создать запрос к серверу способом вами описанным. но почему-то при подстановке его в качестве источника строк в выпадающем списке вместо списка возвращаемых значений я вижу только само название моего запроса. может потому что не передан входящий параметр(ожидаемый sql процедурой). а где и как его передать? | |
|
| |
|
|
|
| exec dbo.ИмяПроцедуры параметр1, параметр2 | |
|
| |
|
|
|
| а откуда получить "параметр1". он должен для каждой строки подставляться свой из таблицы(таблица - источник данных для грида. есть FK поле - его и надо подставить).
зы сорри за исключительную ламерность вопросов :)
ззы смущает факт что после создания запроса и двойному клику по нему открывается таблица результатов в случае же запроса к серверу открывается некая табличка где можно\нужно насраивать подключение к серверу. | |
|
| |
|
|
|
| В своствах запроса к серверу нужно указать подключение.
если нужно менять параметр, то можно менять сам текст запроса к серверу т.е. на событие ... ну не знаю например "текущая запись" или сами решите на какое вам удобнее пишите
Currentdb.querydefs("ИмяЗапросаКСерверу").sql = "Exec ИмяSP " & me.полеСПараметром
me.Список.RowSource = "ИмяЗапросаКСерверу"
|
| |
|
| |
|
|
|
| поставил данный вами код в обработчик GotFocus. посмотрел в дэбагере до выполнения кода RowSource = "имяЗапросаАксес" (выставляю руками в источнике строк). после выполнения кода оно такое же.. а на форме когда жму на комбик почему то опять вижу вместо списка значений только "имяЗапросаАксес" :(
>>"В своствах запроса к серверу нужно указать подключение."
а какое нужно выбрать?
сделал так. DNS -> New -> SqlServer(type) -> FileName:сервер где лежит БД -> FInish;
create new datasource: Description: DBName; Server:сервер где лежит БД (выбираем из комбика); with SQL authentification; next ..next; finish;
создалось новое DNS подключение и теперь когда я выбираю его и указываю sql подключение то выполняется sql запрос с параметром NULL.
по идее то что надо но в программе все равно возвращает вместо списка значений имя аксес-запроса
спасибо. | |
|
| |
|
|
|
| какой тип источника данных установлен для списка? | |
|
| |
|
|
|
| :) точно. бага была в этом. однако теперь при нажатии на комбик он требует явного указания DNS. можно это обойти?
спасибо. | |
|
| |
|
|
|
| может DSN?
Без DSN не получится, должен же запрос знать где находится сервер и скакой базы брать данные | |
|
| |
|
|
|
| Да. DSN - опечатался. так может как то можно прописать чтоб всегда с 1го сервера бралось. я пользователь ПО я жму на комбик и хочу увидеть рез-тат запроса а не выбирать какой то сервер или еще чтото там.. | |
|
| |
|
|
|
| Нужно создать DSN в администраторе ODBC
Панель управления- администрировнаие - Источники данных(ODBC)
Потом этот DSN нужно указать в запросе к серверу (при редактировании там есть оно свойств, где указывается соединение, там же можно сохранить пароль, правда он в открытом виде будет храниться)
ПОсле сохранение запроса при его запуске никаких вопросов возникать не должно | |
|
| |
|
|
|
| хм. это надо будет сделать на каждой машине где бyдет запускаться приложение или только на той где установлен сервер БД ? | |
|
| |
|
|
|
| что-то я наверное вру... можно указать в запросе к серверу соединение к серверу и без создания DSN
В строке подключения пишите
ODBC;DRIVER={sql server};DATABASE=ИМЯБАЗЫ;SERVER=192.168.100.1;UID=ИмяПользователя;PWD=ПАРОЛЬ;Trusted_Connection=No;DBPrompt_NoPrompt | |
|
| |
|
|
|
| Сделал как вы сказали. ситуация прежняя. то есть не смотря на то что все данные конекшн стринга указаны в свойствах запроса при двойном клике по запросу(аксес вкладка Запросы) требует явно указать DSN. | |
|
| |