powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как вызвать пользовательскую функцию MSSQL из VB?
14 сообщений из 14, страница 1 из 1
Как вызвать пользовательскую функцию MSSQL из VB?
    #33891908
Gwеst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
dim cmd as new ADODB.Command
dim i as integer
cmd.ActiveConnection="Driver={SQL Server};Server=Server1;trusted Connection=true;Database=DB1"
cmd.CommandText="myFunc"
cmd.CommandType=cmdStoredProc
'Дальше хочу вызвать функцию и сохранить результат в i
\Помогите пожалуйста
...
Рейтинг: 0 / 0
Как вызвать пользовательскую функцию MSSQL из VB?
    #33891962
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dim rs as New ADODB.Recordset


cmd.CommandText="Exec myFunc"
cmd.CommandType=cmdStoredProc
set rs = cmd.Execute
i=rs.Fields(0).Value
попробуй так ,точно не помню
...
Рейтинг: 0 / 0
Как вызвать пользовательскую функцию MSSQL из VB?
    #33891984
Gwеst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
ALTER  FUNCTION dbo.GetVersion()
RETURNS smallint 
AS
BEGIN
 return ( 1 )
END
Вот такая простая функция, но хотелось бы получить результат не через рекордсет, а чем-нибудь другим способом просто присвоить i результат.
...
Рейтинг: 0 / 0
Как вызвать пользовательскую функцию MSSQL из VB?
    #33892056
Барбудас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Посмотрите commandType: нужно выбрать не storedProc, а "простой запрос" (обычно выбирается по умолчанию, если не указано иное).

2) Не помню до-NETскую объектную модель ado (или это dao?). Если для команды есть метод вроде ExecuteScalar (возвращает значение ) то можно текст команды сделать "select dbo.GetVersion()" и выполнить
i= cmd.ExecuteScalar
Если есть только Execute то надо текст команды сделать
"select @param=dbo.GetVersion()"
, добавить output параметр @param
выполнить
cmd.Execute
и прочесть значение параметра.

думаю, так должно получиться.
...
Рейтинг: 0 / 0
Как вызвать пользовательскую функцию MSSQL из VB?
    #33892162
Барбудас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ау? чё-нть получилось?
...
Рейтинг: 0 / 0
Как вызвать пользовательскую функцию MSSQL из VB?
    #33892306
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
create Procedure sp_Login
(
   @Email varchar( 50 ),
   @Password varchar( 50 ),
   
   @FullName varchar( 100 ) output,
   @UserID int output,
   @ManageCount int output
)
As
   select @UserID =  0 
   select @UserID = UserID, @FullName = FirstName + ' ' + LastName
   from Users
   where Email like @email + '%'
   and password = @Password
      
   -- Exactly one unique user should be found, otherwise fail
   if @@rowcount <>  1 
   begin
      select @UserID =  0 
      return
   end
   
   select @ManageCount = count(*)
   from Users
   where ManagerID = @UserID

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    Dim cmd As New ADODB.Command
    Dim ret As Variant
    
    With cmd
        .ActiveConnection = dsn
        .CommandType = ADODB.adCmdStoredProc
        .CommandText = "sp_Login"
        .Parameters.Refresh
        .Parameters("@Email").Value = Email
        .Parameters("@Password").Value = Password
        .Execute
        
        UserID = .Parameters("@UserID")
        FullName = .Parameters("@FullName")
        ManageCount = .Parameters("@ManageCount")
    End With
...
Рейтинг: 0 / 0
Как вызвать пользовательскую функцию MSSQL из VB?
    #33892338
Gwеst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
метода ExecuteScalar нет;
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ALTER  FUNCTION dbo.GetVersion(@Parm as smallint)
RETURNS smallint 
AS
BEGIN
 set @Parm= 1 
 return (@Parm)
END
---------
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub dd()
Dim cmd As New ADODB.Command
Dim Pp As New ADODB.Parameter
Dim i As Integer
cmd.ActiveConnection = "Driver={SQL Server};Server=.;trusted Connection=true;Database=DB1"
cmd.CommandText = "dbo.GetVersion()"
Set Pp = cmd.CreateParameter("@Parm", adSmallInt, adParamInputOutput)
cmd.Parameters.Append Pp
Pp.Value =  5 
cmd.CommandType = adCmdStoredProc
cmd.Execute
'Тут ошибка Syntax error or access violation
...
Рейтинг: 0 / 0
Как вызвать пользовательскую функцию MSSQL из VB?
    #33892364
Gwеst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выполняю через QA
Код: plaintext
select ST= dbo.GetVersion( 5 )
дает результ 1
но вот через ADO никак не могу
...
Рейтинг: 0 / 0
Как вызвать пользовательскую функцию MSSQL из VB?
    #33892396
Gwеst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Барбудас
help please
...
Рейтинг: 0 / 0
Как вызвать пользовательскую функцию MSSQL из VB?
    #33892475
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Function GetVersion(adocn As ADODB.Connection, Version As Long) As String
    Dim adoRs As New Recordset
    
    On Error GoTo errh

        adoRs.Open "Select dbo.GetVersion(" & Version & ")", adocn, adOpenForwardOnly, adLockReadOnly

    If Not adoRs.EOF Then GetVersion = adoRs.Fields( 0 ).value
    adoRs.Close
    Exit Function
    
errh:
End Function
...
Рейтинг: 0 / 0
Как вызвать пользовательскую функцию MSSQL из VB?
    #33895705
Барбудас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GwеstБарбудас
help please

Если еще не поздно. :)
Вот этот код сработал:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub s()
Dim cmd As New ADODB.Command
Dim i As Integer
cmd.ActiveConnection = "provider=sqloledb.1;Server=.;Database=1;integrated security=SSPI;"
cmd.CommandText = "select ?=dbo.GetVersion()"
cmd.CommandType = adCmdText
cmd.Parameters.Append cmd.CreateParameter("@P1", adInteger, adParamOutput)

cmd.Execute

i = cmd.Parameters( 0 ).Value
Debug.Print i

End Sub

не забудь поменять connectionstring и вперед ;))
...
Рейтинг: 0 / 0
Как вызвать пользовательскую функцию MSSQL из VB?
    #33896141
Rustygold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Барбудас

?= лишнее
достаточно

Код: plaintext
cmd.CommandText = "select dbo.GetVersion()"

а результат можно получить и без параметра:

Код: plaintext
1.
2.
3.
4.
5.
6.
ALTER  FUNCTION dbo.GetVersion()
RETURNS smallint 
AS
BEGIN
 return ( 1 )
END

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub s()
Dim cn As New ADODB.Connection
Dim rs as New ADODB.Recordset
Dim i as Integer

rs.Open "select dbo.GetVersion()", cn, adOpenKeyset, adLockOptimistic

i = rs.Fields( 0 ).Value

rs.Close
set rs = Nothing
Debug.Print i

End Sub
...
Рейтинг: 0 / 0
Как вызвать пользовательскую функцию MSSQL из VB?
    #33896670
Барбудас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rustygold
а результат можно получить и без параметра:


это, насколько я понял, автор и сам в состоянии сделать.
его вопрос был:

Gwеst ... хотелось бы получить результат не через рекордсет, а чем-нибудь другим способом просто присвоить i результат.

:)
...
Рейтинг: 0 / 0
Как вызвать пользовательскую функцию MSSQL из VB?
    #33897236
Gwеst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спсибо всем.
Барбудас, большой тебе респект.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как вызвать пользовательскую функцию MSSQL из VB?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]