Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server通过存储过程将表返回给MS Access_Sql Server_Vba_Ms Access_Stored Procedures_Ms Access 2010 - Fatal编程技术网

Sql server SQL Server通过存储过程将表返回给MS Access

Sql server SQL Server通过存储过程将表返回给MS Access,sql-server,vba,ms-access,stored-procedures,ms-access-2010,Sql Server,Vba,Ms Access,Stored Procedures,Ms Access 2010,我试图将一个表返回给MS Access,该表有50多列,行数可以从0到5000不等。对于每种情况,可以有多个记录和车辆类型 我可以执行存储过程,它工作得很好。我无法将数据返回MS Access 存储过程代码: 更改过程[dbo].[pJDB_导出] @dtefromint, @dteTo int, @Veh nvarchar80 像 开始 不计数; 声明@stWhere VARCHAR200 选择不同的[大小写] 进入tmp 从数据 其中[车辆类型]=@Veh 以及@dteFrom和@dteTo

我试图将一个表返回给MS Access,该表有50多列,行数可以从0到5000不等。对于每种情况,可以有多个记录和车辆类型

我可以执行存储过程,它工作得很好。我无法将数据返回MS Access

存储过程代码:

更改过程[dbo].[pJDB_导出] @dtefromint, @dteTo int, @Veh nvarchar80 像 开始 不计数; 声明@stWhere VARCHAR200 选择不同的[大小写] 进入tmp 从数据 其中[车辆类型]=@Veh 以及@dteFrom和@dteTo之间的CY 选择不同的* 从dbo.vdata_导出_V3_3_2 v v.[CASE]=t.[CASE]上的内部联接tmp t MS访问代码:

函数Exec_pJDB_exportsqlConn作为字符串 Dim conn作为ADODB连接 Dim cmd作为ADODB.Command Dim iFrom,iTo为整数 将stv设置为字符串 iFrom=1999 伊藤=2002年 stv=1至2吨商用卡车 Set conn=新的ADODB.连接 连接开放式DSN=车辆 conn.ConnectionString=sqlConn Set cmd=New ADODB.Command cmd.ActiveConnection=conn cmd.CommandType=adCmdStoredProc cmd.CommandText=pJDB_导出 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 关闭连接 端函数 返回一个。正是这个对象包含了您的记录。下面是一个例子:

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
快速概述:

表示文件的结尾。当您查看所有记录时,这是正确的。 不要忘记调用,否则do循环将永远继续!
如果愿意,可以将行rs.Fields0.Value更改为rs.FieldsYourFieldName.Value。我发现按名称引用字段比按职位引用字段更容易。

您遇到了什么问题?代码是否返回错误消息,或者您不确定如何访问记录?如果是后者,您将需要一个。没有返回任何内容,也没有错误消息。不知道如何通过ADO访问记录Check out ExecuteReader抱歉@pmbAustin,这是ADO.Net。这是经典的ADO,它不支持。这是可行的。最后一个问题。将其导出到excel或access表。一列的长度小于500,另一列的长度超过10000个字符。这很有效。最后一个问题。如果必须,我更喜欢将数据导出到表中,我可以将其转储到excel。一列的长度小于500个字符,另一列的长度大于10000个字符。导出数据的最佳方式是什么?我宁愿不必按列和行滚动记录集。感谢尽管VBA/ADO可以做到这一点,但有更简单的方法。可以将SP显示为表。作为额外的奖励,它们是免费的。