SQL 服务器 return table 通过存储过程到 MS Access

SQL Server return table to MS Access via stored procedure

我正在尝试 return table 回到 MS Access,它有 50 多列,行可以从 0 到 5000 不等。对于每种情况,可以有多个记录和车辆类型。

我可以执行存储过程并且工作正常。我无法将数据 return 返回到 MS Access。

存储过程代码:

ALTER PROCEDURE [dbo].[pJDB_Export] 
    (@dteFrom int, 
     @dteTo int,
     @Veh nvarchar(80))
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @stWhere VARCHAR(200)

    SELECT DISTINCT [Case] 
    INTO #tmp 
    FROM data 
    WHERE [VEHICLE TYPE] = @Veh 
      AND (CY BETWEEN @dteFrom AND @dteTo)

    SELECT DISTINCT * 
    FROM dbo.vdata_Export_V3_3_2 v
    INNER JOIN #tmp t ON v.[CASE] = t.[CASE] 

MS 访问代码:

Function Exec_pJDB_export(sqlConn as string)
    Dim conn As ADODB.Connection
    Dim cmd As ADODB.Command

    Dim iFrom, iTo As Integer
    Dim stv As String
    iFrom = 1999
    iTo = 2002
    stv = "1 TO 2 TON TRUCKS (COMMERCIAL)"
    Set conn = New ADODB.Connection

    conn.Open "DSN=Cars"
    conn.ConnectionString = sqlConn
    Set cmd = New ADODB.Command
    cmd.ActiveConnection = conn
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "pJDB_export"

    cmd.Parameters.Append cmd.CreateParameter("@dteFrom", adInteger, adParamInput, , iFrom)
    cmd.Parameters.Append cmd.CreateParameter("@dteTo", adInteger, adParamInput, , iTo)
    cmd.Parameters.Append cmd.CreateParameter("@vehicle", adVarChar, adParamInput, 80, stv)

    cmd.Execute
    conn.Close

End Function

execute method returns a recordset object。此对象包含您的记录。这是示例:

Function Exec_pJDB_export(sqlConn As String)
    Dim conn As ADODB.Connection
    Dim cmd As ADODB.Command
    Dim rs As ADODB.Recordset               ' ADO recordset object, for accessing records.

    Dim iFrom, iTo As Integer
    Dim stv As String
    iFrom = 1999
    iTo = 2002
    stv = "1 TO 2 TON TRUCKS (COMMERCIAL)"
    Set conn = New ADODB.Connection

    conn.Open "DSN=Cars"
    conn.ConnectionString = sqlConn
    Set cmd = New ADODB.Command
    cmd.ActiveConnection = conn
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "pJDB_export"

    cmd.Parameters.Append cmd.CreateParameter("@dteFrom", adInteger, adParamInput, , iFrom)
    cmd.Parameters.Append cmd.CreateParameter("@dteTo", adInteger, adParamInput, , iTo)
    cmd.Parameters.Append cmd.CreateParameter("@vehicle", adVarChar, adParamInput, 80, stv)

    ' This line has changed.
    Set rs = cmd.Execute()


    ' Loops over the records.
    Do Until rs.EOF

        ' Display the contents of column one to the user.
        MsgBox rs.Fields(0).Value

        rs.MoveNext
    Loop



    rs.Close
    conn.Close
End Function

快速概览:

  1. EOF 代表 文件结尾 。当您查看所有记录时,它是正确的。
  2. 不要忘记调用 MoveNext,否则 do 循环将永远持续下去!

rs.Fields(0).Value 可以更改为 rs.Fields("YourFieldName").Value,如果您愿意的话。我发现按名称而不是位置来引用字段更容易。