2017-07-17 88 views
0

我尝试了每次迭代都可以在网上找到,但我仍然返回-1^为我的记录集计数,而不是实际计数。我尝试了CursorType, LockType, & CursorLocation的多种组合。这是我的代码。记录集计数返回-1

Sub test() 
    Dim FullQry As String 
    Dim qry1 As String 
    Dim qry2 As String 
    Dim qry3 As String 
    Dim qry4 As String 

'DECLARE VARIABLES FOR CONNECTION (HOW THE QUERY CONNECTS TO TERADATA) 
    Dim cn As ADODB.Connection 
    Set cn = New ADODB.Connection 

'DECLARE VARIABLES FOR RECORDSET (THE RESULTS OF THE SQL QUERY) 
    Dim rs As ADODB.Recordset 
    Set rs = CreateObject("ADODB.Recordset") 

'DECLARE VARIABLES FOR COMMAND (I THINK THIS MAKES TERADATA RUN THE QUERY AFTER A CONNECTION IS ESTABLISHED) 
    Dim cmdSQLData As ADODB.Command 
    Set cmdSQLData = New ADODB.Command 

'Connect to Teradata 
    cn.Open "Data Source = MOSAIC_PROD; Database= prod_flight_ops_combined_vw; Persist Security info=True; User ID=758673; Password=PSPL444eae???; Session Mode=System Default;" 
    Set cmdSQLData.ActiveConnection = cn 
    rs.CursorType = adOpenStatic 
    rs.LockType = adLockReadOnly 
    rs.CursorLocation = adUseClient 

'Define Qry 

    qry1 = "SELECT AIRLINE, FLT_NUM, SKD_ORIG, SKD_DEST, ACT_ORIG, ACT_DEST, SKD_TAIL, ACT_TAIL, SKD_SUBFLEET, ACT_SUBFLEET, SKD_OUT_GMT, SKD_IN_GMT,  ACT_OUT_GMT,  ACT_ON_GMT,  ACT_IN_GMT, ACT_OUT_DATE_GMT, ACT_IN_DATE_GMT, ACT_OFF_GMT, " 
    qry2 = "SKD_OUT_DATE_GMT , SKD_IN_DATE_GMT, SKD_BLK, ACT_BLK, SKD_AIR, ACT_AIR, SKD_TXOT, ACT_TXOT, SKD_TXIN, ACT_TXIN, SKD_OFF, ACT_OFF, SKD_ON, ACT_ON, SKD_TURN, ACT_TURN, AVAIL_TURN, MOGT, OP_STATUS, OP_STATUS_DESC, SUB_DIVERT_DESC , DELAY_MSG " 
    qry3 = "FROM prod_flight_ops_combined_vw.OPS_FLIGHT_LEG " 
    qry4 = "WHERE act_out_date_gmt > current_date - 45 and act_in_date_gmt < current_date - 1 and Airline = 'AA';" 

FullQry = qry1 & qry2 & qry3 & qry4 


    cmdSQLData.CommandText = FullQry 
    cmdSQLData.CommandType = adCmdText 
    cmdSQLData.CommandTimeout = 0 
    Set rs = cmdSQLData.Execute() 
    x = rs.RecordCount 


Set rs = Nothing 
Set cmdSQLData = Nothing 
cn.Close 
End Sub 

感谢您的帮助。

+0

什么是数据库类型? –

+1

您可能会发现,无论您使用的是何种RDBMS及其驱动程序,都无法实现。如果您发现这种情况,那么您可以发送一个计数(*)查询来获取记录数。也可以向上发送两个SQL语句(在大多数数据库中)用分号分隔,然后用'rs.nextrecordset'迭代存储在'rs'中的记录集。另外...根据RDBMS,您可以添加一个新字段来存储完整的记录集计数,并将字段COUNT(*)OVER()作为AllRecordCount添加到您现有的SELECT中。 – JNevill

回答

0
Sub test() 
    Dim cn As ADODB.Connection 
    Set cn = New ADODB.Connection 
    cn.Open "Data Source=MOSAIC_PROD" 

    Dim rs As ADODB.Recordset 
    Set rs = CreateObject("ADODB.Recordset") 

    rs.CursorLocation = adUseClient 

    rs.Open "SELECT * from FROM prod_flight_ops_combined_vw.OPS_FLIGHT_LEG", cn 

    MsgBox (rs.RecordCount) 


    cn.Close 
    Set rs = Nothing 
    Set cn = Nothing 
End Sub