Ga naar inhoud

Fouten bij uitvoeren Oracle query in VBA


mani88

Aanbevolen berichten

Ik heb een probleem bij het uitvoeren van onderstaande query (op Oracle tabellen) in mijn VBA-code:

[font=Arial][size=1]1. "SELECT c.companycode, c.ss_name, cr.contract_set, e.originator, ge.ErrorExpression, ge.type, COUNT(*) AS aantal " & _[/size][/font]
[font=Arial][size=1]2. "FROM contracts c, errorlog e, contract_ranges cr, gekende_errors ge " & _[/size][/font]
[font=Arial][size=1]3. "WHERE c.CONTRACT_ID = e.CONTRACT_ID " & _[/size][/font]
[font=Arial][size=1]4. “AND cr.bns_dt = " & Format(Me.bns_dt.Value, strcJetDate) & " " & _[/size][/font]
[font=Arial][size=1]5. “AND ((e.contract_id) >= (cr.start_contract_range+0)) AND ((e.contract_id) <= (cr.end_contract_range+0)) " & _[/size][/font]
[font=Arial][size=1]6. "AND e.description LIKE '%' & ge.ErrorExpression & '%' " & _[/size][/font]
[font=Arial][size=1]7. “GROUP BY c.companycode, c.ss_name, cr.contract_set, e.ORIGINATOR, ge.ErrorExpression, ge.type"[/size][/font]

Ik voer dit SQL statement uit via VBA-code om een CSV-bestand aan te maken.

Probleem is dat de query niet het resultaat geeft dat ik verwacht.

De query geeft voor cr.bns_dt = '30/04/2011' in totaal 90 resultaten, waarvan 85 correct en 5 totaal verkeerd.

Deze 5 totaal verkeerde records hebben zelfs niet eens cr.bns_dt = '30/04/2011', maar '31/01/2011'.

Redenen die ik al heb uitgesloten:

- Het ligt niet aan een verkeerd gebruik van de datum, want ik heb de 4de regel al eens uit de query gehaald (om het resultaat van alle datums te zien) en ook dan kreeg ik foute records.

- Het ligt ook niet aan de 6de regel, want ik heb de join met tabel 'gekende_errros' (ge) + alle kolommen uit deze tabel eens uit de query gehaald en ook dan kreeg ik nog steeds de foute records te zien.

De 5 records die foutief zijn, hebben allemaal dezelfde fout: er wordt een verkeerde contract_set (uit 'contract_ranges' tabel) aan het contract gekoppeld. Bovendien is ook cr.bns_dt verkeerd, want deze (verkeerde) contract worden aanzien als cr.bns_dt = '30/04/2011' terwijl ze wel degelijk gekoppeld zijn aan contract_range met bns_dt = '31/01/2011'.

Ik vermoed dus dat het probleem zich situeert in de 5de regel, aangezien de foutieve business date uit de tabel contract_ranges (cr) komt. Bovendien is het de contract_set die fout is en die komt ook in de contract_ranges tabel voor.

De reden waarom ik in de 5de regel geen 'BETWEEN' gebruik, is omdat dit niet wordt aanvaard binnen VBA (geen idee waarom). Maar volgens mij komt de code die ik gebruik toch op hetzelfde neer dan een 'BETWEEN'? Bovendien gebruik ik ook toevoeging '+0', omdat ik anders de error 'Data type mismatch' krijg.

Opvallend is dat wanneer ik deze query run in Oracle SQL Developer, ik wél een volledig correct resultaat krijg. In SQL Developer krijg ik met dezelfde query enkel de 85 correct resultaten...

Ik weet niet waar Access de mist in gaat en hoop dat jullie mij kunnen helpen?

Extra info/opmerkingen:

- Elk contract (gekenmerkt door contract_id) is exact aan 1 contract_range gekoppeld.

- De Oracle tabellen bestaan in Access als 'Linked table' (koppeling gemaakt via DSN)

Link naar reactie
Delen op andere sites

Als je between in VB van access bedoeld zou normaal gezien moeten kunnen.

Maar dan dient je bovenaan dit op te geven:

Dim naam als date.

Maar in de BETWEEN gebruik ik geen date (wel 'Integer'), zie code.. :)

En die waarden kan ik niet definiëren met een 'Dim', aangezien het gaat om velden uit de tabel zelf:

c.contract_id BETWEEN cr.start_contract_range AND cr.end_contract_range

En het gaat inderdaad om een query die ik uitvoer in Access VB.

Link naar reactie
Delen op andere sites

Wat moet er between doen wat je vermeldt niks.

Je moet iets opgeven dat between kan uitrekenen zoals >0 of zo.

Trouwens: waarom laat je niet in query doen?

Zie regel 5 in mijn code (SQL)

En in mijn bericht had ik al gezegd dat BETWEEN niet lukte in VB, vandaar dat ik >= en <= gebruik..

Link naar reactie
Delen op andere sites

Gast
Dit topic is nu gesloten voor nieuwe reacties.
×
×
  • Nieuwe aanmaken...

Belangrijke informatie

We hebben cookies geplaatst op je toestel om deze website voor jou beter te kunnen maken. Je kunt de cookie instellingen aanpassen, anders gaan we er van uit dat het goed is om verder te gaan.