Problema DB Access

di il
6 risposte

Problema DB Access

Uongiorno a tutti,
ho un problema con un comando in visual basic su un database di Access: in pratica ho copiato un file di database da un pc all'altro e mentre sul primo funzionava perfettamente sul nuovo mi restituisce l'errore runtime 3326.
Di seguito riporto il codice del modulo di VB:

Option Compare Database
Option Explicit

Private Sub articoli_Click()
DoCmd.OpenForm "articoli"
End Sub

Private Sub scarica_Click()
Dim com, des, f As String
Dim qta, i As Integer
Dim pez, disp, cont As Single
pez = pezzi
DoCmd.OpenForm "da scaricare2"
DoCmd.OpenForm "carico 4"
Forms![carico 4]![codice SL].SetFocus
DoCmd.FindRecord codice
i = 51
Do
com = "": des = "": qta = 0: disp = 0: cont = 0
i = i - 1
DoCmd.GoToRecord , , acPrevious
If Not IsNull(Forms![carico 4]!componenti) Then
com = Forms![carico 4]!componenti
Else
com = Forms![carico 4]![codice SL]
End If
des = Forms![carico 4]!descrizione
qta = Forms![carico 4]![pz o gr]

f = "codice ='" & com & "' and fornitore='" & Forms![da scaricare]!provenienza & "'"
DoCmd.OpenForm "contenitori", , , f
If Not IsNull(Forms!contenitori!pezzi) Then disp = Forms!contenitori!pezzi
If Not IsNull(Forms!contenitori!id) Then cont = Forms!contenitori!id
DoCmd.Close acForm, "contenitori"

DoCmd.SelectObject acForm, "da scaricare2"
Forms![da scaricare2]!data = Forms![da scaricare]![data carico]
Forms![da scaricare2]![scaricare da] = Forms![da scaricare]!provenienza
Forms![da scaricare2]!assieme = Forms![da scaricare]!codice
Forms![da scaricare2]!quantità = pez
Forms![da scaricare2]!riga.SetFocus
DoCmd.FindRecord i
Forms![da scaricare2]!codice = com
Forms![da scaricare2]!descrizione = des
Forms![da scaricare2]!qtà = qta
Forms![da scaricare2]![da scaricare] = qta * pez
Forms![da scaricare2]!disponibilità = disp
Forms![da scaricare2]!contenitore = cont
Forms![da scaricare2]!elimCont = False
If Forms![carico 4]!riga = 1 Or IsNull(Forms![carico 4]!componenti) Then Exit Do
DoCmd.SelectObject acForm, "carico 4"
Loop
DoCmd.Close acForm, "carico 4"
DoCmd.SelectObject acForm, "da scaricare2"
f = "riga >=" & i
DoCmd.ApplyFilter , f
End Sub

Quando eseguo il comando di debug mi evidenza l'espressione
DoCmd.GoToRecord , , acPrevious
Qualcuno sa darmi un indicazione??
Ringrazio in anticipo e saluto,

Marco Garino

