Ciao Francesco,
prima di darti la mia interpretazione della possibile soluzione ti espongo una perplessità relativa alla tabella COSTIVET (e di conseguenza DettaglioCosti): come è possibile che tutti i record di COSTIVET riportino come CODVET lo stesso codice? L'unica spiegazione
che mi sono dato è che CODVET rappresenti il codice del vettore che applica quelle tariffe. Tuttavia mi sarei aspettato anche un codice di quella specifica tariffa che identifica univocamente ogni tariffa per quel vettore. Se questo fosse corretto allora nella
tabella DettaglioCosti non dovresti avere codice CODVET, o almeno non dovresti avere solo quel campo, ma ti servirebbe anche il codice tariffa peso e codice tariffa volume specifico. Questo ti consentirebbe di collegare COSTIVET e DettaglioCosti tramite CODVET
- CodiceTariffaPeso/Volume.
Tieni conto però che non conoscendo il tuo contesto potrei interpretare in modo non corretto le tue necessità.
La mi soluzione per rintracciare la tariffa passa per due funzioni pubbliche, una per il peso e l'altra per il volume:
Public Function fCostiVettorePeso(ByVal sPeso As String) As Double
Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("SELECT PrezzoPeso FROM COSTIVET " _
& "WHERE (" & Replace(sPeso, ",", ".") & " BETWEEN [PESODA] AND [PESOA])", _
dbOpenSnapshot, dbReadOnly)
fCostiVettorePeso = rst!PrezzoPeso
rst.Close
db.Close
Set rst = Nothing
Set db = Nothing
End Function
Public Function fCostiVettoreVolume(ByVal sVolume As String) As Double
Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("SELECT PrezzoVolume FROM COSTIVET " _
& "WHERE (" & Replace(sVolume, ",", ".") & " BETWEEN [VOLUMEDA] AND [VOLUMEA])", _
dbOpenSnapshot, dbReadOnly)
fCostiVettoreVolume = rst!PrezzoVolume
rst.Close
db.Close
Set rst = Nothing
Set db = Nothing
End Function
da richiamare, ad esempio, in una query in questo modo:
SELECT TIPDOC, DATDOC, CODART, DESART, QUANTI, VOLUME, PESUNI, MetriCubi, Peso, fCostiVettorePeso([Peso]) AS CostoVettorePeso, fCostiVettoreVolume([MetriCubi]) AS CostoVettoreVolume FROM DettaglioCosti;
Ottenendo quanto segue:

David