La voglia di migliorare quanto già scritto nel mio
'ContabFam' , ho sperimentato nel recente passato a scrivere un'unica istruzione SELECT di lettura per accedere ai contenuti di 2 o più tabelle del DB. di irferimento. Fi no all'altro ieri è andato tutto bene , ma ieri ho voluto tentare di rilevare in un'unica query il contenuto di tre tabelle con la seguente SELECT:
RecQuery = ApriDB.DB_Connection.Exec("SELECT * FROM partmovv,racodvoci,movimgg WHERE partmovv.CoVoPartGlob = '" & iNumCtoIni & "' AND partmovv.CoVoPartGlob = racodvoci.NumVoColleg AND racodvoci.NumVoCassa = movimgg.CoVocMovvgg ORDER BY partmovv.CoVoPartGlob AND partmovv.DtCoPartGlob AND partmovv.DtSolPartGlob AND partmovv.OraSolPartGlob")
Le tabelle, come si legge nella SELECT, sono
partmovv, racodvoci, movimggmovimgg → contiene i movimenti giornalieri di cassa
partmovv → contiene i movimenti giornalieri dei conti partitari contrapposti al c/cassa (chiamanti tecnicamente: conti di contropartita)
racodvoci → contiene i codici numerici di raccordo fra i sottoconti del c/cassa ed i rispettivi conti di contropartita. Ne segue che:
il codice numerico movimgg.CoVocMovvgg=101001001 riportato in un dato record di
movimgg é collegato al movimento di contropartita con codice numerico partmovv.CoVoPartGlob=401001001 tramite i codici riportati nel record della tabella racodvoci: | NumVoCassa=101001001 | NumVoColleg=401001001 |.
La query riportata sopra avrebbe dovuto permerttermi di risalire al movimento di cassa
movimgg, partendo dal movimento letto in
partmovvFin qua il ragionamento fila, ma la pratica non sempre corrisponde col ragionamento, infatti l'istruzione seguente alla select, riguardante il trattamento dei record letti:
If RecQuery.Available
For Each RecQuery
----- bla ----- bla ----- bla -----
Next
Endif
ha prodotto la lettura doppia degli stessi data, come se esistessero record duplicati nelle tabelle di DB. Ho potuto semplificare la query togliendo dal suo interno la tabella
racodvoci. Ciò è stato possibile grazie alla presenza di altri dati ripetuti nelle tabelle
partmovv movimgg . La query che nè derivata ha funzionato. Tuttavia mi rimane oscuro il motivo per cui la query riportata sopra non abbia funzionato. Ho compilato male la SELECT?