6 Risposte

  • Re: Problema DB Access

    Il problema principale è che tu legga e rispetti il Regolamento.

  • Re: Problema DB Access

    Buongiorno,
    ho letto e compreso il regolamento, se ho fatto qualcosa che lo viola prego di volerlo esplicitare!
    Grazie per il supporto,

    Marco
  • Re: Problema DB Access

    Da dove dice ... "Per rendere facilmente leggibile ..."
  • Re: Problema DB Access

    MarcoGarino ha scritto:


    Buongiorno,
    ho letto e compreso il regolamento, se ho fatto qualcosa che lo viola prego di volerlo esplicitare!
    Grazie per il supporto,
    Marco
    Punti 6 e 7 del Regolamento
  • Re: Problema DB Access

    Buongiorno a tutti,
    poichè sono stato ripreso (!) con ragione dagli utenti più anziani di questo forum riposto il codice con tutti i crismi.
    Option Compare Database
    Option Explicit
    
    Private Sub articoli_Click()
        DoCmd.OpenForm "articoli"
    End Sub
    
    Private Sub scarica_Click()
    Dim com, des, f As String
    Dim qta, i As Integer
    Dim pez, disp, cont As Single
        pez = pezzi
        DoCmd.OpenForm "da scaricare2"
        DoCmd.OpenForm "carico 4"
        Forms![carico 4]![codice SL].SetFocus
        DoCmd.FindRecord codice
        i = 51
        Do
            com = "": des = "": qta = 0: disp = 0: cont = 0
            i = i - 1
            DoCmd.GoToRecord , , acPrevious
            If Not IsNull(Forms![carico 4]!componenti) Then
                com = Forms![carico 4]!componenti
            Else
                com = Forms![carico 4]![codice SL]
            End If
            des = Forms![carico 4]!descrizione
            qta = Forms![carico 4]![pz o gr]
            
            f = "codice ='" & com & "' and fornitore='" & Forms![da scaricare]!provenienza & "'"
            DoCmd.OpenForm "contenitori", , , f
            If Not IsNull(Forms!contenitori!pezzi) Then disp = Forms!contenitori!pezzi
            If Not IsNull(Forms!contenitori!id) Then cont = Forms!contenitori!id
            DoCmd.Close acForm, "contenitori"
            
            DoCmd.SelectObject acForm, "da scaricare2"
            Forms![da scaricare2]!data = Forms![da scaricare]![data carico]
            Forms![da scaricare2]![scaricare da] = Forms![da scaricare]!provenienza
            Forms![da scaricare2]!assieme = Forms![da scaricare]!codice
            Forms![da scaricare2]!quantità = pez
            Forms![da scaricare2]!riga.SetFocus
            DoCmd.FindRecord i
            Forms![da scaricare2]!codice = com
            Forms![da scaricare2]!descrizione = des
            Forms![da scaricare2]!qtà = qta
            Forms![da scaricare2]![da scaricare] = qta * pez
            Forms![da scaricare2]!disponibilità = disp
            Forms![da scaricare2]!contenitore = cont
            Forms![da scaricare2]!elimCont = False
            If Forms![carico 4]!riga = 1 Or IsNull(Forms![carico 4]!componenti) Then Exit Do
            DoCmd.SelectObject acForm, "carico 4"
        Loop
        DoCmd.Close acForm, "carico 4"
        DoCmd.SelectObject acForm, "da scaricare2"
        f = "riga >=" & i
        DoCmd.ApplyFilter , f
    End Sub
    
    Spero di aver fatto tutto giusto, per il titolo non so cosa mettere in più perchè in realtà la causa scatenante il mio problema è proprio questo tipo di errore.
    Ringrazio tutti per il supporto che potete offrire e saluto cordialmente,

    Marco
  • Re: Problema DB Access

    MarcoGarino ha scritto:


    uongiorno a tutti,
    ho un problema con un comando in visual basic su un database di Access: in pratica ho copiato un file di database da un pc all'altro e mentre sul primo funzionava perfettamente sul nuovo mi restituisce l'errore runtime 3326.
    ...
    Quando eseguo il comando di debug mi evidenza l'espressione
    DoCmd.GoToRecord , , acPrevious
    ...
    Senza entrare per il momento "nel merito" del codice, ma considerando il fatto che su un PC funziona e su un altro no, le cose classiche da verificare sono:
    1) Verificare se ci sono Riferimenti mancanti (cosa che in teoria potrebbe succedere solo su versioni diverse di Access).
    2) Limiti di autorizzazione di "lettura/scrittura" su cartelle/file?
    3) Stessa versione di Access? (sia come "numero" sia come bit: 32/64)
    4) Stesso sistema operativo? (anche qui: numero e bit)
    (dando per scontato che siano entrambi aggiornati con le correzioni rilasciate da Microsoft o almeno entrambi i computer siano nelle stesse condizioni)
    Se alle domande 3 e 4 hai risposto no, specie sul discorso 32/64 bit allora le cose potrebbero complicarsi. Ma non metto il carro davanti ai buoi.
    Prima di perderlo, inserisco anche questo link: Compacting Access application db causes Run-Time error 3326 (prudenza e backup)

    Edito dopo parecchio, nella speranza che comunque tu rilegga tutto: entro anche nel merito del codice (un po') già che ci siamo
    Dim com, des, f As String
    Dim qta, i As Integer
    Dim pez, disp, cont As Single
    No! Eventualmente
    Dim com As String, des As String, f As String
    Dim qta As Integer, i As Integer
    Dim pez As Single, disp As Single, cont As Single
    se vuoi tenere le variabili con lo stesso data type sulla stessa riga di dichiarazione
    pez = pezzi
    ...
    DoCmd.FindRecord codice
    Dove attribuisci il valore a [pezzi] e [codice]?
Devi accedere o registrarti per scrivere nel forum
6 risposte