2016-03-20 32 views
-1

Aşağıdaki SQL sorgusu sonucunda sonuç veya boş excel sayfası bulunamadı. Durumumu kaldırırsam, ancak gerekli olan iyi çalışır. Kodumu düzeltmek için lütfen bana yardımcı olun. Kod Private Sub cmdOpenQuery_Click takipçisidir olan()VBA SQL sorgusu sonucu hatası

Dim strTableName As String 
Dim strFieldName As String 
Dim strFieldValue As String 
Dim strFV As String 
Dim strFieldType As String 
Dim strBaseSQL As String 
Dim strCriteria As String 
Dim varItem As Variant 
Dim strSQL As String 
Dim qdf As DAO.QueryDef 
Dim OutPut As String 
Dim intCounter As Integer 
Dim xlApp As Object 

For Each qdf In CurrentDb.QueryDefs 
    If qdf.Name = "MyQry" Then 
DoCmd.DeleteObject acQuery, "MyQry" 
Exit For 
End If 
Next 

strTableName = Me.[cboSelectTblQry] 
strFieldName = Me.[cboWhere] 
strFV = Me.[cboEqualto] 

strFieldType = CurrentDb.TableDefs(Me.cboSelectTblQry).Fields(Me.cboWhere).Type 

If strFieldType = 4 Then 
strFieldValue = "[" & strFV & "]" 
ElseIf strFieldType = 10 Then 
strFieldValue = "['" & strFV & "']" 
ElseIf strFieldType = 8 Then 
strFieldValue = "[#" & strFV & "#]" 
End If 


strBaseSQL = "SELECT " 

For intCounter = 0 To lstSelectTo.ListCount 
lstSelectTo.Selected(intCounter) = True 
Next intCounter 

For Each varItem In Me![lstSelectTo].ItemsSelected 
    strCriteria = strCriteria & "[" & Me![lstSelectTo].ItemData(varItem) & "]," 
Next 

strSQL = strBaseSQL & Left$(strCriteria, Len(strCriteria) - 1) & " FROM [" & strTableName & "]" & " Where [" & strFieldName & "] = strFieldValue " 

Set qdf = CurrentDb.CreateQueryDef("MyQry", strSQL) 

If cboFormat = "Excel" Then 
OutPut = "D:/Export_" & strTableName & "_" & Date & ".xlsx" 
DoCmd.TransferSpreadsheet acExport, , "MyQry", OutPut 
MsgBox " File has been exported to " & OutPut 

DoCmd.Close 
DoCmd.OpenForm "frmCreateQry" 


Set xlApp = CreateObject("Excel.Application") 
    xlApp.Workbooks.Open (OutPut) 
    xlApp.Visible = True 

ElseIf cboFormat = "PDF" Then 

OutPut = "D:/Export_" & strTableName & "_" & Date & ".pdf" 
DoCmd.OutputTo acOutputQuery, "MyQry", acFormatPDF, OutPut, True 
MsgBox " File has been exported to " & OutPut 

ElseIf cboFormat = "Word" Then 



End If 

ExitSub: 
    Exit Sub 
ErrorHandler: 
Resume ExitSub 
End Sub  
+0

'[ "& strFieldName &"] = strFieldValue "'-> Eğer, strFieldName işlevi, sayısal bir sütun anlamına gelir, kodunuz her zaman çalışır. Sütun bir tarih veya bir dize ise, strFieldValue öğesini sırasıyla # # veya ile yazmanız gerekir veya sırasıyla –

+0

@ThomasG - OP girişimi SQL dizgisi birleştirmesinin üzerindeki satırları görürseniz bunu yapmak için. bu değerleri parantez içinde kapattı ve VBA değişkeni olan strFieldValue'yu birleştirmedi, ancak SQL dizgisi ifadesine dahil etti. – Parfait

cevap

0

Sizin koşul aramaya değer olarak strFieldValue kullanıyor. Bunun yerine karşılaştırma için strFieldValue tarafından tutulan kullanımı kullanmalısınız. Bunu zaten strTableName ile düzgün yapıyorsun. Burada aynı fikirdir. Eklediğinizde, strFieldValue değerini tırnak içine almanız gerekir.

strSQL = strBaseSQL & Left$(strCriteria, Len(strCriteria) - 1) & " FROM [" & strTableName & "]" & " Where [" & strFieldName & "] = '" & strFieldValue & "'" 
+0

Yardımlarınız için hepinize teşekkürler .. Çalışmıyor – user2245124

+0

Yapılmadan önce strSQL'in son değeri nedir ve aldığınız hata nedir? – MikeC

0

Bazı düzeltmeler yaptım ve şu anda sayısal, metin ve tarih türü gibi tüm biçimler için çalışıyor. Tip durumda yapılan

ardından düzeltmeler: - strSQL içinde

If strFieldType = 4 Then 
strFieldValue = Me.cboEqualto 
ElseIf strFieldType = 10 Then 
strFieldValue = "'" & strFV & "'" 
ElseIf strFieldType = 8 Then 
strFieldValue = "#" & strFV & "#" 
End If 

ve aşağıdaki düzeltme: -

strSQL = strBaseSQL & Left$(strCriteria, Len(strCriteria) - 1) & " FROM [" & strTableName & "]" & " Where [" & strFieldName & "] = " & strFieldValue & ""