Хранимые процедуры Access 2003
От: white_znake  
Дата: 16.12.04 15:43
Оценка:
Здравствуйте, уважаемые коллеги.

Услышал от коллеги, что в Access 2003 появилась возможность использовать хранимые процедуры?! Я посмотрел help, в help'e по MS Access 2003 есть упоминание о конструкции CREATE PROCEDURE... но с Access 2003 я не работал, если создать хранимую процедуру можно, то как(такого объекта как stored procedure я не увидел)?
Re: Хранимые процедуры Access 2003
От: nzeemin Россия http://nzeemin.livejournal.com/
Дата: 16.12.04 17:47
Оценка:
Здравствуйте, white_znake, Вы писали:

_>Услышал от коллеги, что в Access 2003 появилась возможность использовать хранимые процедуры?! Я посмотрел help, в help'e по MS Access 2003 есть упоминание о конструкции CREATE PROCEDURE... но с Access 2003 я не работал, если создать хранимую процедуру можно, то как(такого объекта как stored procedure я не увидел)?


Насколько мне известно, CREATE PROCEDURE появился в Jet начиная с 4-ой версии, т.е. с Access 2000. Полноценной хранимой процедурой это не назовешь — в ней может быть определен только один оператор. Более того, насколько я видел, Access не видит особой разницы между PROCEDURE и VIEW, в интерфейсе и то и другое называется "запрос". Я разбирал структуру базы через ADOX и видел что в процессе жизни базы иногда VIEW может почему-то превратиться в PROCEDURE либо наоборот. Так что не надо разводить кипиш, хранимых процедур в Access нету и уже не будет.
Re[2]: Хранимые процедуры Access 2003
От: white_znake  
Дата: 17.12.04 08:40
Оценка:
Здравствуйте, nzeemin, Вы писали:

N>Здравствуйте, white_znake, Вы писали:


_>>Услышал от коллеги, что в Access 2003 появилась возможность использовать хранимые процедуры?! Я посмотрел help, в help'e по MS Access 2003 есть упоминание о конструкции CREATE PROCEDURE... но с Access 2003 я не работал, если создать хранимую процедуру можно, то как(такого объекта как stored procedure я не увидел)?


N>Насколько мне известно, CREATE PROCEDURE появился в Jet начиная с 4-ой версии, т.е. с Access 2000. Полноценной хранимой процедурой это не назовешь — в ней может быть определен только один оператор. Более того, насколько я видел, Access не видит особой разницы между PROCEDURE и VIEW, в интерфейсе и то и другое называется "запрос". Я разбирал структуру базы через ADOX и видел что в процессе жизни базы иногда VIEW может почему-то превратиться в PROCEDURE либо наоборот. Так что не надо разводить кипиш, хранимых процедур в Access нету и уже не будет.

Спасибо за содержательный ответ.
Я попробовал создать хранимую процедуру, ниже привожу код:

CREATE PROCEDURE AddObjectToTask @id_object number, @id_application number
AS
 SELECT count(*)  FROM UsingObjects WHERE Id_Appication = @id_application AND Id_Object = @id_object

В результате, все бы хорошо, но запрос не хочет сохраняться из-за ошибки:"Syntax error in CREATE TABLE statement", не могли бы посмотреть в чем проблема?
Re[3]: Хранимые процедуры Access 2003
От: nzeemin Россия http://nzeemin.livejournal.com/
Дата: 17.12.04 09:02
Оценка: 3 (1)
Здравствуйте, white_znake, Вы писали:

_>Я попробовал создать хранимую процедуру, ниже привожу код:

CREATE PROCEDURE AddObjectToTask @id_object number, @id_application number
AS
 SELECT count(*)  FROM UsingObjects WHERE Id_Appication = @id_application AND Id_Object = @id_object

_>В результате, все бы хорошо, но запрос не хочет сохраняться из-за ошибки:"Syntax error in CREATE TABLE statement", не могли бы посмотреть в чем проблема?

1. Если вы работаете с базой из MSAccess — идем в Сервис — Параметры — Таблицы и запросы, ставим галочку под "Синтаксис для SQL Server (ANSI 92)", затем ОК
2. Немного меняем оператор создания процедуры:
CREATE PROCEDURE AddObjectToTask (@id_object number, @id_application number)
AS
 SELECT count(*)  FROM UsingObjects WHERE Id_Appication = @id_application AND Id_Object = @id_object

Выполняем. В списке запросов появляется AddObjectToTask, открываем для него конструктор, переходим в режим SQL, видим:
PARAMETERS id_object IEEEDouble, id_application IEEEDouble;
SELECT Count(*) AS Выражение1
FROM UsingObjects
WHERE (((UsingObjects.Id_Appication)=[@id_application]) AND ((UsingObjects.Id_Object)=[@id_object]));

