2017-05-17 53 views
0

目前我正在爲訪問應用程序的新報告工作。我用來填充報表的RecordSource的SQL命令在SQL/Server中提取數據,當我使用記錄集運行時,它也會提取數據;但是RecordSource表示沒有數據。VBA Recordset說有數據,但是me.recordsource說它是空的

我的問題是,有什麼我在做/不這樣做會導致SQL命令設置爲報表的RecordSource時不返回數據?

Private Sub Report_Open(Cancel As Integer) 


gs = "SELECT dbo.tblSubGrant.intAutoRecNum " 
gs = gs & ", dbo.tblSubGrantInstitutionContact.intSubGrantID " 
gs = gs & ", dbo.tblSubGrant.vcEncumbranceNumber " 
gs = gs & ", dbo.tblSubGrant.intFiscalYearID " 
gs = gs & ", dbo.v_InstitutionAllType.exprInstitutionName " 
gs = gs & ", dbo.tblGrantAwardType.vcGrantAwardTypeDescription " 
gs = gs & ", dbo.tblSubGrantInstitutionContactType.intSubGrantInstitutionContactTypeID " 
gs = gs & ", dbo.tblSubGrantInstitutionContactType.vcSubGrantInstitutionContactTypeDescription " 
gs = gs & ", aSubGrantListAmt.ExprAmtAward " 
gs = gs & ", CASE WHEN dbo.tblSubGrant.bitHoldClaim = 1 THEN 'OnHold' WHEN dbo.tblSubGrant.bitClosed = 1 THEN 'Closed' ELSE 'OPEN' END AS Status " 
gs = gs & ", dbo.tblSubGrantInstitutionContact.intInstitutionEmployeeID " 
gs = gs & "FROM dbo.tblSubGrant WITH(NOLOCK) " 
gs = gs & "INNER JOIN dbo.tblSubGrantInstitutionContact WITH(NOLOCK) " 
gs = gs & "ON dbo.tblSubGrant.intSubGrantID = dbo.tblSubGrantInstitutionContact.intSubGrantID " 
gs = gs & "INNER JOIN dbo.tblGrantAwardAwardTypeAllocation WITH(NOLOCK) " 
gs = gs & "ON dbo.tblSubGrant.intGrantAwardAwardTypeAllocationID = dbo.tblGrantAwardAwardTypeAllocation.intGrantAwardAwardTypeAllocationID " 
gs = gs & "INNER JOIN dbo.tblGrantAwardType WITH(NOLOCK) " 
gs = gs & "ON dbo.tblGrantAwardAwardTypeAllocation.intGrantAwardTypeID = dbo.tblGrantAwardType.intGrantAwardTypeID " 
gs = gs & "INNER JOIN dbo.tblSubGrantInstitutionContactType WITH(NOLOCK) " 
gs = gs & "ON dbo.tblSubGrantInstitutionContact.intSubGrantInstitutionContactTypeID = dbo.tblSubGrantInstitutionContactType.intSubGrantInstitutionContactTypeID " 
gs = gs & "LEFT OUTER JOIN dbo.v_InstitutionAllType WITH(NOLOCK) " 
gs = gs & "ON dbo.tblSubGrant.intInstitutionRecipientID = dbo.v_InstitutionAllType.ID " 
gs = gs & "LEFT OUTER JOIN " 
gs = gs & "(SELECT SUM (dbo.v_frmSubGrantListAmt.exprOrig) + SUM(dbo.v_frmSubGrantListAmt.exprSup) - SUM(dbo.v_frmSubGrantListAmt.exprRed) - SUM(dbo.v_frmSubGrantListAmt.exprLiq) AS ExprAmtAward " 
gs = gs & ", intSubGrantID " 
gs = gs & "FROM v_frmSubGrantListAmt WITH(NOLOCK) " 
gs = gs & "GROUP BY intSubGrantID) aSubGrantListAmt " 
gs = gs & "ON dbo.tblSubGrant.intSubGrantID = aSubGrantListAmt.intSubGrantID " 
gs = gs & "GROUP BY dbo.tblSubGrant.intAutoRecNum " 
gs = gs & ", dbo.tblSubGrantInstitutionContact.intSubGrantID " 
gs = gs & ", dbo.tblSubGrant.intFiscalYearID " 
gs = gs & ", dbo.v_InstitutionAllType.exprInstitutionName " 
gs = gs & ", dbo.tblGrantAwardType.vcGrantAwardTypeDescription " 
gs = gs & ", dbo.tblSubGrantInstitutionContactType.intSubGrantInstitutionContactTypeID " 
gs = gs & ", dbo.tblSubGrantInstitutionContactType.vcSubGrantInstitutionContactTypeDescription " 
gs = gs & ", dbo.tblSubGrant.vcEncumbranceNumber " 
gs = gs & ", dbo.tblSubGrantInstitutionContact.intInstitutionEmployeeID " 
gs = gs & ", CASE WHEN bitHoldClaim = 1 THEN 'OnHold' WHEN bitClosed = 1 THEN 'Closed' ELSE 'OPEN' END " 
gs = gs & ", dbo.tblSubGrant.intInstitutionRecipientID " 
gs = gs & ", dbo.tblSubGrantInstitutionContact.intSubGrantInstitutionContactTypeID " 
gs = gs & ", aSubGrantListAmt.ExprAmtAward " 
gs = gs & "HAVING dbo.tblSubGrantInstitutionContact.intInstitutionEmployeeID = " & Forms!frmBULKContactUpdate!intInstitutionEmployeeID & " " 
gs = gs & "AND (CASE WHEN dbo.tblSubGrant.bitHoldClaim = 1 THEN 'OnHold' WHEN dbo.tblSubGrant.bitClosed = 1 THEN 'Closed' ELSE 'OPEN' END = 'OPEN') " 
gs = gs & "AND dbo.tblSubGrantInstitutionContactType.intSubGrantInstitutionContactTypeID = " & Forms!frmBULKContactUpdate!intSubGrantInstitutionContactTypeID & " " 
gs = gs & "ORDER BY 5, 3 " 


Dim cnn As ADODB.Connection 
Dim rst As ADODB.Recordset 

Set cnn = CurrentProject.Connection 
Set rst = New ADODB.Recordset 

rst.Open gs, cnn, adOpenStatic, adLockReadOnly 

Me.RecordSource = gs 
DoEvents 

rst.Close 
cnn.Close 

Set rst = Nothing 
Set cnn = Nothing 
+0

恭喜您發現問題。在你的情況下,它只是一個調試問題,一個疏忽。 (您的問題代碼甚至沒有顯示您修復的部分...通過調用DoCmd.OpenReport)您的查詢也相當長,因此這個問題不可能有助於未來幫助任何人。在這種情況下,您可能會考慮刪除整個問題,或者只評論您修復它而不是回答。我知道你現在作爲一個新用戶是有限的,所以這是爲了將來的參考。無論如何,請回答新的問題! –

+0

我知道,因爲它是15年以上的古老代碼,我按照它的寫法工作,然後將它轉換爲限制通話時間的視圖。 – JacksonD

回答

0

我發現了這個問題。由於我不再直接將SQL命令設置爲Report屬性中的RecordSource,我忘記從調用DoCmd.OpenReport gstrDocName,acViewPreview中刪除條件部分。它試圖在WHERE子句上添加SQL命令。