AXISHK
asked on
Excel VBA calling stored proc
I have a VBA code that call a stored proc. Both stored procedure works fine on the SQL Server. My VBA code calling #2 is fine but no record is returned. Both stored procedures can return records on the SQL Server using Management Studio.
#1 (Execution time : 29s )
---
Create PROCEDURE [dbo].[wbDisplayBook]
@INVENTBATCHID VARCHAR(3000)
AS
BEGIN
SELECT A.INVENTBATCHID, A.COSTGROUPID FROM DynamicsAX_PRO.dbo.THK_LAS TWIPMATERI ALTRANS A
inner join dbo.split(@INVENTBATCHID,' ,') as e on A.INVENTBATCHID COLLATE DATABASE_DEFAULT = e.Data COLLATE DATABASE_DEFAULT
end
#2 (Execution time : 25s)
----
CREATE PROCEDURE [dbo].[sp_wbDisplayBook] @INVENTBATCHID VARCHAR(3000)
AS
BEGIN
SELECT A.INVENTBATCHID,D.ITEMID ,D.THK_INVENTD2ID, D.THK_INVENTD3ID, D.THK_INVENTD4ID, D.THK_INVENTDGOLDTYPEID, THK_REFBOMID,
CASE WHEN A.COSTGROUPID NOT LIKE 'ST%' THEN 4 ELSE B.STONETYPE END AS STONETYPE,
CASE WHEN A.COSTGROUPID NOT LIKE 'ST%' THEN SUM(OUTQTY) ELSE 0 END AS GoldCost,
CASE WHEN A.COSTGROUPID LIKE 'ST%' THEN CAST(CAST(SUM(OutQtySec) AS decimal) AS NVARCHAR(10))
+SUBSTRING(A.COSTGROUPID,4 ,3)+CAST(C AST(SUM(OU TQTY) AS decimal(20,2)) AS NVARCHAR(10)) Else '' END AS Material
into #TM1 FROM DynamicsAX_PRO.dbo.THK_LAS TWIPMATERI ALTRANS A
INNER JOIN DynamicsAX_PRO.dbo.BOMCost Group B ON B.COSTGROUPID=A.COSTGROUPI D
INNER JOIN DynamicsAX_PRO.dbo.INVENTB ATCH C ON A.INVENTBATCHID=C.INVENTBA TCHID AND C.DATAAREAID='OPR'
INNER JOIN DynamicsAX_PRO.dbo.BOMVERS ION D ON C.THK_REFBOMID=D.BOMID AND C.ITEMID=D.ITEMID AND D.DATAAREAID='OPR'
inner join dbo.split(@INVENTBATCHID,' ,') as e on A.INVENTBATCHID COLLATE DATABASE_DEFAULT = e.Data COLLATE DATABASE_DEFAULT
GROUP BY SUBSTRING(A.COSTGROUPID,4, 3),CASE WHEN A.COSTGROUPID NOT LIKE 'ST%' THEN 4 ELSE B.STONETYPE END,
A.COSTGROUPID,A.INVENTBATC HID,D.ITEM ID,D.THK_I NVENTD2ID, D.THK_INVE NTD3ID,D.T HK_INVENTD 4ID,D.THK_ INVENTDGOL DTYPEID,
THK_REFBOMID
select * from #TM1
END
VBA Code
--------------
'Connect to Database
conn.Open ConPro
conn.CommandTimeout = 0
cmd.ActiveConnection = conn
cmd.CommandTimeout = 0
cmd.Parameters.Append cmd.CreateParameter("INVEN TBATCHID", adVarChar, adParamInput, 3000, stPar1)
cmd.CommandText = "sp_wbDisplayBook"
cmd.CommandType = adCmdStoredProc
Set Rs = cmd.Execute(, , adCmdStoredProc)
#1 (Execution time : 29s )
---
Create PROCEDURE [dbo].[wbDisplayBook]
@INVENTBATCHID VARCHAR(3000)
AS
BEGIN
SELECT A.INVENTBATCHID, A.COSTGROUPID FROM DynamicsAX_PRO.dbo.THK_LAS
inner join dbo.split(@INVENTBATCHID,'
end
#2 (Execution time : 25s)
----
CREATE PROCEDURE [dbo].[sp_wbDisplayBook] @INVENTBATCHID VARCHAR(3000)
AS
BEGIN
SELECT A.INVENTBATCHID,D.ITEMID ,D.THK_INVENTD2ID, D.THK_INVENTD3ID, D.THK_INVENTD4ID, D.THK_INVENTDGOLDTYPEID, THK_REFBOMID,
CASE WHEN A.COSTGROUPID NOT LIKE 'ST%' THEN 4 ELSE B.STONETYPE END AS STONETYPE,
CASE WHEN A.COSTGROUPID NOT LIKE 'ST%' THEN SUM(OUTQTY) ELSE 0 END AS GoldCost,
CASE WHEN A.COSTGROUPID LIKE 'ST%' THEN CAST(CAST(SUM(OutQtySec) AS decimal) AS NVARCHAR(10))
+SUBSTRING(A.COSTGROUPID,4
into #TM1 FROM DynamicsAX_PRO.dbo.THK_LAS
INNER JOIN DynamicsAX_PRO.dbo.BOMCost
INNER JOIN DynamicsAX_PRO.dbo.INVENTB
INNER JOIN DynamicsAX_PRO.dbo.BOMVERS
inner join dbo.split(@INVENTBATCHID,'
GROUP BY SUBSTRING(A.COSTGROUPID,4,
A.COSTGROUPID,A.INVENTBATC
THK_REFBOMID
select * from #TM1
END
VBA Code
--------------
'Connect to Database
conn.Open ConPro
conn.CommandTimeout = 0
cmd.ActiveConnection = conn
cmd.CommandTimeout = 0
cmd.Parameters.Append cmd.CreateParameter("INVEN
cmd.CommandText = "sp_wbDisplayBook"
cmd.CommandType = adCmdStoredProc
Set Rs = cmd.Execute(, , adCmdStoredProc)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
What do you mean resultset , are you asking how many number of rows returned ? In Management Studio, it only have one windows with 34 rows returned.
Already use SET NOCOUNT ON but it doesn't help.
Tks
Already use SET NOCOUNT ON but it doesn't help.
Tks
ASKER
Sorry SET COUNT should work, my mistake. Tks
ASKER
however, the about SQL is an extraction only, and I need to redirect it to few temporary table before getting a result. Any workaround solution ?
Tks