2016-03-20 3 views
-1

В результате следующего SQL-запроса нет результата или пустой лист excel. Он отлично работает, если я удаляю условие, но оно необходимо. Так что любезно помогите мне исправить мой код с условием. Кодекс Последующие Private Sub cmdOpenQuery_Click()Ошибка результата запроса VBA SQL

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«'-> Если ваш 'strFieldName' относится к столбцу, который является типом числа, ваш код будет работать все время. Если столбец является датой или строкой, вы должны окружить' strFieldValue' '#' или кавычками соответственно –

+0

@ThomasG - OP попытался для этого, если вы видите строки над конкатенацией строки SQL. Однако OP en закрыл такие значения в скобках и не объединил переменную VBA 'strFieldValue', но включил ее в инструкцию строки SQL. – Parfait

ответ

0

Ваше где условия использования strFieldValue в качестве значения для поиска. Вместо этого вы должны использовать использование, проведенное strFieldValue для сравнения. Вы делаете это правильно с помощью strTableName. Это та же идея. При добавлении его вам нужно приложить значение strFieldValue в кавычках.

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

Спасибо за всех за помощь .. Не работает – user2245124

+0

Каково окончательное значение strSQL перед его выполнением и какова ошибка, которую вы получаете? – MikeC

0

Я внесла некоторые исправления, и теперь он работает отлично для всех форматов, таких как числовые, текстовые и дата.

После исправления, сделанные в типе условия: -

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

и после коррекции в strSQL: -

strSQL = strBaseSQL & Left$(strCriteria, Len(strCriteria) - 1) & " FROM [" & strTableName & "]" & " Where [" & strFieldName & "] = " & strFieldValue & "" 
Смежные вопросы