Link to home
Start Free TrialLog in
Avatar of taverny
taverny

asked on

Correct Syntax for SQL statement

I am trying to put a stored procedure in my code in VBA , but for some reason I can't figure the proper syntax to return the value.
I am able to get the result when I run in SQL but I can' t run it in my VBA code.

this is what I have in my sql server query:
DECLARE @I_sCompanyID smallint, @O_mNoteIndex numeric(19,5), @O_iErrorState int;
select @I_sCompanyID = CMPANYID from DYNAMICS..SY01500 where INTERID = 'TEST4';
exec DYNAMICS.[dbo].[smGetNextNoteIndex] @I_sCompanyID, 1, @O_mNoteIndex output,
@O_iErrorState output; SELECT @O_mNoteIndex

and my vba code is below , but when I try to get my value , it always return 1 instead of
711.00000

what am I missing?

thanks
David
Private Sub ButSave_Click()
Dim intReturn As Integer

    'Retrieve an ADO Connection for the current user
    Set cn = UserInfoGet.CreateADOConnection
    'Set the current Database company
    cn.DefaultDatabase = UserInfoGet.IntercompanyID
    cmd.ActiveConnection = cn

'Get next note id and then insert batch record
strsql = "DECLARE @I_sCompanyID smallint, @O_mNoteIndex numeric(19,5), @O_iErrorState int; " & _
         "select @I_sCompanyID = CMPANYID from DYNAMICS..SY01500 where INTERID = 'TEST4'; " & _
         "exec DYNAMICS.[dbo].[smGetNextNoteIndex] @I_sCompanyID, 1, @O_mNoteIndex output, " & _
         "@O_iErrorState output; SELECT @O_mNoteIndex"

cmd.CommandText = strsql
cmd.Execute intReturn
MsgBox (intReturn)





End Sub

Open in new window

SQLScript.JPG
Avatar of Daniel Reynolds
Daniel Reynolds
Flag of United States of America image

Why not just call the stored procedure?

strsql = "exec myStoredProcedure 'param1','param2'"
 
Avatar of taverny
taverny

ASKER

i thought that was what I was doing ,
I am actually trying to follow the info from an other question that I have open , and one expert told me to do it this way.
it seems to work in SQL but I guess I don't know how to store the value returned from this SQL statment
here is the original post:
https://www.experts-exchange.com/questions/26843202/Create-a-note-field-for-the-Item-Price-List-Maintenance.html
Avatar of taverny

ASKER

can someone help me on getting the value back from the sql statment?
I've attached an example of how I call a SP and get the output.  Basically, you have to define the SP parms, and whether it's an input or output.

But using your code above, you may be able to get the result by changing the code to this:

'(change the last bit of your SQL to SELECT @O_mNoteIndex AS NoteIndex
Dim oRs 'returned recordset

Set oRs = cmd.Execute(intReturn) 'intReturn only tells us how many rows were affected
On error resume next
MsgBox oRs(0) 'Not sure if index starts at 0 or 1
MsgBox oRs(1) 'Not sure if index starts at 0 or 1
MsgBox oRs("NoteIndex") 'May be able to use the output name if you make the change above


Const adCmdStoredProc   = 4
  Const adParamInput      = 1
  Const adParamOutput     = 2
  Const adInteger         = 3
  Const adDate            = 7
  Const adVarChar         = 200

  Set oCommand = CreateObject("ADODB.Command")
  
  oCommand.ActiveConnection = Conn
  oCommand.CommandTimeout = 600
  oCommand.CommandType = adCmdStoredProc
  oCommand.CommandText = "spAddReprintTransaction"
  oCommand.Parameters.Append oCommand.CreateParameter("@EntryID", adInteger, adParamInput, , EntryID)
  oCommand.Parameters.Append oCommand.CreateParameter("@DistribType", adVarChar, adParamInput, 50, DistribType)
  oCommand.Parameters.Append oCommand.CreateParameter("@FaxNumber", adVarChar, adParamInput, 50, FaxNumber)
  oCommand.Parameters.Append oCommand.CreateParameter("@UserName", adVarChar, adParamInput, 50, UserName)
  oCommand.Parameters.Append oCommand.CreateParameter("@FailureID", adInteger, adParamInput, , FailureID)
  oCommand.Parameters.Append oCommand.CreateParameter("@TransID", adInteger, adParamOutput)
  oCommand.Execute
  lTransID = oCommand.Parameters("@TransID")

Open in new window

Avatar of taverny

ASKER

Thank you for your reponse . I am gonna try that now.
Avatar of taverny

ASKER

at the same time that you reponded another expert also responded to my other questions. I will post his answer in here.
but since you seem to understand very well stored procedure , may be you can explain me a little more your code so I can try to do it on my own the next time it happens again.
this is what I understand so far if I look at your code:
line 1 thru 6 create constant with the value specified on the right
line 8 thru 11  we create a connection to the server

then that's where I am not following , line 12 13 , I am not sure if it is a defined name or it is a stored procedure.
then the following append the new constant to the stored procedure, how do you know what the stored procedure expect from the code.

thanks for your helpl, but I am very new to store procedure
ASKER CERTIFIED SOLUTION
Avatar of judgeking
judgeking
Flag of Canada image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of taverny

ASKER

Thanks for the response.
I will probably need your help in the near future regarding stored procedure , but thanks for your help already.
No problem, thanks for the 'accept'.