Вот такие пирогы...
Re[4]: Хранимые процедуры Access 2003
От: white_znake  
Дата: 17.12.04 09:51
Оценка:
Здравствуйте, nzeemin, Вы писали:

ОГРОМНОЕ СПАСИБО.
Re[5]: от модератора
От: Merle Австрия http://rsdn.ru
Дата: 17.12.04 10:11
Оценка:
1. Для того чтобы сказать "спасибо", нет никакой необходимости цитировать все предыдущее сообщение.
2. Для говорения "спасибо", вообще нет необходимости писать сообщение, для этого есть оценки.
Мы уже победили, просто это еще не так заметно...
Re[4]: Хранимые процедуры Access 2003
От: white_znake  
Дата: 17.12.04 10:14
Оценка:
Здравствуйте, nzeemin, Вы писали:


N>Вот такие пирогы...


А поддерживается ли синтаксис T-SQL?(т.е. можно ли использовать инструции IF () и тд.)
Re[5]: Хранимые процедуры Access 2003
От: nzeemin Россия http://nzeemin.livejournal.com/
Дата: 17.12.04 11:02
Оценка: 15 (2)
Здравствуйте, white_znake, Вы писали:

_>А поддерживается ли синтаксис T-SQL?(т.е. можно ли использовать инструции IF () и тд.)


Нет, синтаксис Transact-SQL НЕ поддерживается.

Вообще, Access'овский SQL — это ANSI SQL 92 плюс ряд функций характерных для VB/VBA/VBScript
(источник — Jet Expression Can Execute Unsafe Visual Basic for Applications Functions):

ABS array ASC ASCB ASCW ATN
CBOOL CBYTE CCUR CDATE CDBL choose
CHR CHR$ CHRB CHRB$ CHRW CHRW$
CINT CLNG COS CSNG CSTR CVAR
CvDate CVErr date DATE$ DATEADD dateDiff
datePart DATESERIAL DATEVALUE day DDB error
error$ EXP fix format format$ fv
hex hex$ HOUR IIF IMEStatus inStr
INT IPMT IRR isDate isEmpty ISERROR
isNull isNumeric isObject lCase lCase$ LEFT
LEFT$ LEFTB LEFTB$ LEN LENB LOG
lTrim lTrim$ MID MID$ MIDB MIDB$
MINUTE MIRR MONTH NOW NPER NPV
oct oct$ partition PMT PPMT PV
QBColor RATE RGB RIGHT RIGHT$ RIGHTB
RIGHTB$ rnd round rTrim rTrim$ SECOND
sgn SIN SLN space space$ sqr
str str$ strComp strConv string string$
switch SYD TAN TIME TIME$ timer
timeSerial TIMEVALUE TRIM TRIM$ typeName uCase
uCase$ val varType WEEKDAY YEAR


Так что вместо IF можно использовать IIf()...

Кроме того, допустимы некоторые вещи, характерные только для Access — например, функции DMin/DMax/DLookup/DCount (см. справку по Access).

Мне так и не удалось выяснить полный набор функций Jet SQL, хоть я и пытался.
Re[6]: Хранимые процедуры Access 2003
От: wildwind Россия  
Дата: 17.12.04 13:58
Оценка:
Здравствуйте, nzeemin, Вы писали:

N>(источник — Jet Expression Can Execute Unsafe Visual Basic for Applications Functions):


N>ABS array ASC ASCB ASCW ATN
N>...


Надо бы это в FAQ. А то народ периодически недоумевает: почему запрос в Access выполняется, а через ADO/ODBC/etc ни фига.
Re[7]: Хранимые процедуры Access 2003
От: nzeemin Россия http://nzeemin.livejournal.com/
Дата: 17.12.04 14:12
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Надо бы это в FAQ. А то народ периодически недоумевает: почему запрос в Access выполняется, а через ADO/ODBC/etc ни фига.


Такое скорее может быть связано с тем что в среде MSAccess по-умолчанию снят флажок и используется свой синтаксис, а при работе через ADO — всегда используется SQL92.
Re[8]: Хранимые процедуры Access 2003
От: wildwind Россия  
Дата: 17.12.04 14:16
Оценка:
Здравствуйте, nzeemin, Вы писали:

N>Такое скорее может быть связано с тем что в среде MSAccess по-умолчанию снят флажок и используется свой синтаксис, а при работе через ADO — всегда используется SQL92.


Нет, проблемы были именно с VBA-функциями.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.