Probleempje...
Ik voer een Execute commando uit op een ADODB Database in Access en gebruik daarbij de optie dbFailOnError. De (toevoeg)query die ik uitvoer kopieert alle velden uit Tabel1 naar Tabel2. Het ontwerp van Tabel2 ligt vast, maar het ontwerp van Tabel1 wordt bepaald door een Excel bestand die ik met het TransferSpreadsheet commando importeer. Hierdoor worden de veldtypes van Tabel1 bepaald door het type van het veld in Excel.
Indien de veldtypes van Tabel1 afwijken van de (gelijknamige) veldtypes uit Tabel2, en de query uitvoer zonder de optie dbFailOnError dan worden de records gewoon gekopieerd. Ondanks dat in Tabel1, Veld1 het type Tekst heeft, en de waarde: '19-09-2007' bevat, en Tablel2, Veld2 het type 'Datum/Tijd' heeft, worden de records netjes overgezet.
Ik moet echter de dbFailOnError optie aanzetten, zodat validatieregels in Tabel2 afgaan op het moment dat er een record (middels de toevoegquery) wordt gekopieerd. Ik krijg dan netjes de melding die ik in de validatietekst heb opgegeven. Een dergelijke melding ziet er als het volgt uit: Fout: F200: Een aantal records zijn niet geimporteerd omdat dit veld geen waarde bevat.. Errnr: 3316.
Het probleem is dat de dbFailOnError optie ook de conversiefout m.b.t. de eerder genoemde kopieeractie van de Tabel1.Veld1 (Tekst) naar Tabel2.Veld2 (Datum) afvangt. Hier krijg ik de logische melding: Gegevenstypen komen niet overeen in criteriumexpressie.. Errnr: 3464.
Het is de bedoeling dat de kopieerhandeling alleen blijft steken op een validatie fout, en niet op de conversiefout (omdat Tabel1.Veld1 tekst is, en Tabel2.Veld2 datum is).
De query: INSERT INTO Tabel2 SELECT * FROM Tabel1;
De vba code:
Samengevat:
Als ik dus dbFailOnError uit de een-na-laatste regel weghaal worden alle records goed gekopieerd, behalve de records waar er een validatie fout optreedt, alleen wordt de foutmelding niet getoond. Als ik dbFailOnError laat staan, krijg ik netjes de validatiefout voorgeschotelt. Alleen indien er een conversiefout optreedt (die zonder dbFailOnError goed gaat) krijg je een foutmelding die ik eigenlijk wil negeren.
Hoe kan ik dit omzeilen?
Ik voer een Execute commando uit op een ADODB Database in Access en gebruik daarbij de optie dbFailOnError. De (toevoeg)query die ik uitvoer kopieert alle velden uit Tabel1 naar Tabel2. Het ontwerp van Tabel2 ligt vast, maar het ontwerp van Tabel1 wordt bepaald door een Excel bestand die ik met het TransferSpreadsheet commando importeer. Hierdoor worden de veldtypes van Tabel1 bepaald door het type van het veld in Excel.
Indien de veldtypes van Tabel1 afwijken van de (gelijknamige) veldtypes uit Tabel2, en de query uitvoer zonder de optie dbFailOnError dan worden de records gewoon gekopieerd. Ondanks dat in Tabel1, Veld1 het type Tekst heeft, en de waarde: '19-09-2007' bevat, en Tablel2, Veld2 het type 'Datum/Tijd' heeft, worden de records netjes overgezet.
Ik moet echter de dbFailOnError optie aanzetten, zodat validatieregels in Tabel2 afgaan op het moment dat er een record (middels de toevoegquery) wordt gekopieerd. Ik krijg dan netjes de melding die ik in de validatietekst heb opgegeven. Een dergelijke melding ziet er als het volgt uit: Fout: F200: Een aantal records zijn niet geimporteerd omdat dit veld geen waarde bevat.. Errnr: 3316.
Het probleem is dat de dbFailOnError optie ook de conversiefout m.b.t. de eerder genoemde kopieeractie van de Tabel1.Veld1 (Tekst) naar Tabel2.Veld2 (Datum) afvangt. Hier krijg ik de logische melding: Gegevenstypen komen niet overeen in criteriumexpressie.. Errnr: 3464.
Het is de bedoeling dat de kopieerhandeling alleen blijft steken op een validatie fout, en niet op de conversiefout (omdat Tabel1.Veld1 tekst is, en Tabel2.Veld2 datum is).
De query: INSERT INTO Tabel2 SELECT * FROM Tabel1;
De vba code:
VBScript:
1
2
3
4
5
6
7
8
9
10
11
| Dim db As DAO.Database Dim strSql As String Dim qryDefTabel1ToTabel2 As QueryDef Set db = CurrentDb Set qryDefTabel1ToTabel2 = db.QueryDefs("qryTabel1ToTabel2") strSql = qryDefTempToImport.SQL On Error GoTo ErrImportDisplay db.Execute strSql, dbFailOnError On Error GoTo ErrImportDisplay |
Samengevat:
Als ik dus dbFailOnError uit de een-na-laatste regel weghaal worden alle records goed gekopieerd, behalve de records waar er een validatie fout optreedt, alleen wordt de foutmelding niet getoond. Als ik dbFailOnError laat staan, krijg ik netjes de validatiefout voorgeschotelt. Alleen indien er een conversiefout optreedt (die zonder dbFailOnError goed gaat) krijg je een foutmelding die ik eigenlijk wil negeren.
Hoe kan ik dit omzeilen?