Tipo dato Long

di il
7 risposte

Tipo dato Long

Ciao a tutti

Ho notato che questo codice  che legge il num. dei record:

Private Sub NumRecordFrmDettaglioRegistrazioni(IdReg)
Me.Refresh
Dim con As ADODB.Connection
Dim rst As ADODB.Recordset
Set con = CurrentProject.Connection
Set rst = New ADODB.Recordset
rst.Open "Select * FROM TblDettRegistrazione", con, adOpenKeyset, adLockOptimistic
rst.Filter = "IdRegistrazione=" & IdReg
Dim NumRecord As Long
NumRecord = rst.RecordCount
MsgBox NumRecord
    If NumRecord > 1 Then
    DoCmd.RunCommand acCmdDeleteRecord
    End If
If NumRecord = 1 Then
DoCmd.RunCommand acCmdDeleteRecord
'Me.AllowAdditions = True
End If

If rst.EOF Then
MsgBox " Non ci sono record da eliminare"
Exit Sub
End If
rst.Close
con.Close
Set rst = Nothing
Set con = Nothing
rst.Close
con.Close
Set rst = Nothing
Set con = Nothing
End Sub

Dim NumRecord as long

l'istruzione NumRecord = rst.RecordCount  mi da problemi di tipo dato

Se gira su office 2010  va bene;  su office 365 no

Se dichiaro Dim NumRecord as LongLong  su office 365 va bene, 

E' chiaro che  posso operare solo su un pc 

Esiste un modo che mi consenta di non avere questo problemi e di operare su entrambi i pc?

Grazie

Saluti

RG

7 Risposte

  • Re: Tipo dato Long

    Un metodo potrebbe essere dichiarare la variabile come

    LongPtr

  • Re: Tipo dato Long

    21/11/2024 - oregon ha scritto:


    Un metodo potrebbe essere dichiarare la variabile come

    LongPtr

    +1

    https://learn.microsoft.com/en-us/answers/questions/1358987/different-datatypes-for-ado-record-count-in-access

  • Re: Tipo dato Long

    21/11/2024 - Rigiova75 ha scritto:

    MsgBox NumRecord
        If NumRecord > 1 Then
        DoCmd.RunCommand acCmdDeleteRecord
        End If
    If NumRecord = 1 Then
    DoCmd.RunCommand acCmdDeleteRecord
    'Me.AllowAdditions = True
    End If

    Intervengo per un motivo non oggetto del thread in senso proprio ma come osservazione sul codice.

    In tutti i casi di numero di record superiore a 0 esegui il comando di cancellazione del record. Perché usi due If? Forse perché vuoi cambiare la proprietà AllowAdditions della maschera solo se è 1? Ipotizzo che sia questa la tua idea, anche se la riga è commentata. Se così è, puoi fare

    MsgBox NumRecord
    If NumRecord > 0 Then
        DoCmd.RunCommand acCmdDeleteRecord
        Me.AllowAdditions = (NumRecord = 1)
    End If

    Se invece vuoi mantenere il risultato attuale commentala pure e se cambi idea la riattivi. Spero d'aver colto l'intenzione giusta.

  • Re: Tipo dato Long

    Ci sarebbe da capire che relazione c'è tra il conteggio dei records ADO e quelli che cancella nella maschera… perchè la dove fossero la stessa origine… va da se che tutto questo non ha senso… 


    Insomma è abbastanza evidente che il tutto richieda una riflessione… ci sono molti elementi che destano perplessità tecnica.

  • Re: Tipo dato Long

    21/11/2024 - oregon ha scritto:

    Un metodo potrebbe essere dichiarare la variabile come

    LongPtr

    Ciao Oregon

    Mi mancava questo passaggio Ho dato una lettura alla guida

    Grazie mille

  • Re: Tipo dato Long

    22/11/2024 - @Alex ha scritto:


    Ci sarebbe da capire che relazione c'è tra il conteggio dei records ADO e quelli che cancella nella maschera… perchè la dove fossero la stessa origine… va da se che tutto questo non ha senso… 


    Insomma è abbastanza evidente che il tutto richieda una riflessione… ci sono molti elementi che destano perplessità tecnica.

    Ciao Alex

    Allora questa sub conta i record della Forms!FrmTblRegistrazioni!FrmTblDettRegistrazioneInserimentoSingola.

    Quando entro nella Frm in modifica ( per cui edit  e delection= true) se tento di eliminare un record (di prodotto venduto) deve avere contezza dei restanti

    Quando sta per eliminare l'ultimo record deve consente l'aggiunta per evitare che un ordine resti senza dettOrdine ( unordine senza i relativi prodotti) 

    Infatti non consente di uscire dalla Frm se non viene inserito almeno un prodotto 

    Accetto consigli per migliorare il codice 

    Grazie 

    Saluti

  • Re: Tipo dato Long

    La form ha gia un Recordset quindi tutta la Pippa ADO, come intuito, non ha senso, sarebbe eventualmente bastato un DCOUNT… anche se tecnicamente migliorabile la logica funzionale.

    Ad esempio le form di Access hanno eventi transazionali… quelli che espongono il Cancel come parametro… tipo Delete e/o BeforeDelConfirm li conosci...? Li sai usare...?

    Tieni presente che sono un MUST da conoscere e non solo come esistenza, ma come funzionamento.

    https://learn.microsoft.com/en-us/office/vba/api/access.form.delete

    Nel caso dovresti approcciare in modo più strutturato magari cercando di approfondire meglio il modo migliore di sfruttare Access.

Devi accedere o registrarti per scrivere nel forum
7 risposte