Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion GroupsFormsForms ProgrammingQueriesModules / DAO / VBAReports / PrintingMacrosDatabase DesignSecurityConversionImporting / LinkingSQL Server / ADPMultiuser / NetworkingReplicationSetup / ConfigurationDeveloper ToolkitsActiveX ControlsNew UsersGeneral 1General 2
Access DirectoryToolsTutorialsUser Groups
Related Topics
SQL ServerOther DB ProductsMS OfficeMore Topics ...

MS Access Forum / SQL Server / ADP / March 2006

Tip: Looking for answers? Try searching our database.

Call SQLServer UDF with decimal parameter

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Bodo - 29 Mar 2006 13:20 GMT
Hi,
when I attempt to call a SQLServer UDF from VBA/ADODB I get an errormessage:
Runtime error: -2147467259
Invalid scaling

UDF is as follows

CREATE FUNCTION [dbo].[fZeiteinheitUmrechnen] (
    @Wert as decimal(10,2) ,
    @QuellZeiteinheit as int,
               @ZielZeiteinheit as int
                        )  
RETURNS decimal(10,2) AS  
BEGIN
    Declare @ZeitZiel as decimal(10,2)
   
    Select @ZeitZiel = Round (@Wert * UMRECHNUNGSFAKTOR , 2)
    From TB_ZEITEINHEIT_UMRECHNUNG
    Where     ZEITEINHEITNUMMER = @QuellZeiteinheit  and
        ZIELZEITEINHEITNUMMER = @ZielZeiteinheit
   
    Return (@ZeitZiel)   
END

VBA Function:

Public Function ZeiteinheitUmrechnen( ZeitWert As Double,
                                                       Quellzeiteinheit As
Integer,
                                                       Zielzeiteinheit As
Integer) As Double

       Dim cmd As New ADODB.Command, par As ADODB.Parameter
       
       With cmd
           .CommandText = "dbo.fZeiteinheitUmrechnen"
           .CommandType = adCmdText
           Set par = .CreateParameter("pReturn", adDecimal,
adParamReturnValue)
           par.NumericScale = 10
           par.Precision = 2
           .Parameters.Append par
          Set par = .CreateParameter("pWert", adDecimal, adParamInput, ,
ZeitWert)
           par.NumericScale = 10
           par.Precision = 2
           .Parameters.Append par
           Set par = .CreateParameter("pQZeiteinheit", adInteger,
adParamInput, , Quellzeiteinheit)
           .Parameters.Append par
           Set par = .CreateParameter("pZZeiteinheit", adInteger,
adParamInput, , Zielzeiteinheit)
           .Parameters.Append par

           .ActiveConnection = CurrentProject.Connection
           .Execute
           ZeiteinheitUmrechnen = .Parameters("pReturn").Value
       End With

       Set cmd = Nothing
       Set par = Nothing

End Function

Can anyone help how to troubleshoot?

Signature

Thanks in advance
Bodo

Brendan Reynolds - 29 Mar 2006 13:50 GMT
<quote>
par.NumericScale = 10
par.Precision = 2
</quote>

Shouldn't that be the other way around?
par.Precision = 10
par.NumericScale = 2

Signature

Brendan Reynolds
Access MVP

> Hi,
> when I attempt to call a SQLServer UDF from VBA/ADODB I get an
[quoted text clipped - 62 lines]
>
> Can anyone help how to troubleshoot?
Bodo - 29 Mar 2006 14:16 GMT
Thanks Brendan,
now that I swapped values I no longer get the error.
However I get another error related to OLEDB: "Error within a multiple steps
process. ... Data not processed"

I modified the vba code like this:
With cmd
           .CommandText = "Select dbo.fZeiteinheitUmrechnen(?,?,?)"
           .CommandType = adCmdText
          ...
           ' error occured the next line
           .execute
end with

I couldn't find any online help code samples on how to specify udf
parameters from vba. Do you see anything wrong with the code above?

Signature

Thanks in advance
Bodo

> <quote>
> par.NumericScale = 10
[quoted text clipped - 71 lines]
> >
> > Can anyone help how to troubleshoot?
Sylvain Lafontaine - 29 Mar 2006 19:39 GMT
If you want to call an UDF instead of a SP, you should use the full string
with adCmdTxt:

"Select * from dbo.fZeiteinheitUmrechnen (1, 2, 3)"

However, UDF returns scalar variables or (in-memory) table variables, not a
resultset and as such, they should only be called from inside other
functions or SP and not by an application from outside SQL-Server.  Calling
an UDF from ADP require the use of an intermediate extended SP on
SQL-Server, hence your multi-step error message.  (The call to this extended
SP seems to be buggy when some strange parameters are used.)

When using ADP, you should always use SPs and adCmdStoredProc whenever
possible; not UDF and adCmdTxt.

Signature

Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF

> Thanks Brendan,
> now that I swapped values I no longer get the error.
[quoted text clipped - 92 lines]
>> >
>> > Can anyone help how to troubleshoot?
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.