Ik heb problemen met het volgende:
Binnen excel verplaats ik data van het ene werkblad naar het andere. Deze verplaatsing vindt plaats met behulp van SQL aan de hand van enkele selectiecriteria die de gebruiker kan opgeven.
Dit doe ik met behulp van de volgende VBA code:
De SQL query die aan de procedure getData aangeboden wordt, wordt in een eerder stadium bepaald en kan er alsvolgt uitzien:
of
De kolom vloer bevat altijd strings, en levert geen problemen op.
Zo heb ik ook een kolom oppervlak, waarin altijd een double staat. Ook geen problemen.
Soms wordt er een selectie gemaakt op etage. In de kolom etage komen bijvoorbeeld de volgende waarden voor:
De procedure die de SQL query genereert plaatst automatisch quotjes om de waarden:
Hierbij krijg ik een foutmelding: Data type mismatch in criteria expression.
Als ik de procedure aanpas, en ik bij het opbouwen van de SQL string de quotjes weglaat komt de query er alsvolgt uit te zien:
Geen probleem, maar kan ik geen waarde zoals ‘Begane grond’ opgeven. Wat helemaal problemen oplevert is een where statement waarbij ik wil filteren op de 1e verdieping en beganegrond.
Wat ik dus wil is dat ik getallen in de DATASET afdwing als string.
Dit krijg ik echter niet voor elkaar. Wat heb ik geprobeerd:
- Cellopmaak als string
- Convert to string in SQL code
- In code bepalen of het een integer is, en daarmee de SQL string aanpassen. Dit gaat goed als ik alleen maar integers of strings in mijn query opneem. Dit is te kort door de bocht…
Wie kan mij helpen?
Binnen excel verplaats ik data van het ene werkblad naar het andere. Deze verplaatsing vindt plaats met behulp van SQL aan de hand van enkele selectiecriteria die de gebruiker kan opgeven.
Dit doe ik met behulp van de volgende VBA code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| Sub getData(SQL As String) Dim rst As ADODB.Recordset Dim ConnectionString As String --bepaal de brontabel en noem deze range DATASET Call setRangeSQL(Worksheets("Blad1"), 10, "DATASET") ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.FullName & ";" & _ "Extended Properties=Excel 8.0;" Set rst = New ADODB.Recordset On Error GoTo Cleanup Call rst.Open(SQL, ConnectionString, CursorTypeEnum.adOpenForwardOnly, LockTypeEnum.adLockReadOnly, CommandTypeEnum.adCmdText) |
De SQL query die aan de procedure getData aangeboden wordt, wordt in een eerder stadium bepaald en kan er alsvolgt uitzien:
SQL:
1
| SELECT * FROM DATASET WHERE [vloer] IN ('TAPIJT') |
of
SQL:
1
| SELECT * FROM DATASET WHERE [vloer] IN ('TAPIJT', ‘STEEN’) |
De kolom vloer bevat altijd strings, en levert geen problemen op.
Zo heb ik ook een kolom oppervlak, waarin altijd een double staat. Ook geen problemen.
Soms wordt er een selectie gemaakt op etage. In de kolom etage komen bijvoorbeeld de volgende waarden voor:
1 |
2 |
3 |
Begane grond. |
De procedure die de SQL query genereert plaatst automatisch quotjes om de waarden:
SQL:
1
| SELECT * FROM DATASET WHERE [etage] IN ('1') |
Hierbij krijg ik een foutmelding: Data type mismatch in criteria expression.
Als ik de procedure aanpas, en ik bij het opbouwen van de SQL string de quotjes weglaat komt de query er alsvolgt uit te zien:
SQL:
1
| SELECT * FROM DATASET WHERE [etage] IN (1) |
Geen probleem, maar kan ik geen waarde zoals ‘Begane grond’ opgeven. Wat helemaal problemen oplevert is een where statement waarbij ik wil filteren op de 1e verdieping en beganegrond.
Wat ik dus wil is dat ik getallen in de DATASET afdwing als string.
Dit krijg ik echter niet voor elkaar. Wat heb ik geprobeerd:
- Cellopmaak als string
- Convert to string in SQL code
- In code bepalen of het een integer is, en daarmee de SQL string aanpassen. Dit gaat goed als ik alleen maar integers of strings in mijn query opneem. Dit is te kort door de bocht…
Wie kan mij helpen?