Newsgroup: it.comp.appl.access
Titolo: Funzione Dlast

Salve al NG,
ho due tabelle collegate con relazione uno a molti
Tb_Contratti:                                            Tb_ContrattiCarri:
ID_Contratto (chiave primaria)                    ID_Contratto
NrContratto                                                ........
NrRinnovo
.....
a queste tabelle è collegata una maschera con la quale si inseriscono i
contratti.
In alcuni casi i contratti vengono rinnovati, quindi tutti i dati rimangono
invariati ad esclusione del NrRinnovo.
La mia esigenza è quella di duplicare i dati di un contratto presenti nelle
due tabelle, aumentando di una unità in NrRinnovo. A questo scopo uso il
codice sottostante (non sono un programmatore quindi scusatemi). Il mio
problema è che la funzione Dlast, che utilizzo per recuperare l'ultimo
valore dell'ID_Contratto della tabella Tb_Contratti, a volte, e non risco a
capire da cosa dipende, non mi ritorna l'ultimo ID_Contratto, e quindi il
codice mi duplica e posiziona correttamente i dati relativi alla tabella
Tb_Contratti, ma mi duplica e posizione nel punto sbagliato i dati relativi
alla tabella Tb_ContrattiCarro.
Per duplicare i dati faccio posizionare l'utente sulla maschera nella
posizione del contratto che deve essere duplicato.
------------------------
Private Sub DuplicaDati_Click()
Dim Nuovo_ID As Integer
Dim strsql As String
Dim SceltaUtente As Integer
    SceltaUtente = MsgBox("Vuoi Duplicare il Record Selezionato: " &
Me.ID_Contratto & vbCrLf _
            & "Vertragsnr Nr " & Me.NrContratto & " - Nachtrag Nr " &
Me.NrRinnovo & " " & vbCrLf _
            & "Aumentando di una unità il numero del Nachtrag ?", vbYesNo,
"Duplicazione Contratto")
    If SceltaUtente = 6 Then
        strsql = "INSERT INTO Tb_Contratti (StatusContratto, NrContratto,
NrRinnovo, Cliente, DurataNoleggio, " _
                & "DataInizioNoleggio, DataFineNoleggio, TermineDisdetta,
DataTermineDisdetta, TipoFatturazione, TipoPrezzo, " _
                & "TipoContratto, DurataPermanenzaOfficinaRiparazione,
DurataPermanenzaOfficinaRevisione, " _
                & "IndirizzoConsegnaCarri, IndirizzoSpedizioneCarri,
Disdetta, NoteRelativeAllaTipologiaDelContratto, " _
                & "ManutenzioneInclusa, TrasportoIncluso,
BonificaCisternaInclusa, Valuta, IVAFattura, TipoPagamento, BancaAppoggio)"
        strsql = strsql & " SELECT Tb_Contratti.StatusContratto,
Tb_Contratti.NrContratto, '" & Me.NrRinnovo + 1 & "', Tb_Contratti.Cliente,
" _
                & "Tb_Contratti.DurataNoleggio,
Tb_Contratti.DataInizioNoleggio, " _
                & "Tb_Contratti.DataFineNoleggio,
Tb_Contratti.TermineDisdetta, Tb_Contratti.DataTermineDisdetta, " _
                & "Tb_Contratti.TipoFatturazione, Tb_Contratti.TipoPrezzo,
Tb_Contratti.TipoContratto,
Tb_Contratti.DurataPermanenzaOfficinaRiparazione, " _
                & "Tb_Contratti.DurataPermanenzaOfficinaRevisione,
Tb_Contratti.IndirizzoConsegnaCarri, Tb_Contratti.IndirizzoSpedizioneCarri,
" _
                & "Tb_Contratti.Disdetta,
Tb_Contratti.NoteRelativeAllaTipologiaDelContratto,
Tb_Contratti.ManutenzioneInclusa, " _
                & "Tb_Contratti.TrasportoIncluso,
Tb_Contratti.BonificaCisternaInclusa, Tb_Contratti.Valuta, " _
                & "Tb_Contratti.IVAFattura, Tb_Contratti.TipoPagamento,
Tb_Contratti.BancaAppoggio"
        strsql = strsql & " FROM Tb_Contratti WHERE
(((Tb_Contratti.ID_Contratto)=" & Me.ID_Contratto & "));"
        DoCmd.RunSQL strsql
        Nuovo_ID = DLast("[ID_Contratto]", "Tb_Contratti")
        strsql = "INSERT INTO Tb_ContrattiCarri (ID_Contratto, Nr_Vagone,
DataInizioFatturazione, " _
                & "DataFineFatturazione, PrezzoNoleggioProprietario1,
PrezzoNoleggioProprietario2, Proprietario1, " _
                & "Proprietario2, GradoPuliziaConsegna,
GradoPuliziaRestituzione, PrezzoNoleggio)"
        strsql = strsql & " SELECT '" & Nuovo_ID & "' as NuovoID,
Tb_ContrattiCarri.Nr_Vagone, " _
                & "Tb_ContrattiCarri.DataInizioFatturazione,
Tb_ContrattiCarri.DataFineFatturazione, " _
                & "Tb_ContrattiCarri.PrezzoNoleggioProprietario1,
Tb_ContrattiCarri.PrezzoNoleggioProprietario2,
Tb_ContrattiCarri.Proprietario1, " _
                & "Tb_ContrattiCarri.Proprietario2,
Tb_ContrattiCarri.GradoPuliziaConsegna,
Tb_ContrattiCarri.GradoPuliziaRestituzione,
Tb_ContrattiCarri.PrezzoNoleggio"
        strsql = strsql & " FROM Tb_ContrattiCarri WHERE
(((Tb_ContrattiCarri.ID_Contratto)=" & Me.ID_Contratto & "));"
    Debug.Print Nuovo_ID
        DoCmd.RunSQL strsql
    Else
    End If
    Me.Requery
End Sub
----------------------------------
Se qualcuno avesse la bontà di dare un'occhiata al mio codice dandomi delle
dritte
Spero di essere stato chiaro nell'esposizione del problema
Grazie

 alla tabella Tb_ContrattiCarro.
Leggi bene l'help di Dlast().
Non restituisce l'ultimo record ma un record casuale.
Per avere l'ultimo valore di ID_Contratto, che suppongo sia numerico, usa
Dmax().
Ciao.
Namor

 ha scritto nel messaggio
news:GdRWe.5292$9l.1...@twister1.libero.it...

Grazie Namor,
sostituendo Dlast con Dmax funziona correttamente.
Ciao e Grazie ancora.
Charliebo59