Ik voer volgende query uit in VBA om een rapport te genereren:
* 'contracts', 'contract_ranges' en 'errorlog' zijn Oracle tabellen.
* 'gekende_errors' is een Access tabel
Ik zou liefst in de query gewoon e.contract_id BETWEEN cr.start_contract_range AND cr.end_contract_range gebruiken maar dit werkt niet. Ik krijg dan volgende foutmelding: 'Data type mismatch', nochtans zijn alle drie deze velden als 'Number' gedefinieerd in Oracle. Hoe dan ook, via het omwegje (gebruik van '>=' en '<=' + vermeerderen met 0 om er een Integer van te maken) lukt het wel.
Het eigenlijke probleem is dat ik via deze query teveel records verkrijg.
Ik krijg in totaal een 100-tal rijen, waarvan er een 5-tal totaal verkeerd zijn (gegevens kloppen niet).
Wanneer ik de 'cr.bns_dt' van deze contracts controleer, blijkt dat deze verschillend zijn van de datum die ik gebruik in de expressie...
Als ik een Debug.Print doe van mijn SQL-statement en dit uitvoer in Oracle (mits een paar kleine wijzigingen, aangezien tabel 'gekende_errors' enkel bestaat in Access), dan krijg ik wel het verwachtte en correcte resultaat. Wat gaat er dan in Access verkeerd? Waarom selecteert hij daar 5 rijen totaal verkeerd met bovendien ook nog een verkeerde waarde voor 'cr.bns_dt' (terwijl ik net daarop filter)?
Ik heb wel bij de laatste uitvoering van mijn SQL-query in Access ook de waarde van 'cr.bns_dt' eens laten afdrukken en blijkt dat volgens Access de 'cr.bns_dt' wel degelijk dezelfde is als degene die ik gebruik als filter in de WHERE-clausule. Nochtans als ik in Oracle ga kijken, is dit wel degelijk een andere datum (en zou de rij dus niet mogen worden geselecteerd). Bovendien werkt de query w�l in Oracle en worden deze foute rijen daar niet geselecteerd.
Is er iemand die mij verder kan helpen aub?
Code:
SQL = "SELECT c.companycode, c.ss_name, cr.contract_set, e.originator, ge.ErrorExpression, ge.type, COUNT(*) AS aantal " & _
"FROM contracts c, errorlog e, contract_ranges cr, gekende_errors ge " & _
"WHERE c.CONTRACT_ID = e.CONTRACT_ID " & _
"AND ((e.contract_id) >= (cr.start_contract_range+0)) AND ((e.contract_id) <= (cr.end_contract_range+0)) " & _
"AND cr.bns_dt = #" & Format(Me.bns_dt.Value, "MM/DD/YYYY") & "# " & _
"AND e.description LIKE '%' & ge.ErrorExpression & '%' " & _
"GROUP BY c.companycode, c.ss_name, cr.contract_set, e.ORIGINATOR, ge.ErrorExpression, ge.type"
* 'contracts', 'contract_ranges' en 'errorlog' zijn Oracle tabellen.
* 'gekende_errors' is een Access tabel
Ik zou liefst in de query gewoon e.contract_id BETWEEN cr.start_contract_range AND cr.end_contract_range gebruiken maar dit werkt niet. Ik krijg dan volgende foutmelding: 'Data type mismatch', nochtans zijn alle drie deze velden als 'Number' gedefinieerd in Oracle. Hoe dan ook, via het omwegje (gebruik van '>=' en '<=' + vermeerderen met 0 om er een Integer van te maken) lukt het wel.
Het eigenlijke probleem is dat ik via deze query teveel records verkrijg.
Ik krijg in totaal een 100-tal rijen, waarvan er een 5-tal totaal verkeerd zijn (gegevens kloppen niet).
Wanneer ik de 'cr.bns_dt' van deze contracts controleer, blijkt dat deze verschillend zijn van de datum die ik gebruik in de expressie...
Als ik een Debug.Print doe van mijn SQL-statement en dit uitvoer in Oracle (mits een paar kleine wijzigingen, aangezien tabel 'gekende_errors' enkel bestaat in Access), dan krijg ik wel het verwachtte en correcte resultaat. Wat gaat er dan in Access verkeerd? Waarom selecteert hij daar 5 rijen totaal verkeerd met bovendien ook nog een verkeerde waarde voor 'cr.bns_dt' (terwijl ik net daarop filter)?
Ik heb wel bij de laatste uitvoering van mijn SQL-query in Access ook de waarde van 'cr.bns_dt' eens laten afdrukken en blijkt dat volgens Access de 'cr.bns_dt' wel degelijk dezelfde is als degene die ik gebruik als filter in de WHERE-clausule. Nochtans als ik in Oracle ga kijken, is dit wel degelijk een andere datum (en zou de rij dus niet mogen worden geselecteerd). Bovendien werkt de query w�l in Oracle en worden deze foute rijen daar niet geselecteerd.
Is er iemand die mij verder kan helpen aub?