Beste mensen,
De laatste tijd ben ik aan het stoeien met SQL statements in een vba code. Nu zou ik graag meer variabelen willen definieren en die verwerken in de SQL statement zodat er op meerdere waarden gezocht kan worden. De eerste twee punten zijn al gelukt namelijk: het zoeken op een auto naam (AUTO) middels de textbox ('var') en het wel of niet zoeken op exacte waarde (cbExact). Dit werkt prima.
Ik zou echter een combobox willen toevoegen (wat al gelukt is). De combobox bevat een keuzelijst (Auto, klant). Ik probeer een methode te vinden waarmee ik WHERE [AUTO] kan vervangen door de gekozen waarde via de combobox. Ik zou var2 kunnen definieren welke de uitkomst van de combobox bevat (auto of klant):
En bij het bovenstaande (Vanaf SQL) loopt het dus spaak. Ik de AUTO vervangen door var2 wat ik volgens op een verkeerde manier doe.
Kan iemand mij uitleggen hoe ik dit juist verander en ook aangeven waarom het op de voorgestelde manier moet? Op die manier kan ik er namelijk van leren.
Code tot nu toe (Die werkt)
De laatste tijd ben ik aan het stoeien met SQL statements in een vba code. Nu zou ik graag meer variabelen willen definieren en die verwerken in de SQL statement zodat er op meerdere waarden gezocht kan worden. De eerste twee punten zijn al gelukt namelijk: het zoeken op een auto naam (AUTO) middels de textbox ('var') en het wel of niet zoeken op exacte waarde (cbExact). Dit werkt prima.
Ik zou echter een combobox willen toevoegen (wat al gelukt is). De combobox bevat een keuzelijst (Auto, klant). Ik probeer een methode te vinden waarmee ik WHERE [AUTO] kan vervangen door de gekozen waarde via de combobox. Ik zou var2 kunnen definieren welke de uitkomst van de combobox bevat (auto of klant):
Code:
dim var2
var2 = Me.combobox2.value
SQL = "SELECT * FROM TABLEXXX WHERE '" & var2 & "'" = '" & var & "'"
En bij het bovenstaande (Vanaf SQL) loopt het dus spaak. Ik de AUTO vervangen door var2 wat ik volgens op een verkeerde manier doe.
Kan iemand mij uitleggen hoe ik dit juist verander en ook aangeven waarom het op de voorgestelde manier moet? Op die manier kan ik er namelijk van leren.
Code tot nu toe (Die werkt)
Code:
Sub ImportFromAccess()
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim dbPath As String
Dim SQL As String
Dim i As Integer
Dim var
'Error behandelaar
On Error GoTo errHandler:
Application.ScreenUpdating = False
On Error Resume Next
Worksheets("Import").Range("DataAccess").ClearContents
'Waar staat de database?
dbPath = "P:XXXXXXXX"
'De zoekwaarde die een gebruiker in kan typen in een textbox
var = Me.txtSearchString
Set cnn = New ADODB.Connection 'Nieuwe connectie
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath
If cbExact = True Then
SQL = "SELECT * FROM TABLEXXX WHERE AUTO = '" & var & "'"
Else
SQL = "SELECT * FROM RTABLEXXX WHERE AUTO LIKE '" & var & "%" & "'"
End If
Set rs = New ADODB.Recordset
rs.Open SQL, cnn
If rs.EOF And rs.BOF Then
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
Application.ScreenUpdating = True
MsgBox "There are no records in the recordset!", vbCritical, "No Records"
Me.lstDataFromAccess.RowSource = ""
Exit Sub
End If
Worksheets("Import").Range("A2").CopyFromRecordset rs
'Sluiten
rs.Close
cnn.Close
'Geheugen wissen
Set rs = Nothing
Set cnn = Nothing
'Scherm weer aan
Application.ScreenUpdating = True
Me.lstDataFromAccess.RowSource = "DataAccess"
On Error GoTo 0
Exit Sub
errHandler:
Set rs = Nothing
Set cnn = Nothing
MsgBox "Error " & Err.Number & " (" & Err.Description & ") during import"
End Sub