Aiuto aumento esponenziale database dopo query

Anonimo
2019-02-08T23:10:13+00:00

Ciao,

in azienda era stato creato un software per un lavoro e poi è stato abbandonato,

avevo necessità di utilizzare uno strumento per aiutarmi con il magazzino e me lo sono personalizzato

un pò imparando ad utilizzare access da solo.

Il Database è diviso in FE e BE e viene usato con Access runtime perchè abbiamo solamente una licenza Access ed è condiviso in rete e risiede su un pc, lo utilizziamo io e 2 miei colleghi.

In sostanza esiste una tabella dove io inserisco tutto il materiale che possiede un serial number e gli altri 2 utenti

assegnano questi alcuni di questi seriali tramite una maschera che, legge da questa tabella e ne crea un'altra

creando una "commessa" che può contenere piu oggetti e seriali, questa tabella a sua volta ne genera un'altra identica

che serve come scambio.

Quando l'utente crea la commessa si creano dei campi dove andrà ad inserire i vari serialnumber dei componenti, quando si chiude la maschera la query

va a scrivere nelle 2 tabelelle, cancella tutti i campi che non sono stati compilati e li ricopia sull'altra.

Il problema che è sorto da un po di tempo è che dopo qualche inserimento il database si ingrandisce passa da 6/7 MB e può arrivare anche 1.7GB.

Non saprei dove e cosa modificare.

La query è stata scritta così:

Option Compare Database

Private Sub Form_Close()

DoCmd.SetWarnings False

DoCmd.OpenQuery "qryUpdateRemoveBlanks1"

DoCmd.OpenQuery "qryValidateToAssignementDetails1"

DoCmd.SetWarnings True

End Sub

Private Sub Form_Current()

  Dim intMaxNumRecs As Integer

    intMaxNumRecs = DLookup("[CountOfstrPartNumber]", "qryREC12SourceDataAssemblyPN", "[strAssemblyPartNumber]= TempVars!VarAssemblyPartNumber")

    If Me.NewRecord Then

        With Me.RecordsetClone

            If .RecordCount > 0 Then

                .MoveLast:  .MoveFirst

                If .RecordCount >= intMaxNumRecs Then

                    MsgBox "This Assembly has only " & intMaxNumRecs & " Serialized Components"

                    .MoveLast

                    Me.Requery

                End If

            End If

        End With

    End If

End Sub

Private Sub Form_Error(DataErr As Integer, Response As Integer)

If DataErr = 3201 Then

MsgBox "Il seriale che hai inserito non esiste, Verifica!  The Serial Number of the Item you entered does not exist in the Database, please verify!"

Response = acDataErrContinue

ElseIf DataErr = 3022 Then

MsgBox "Il seriale che hai inserito è già stato assegnato ad un altro assieme Verifica!  The Serial Number of the Item you entered is already assigned to an assembly, please verify!"

Response = acDataErrContinue

Else

MsgBox "Error No.:" & DataErr

End If

End Sub

Private Sub strCompnentLotNumber_LostFocus()

If IsNull(Me.strCompnentLotNumber) Then

Else

Me.strDateAssigned.Value = Me.Text21.Value

Me.strTechnicianName.Value = Me.Text23.Value

Me.strTimeAssigned.Value = Me.Text25.Value

End If

End Sub

Private Sub strComponentSerialNumber_LostFocus()

If IsNull(Me.strComponentSerialNumber) Then

Else

TempVars!VarComponentSerialNumber = Me.strComponentSerialNumber.Value

Dim v As String

v = DLookup("[strPartNumber]", "tblReceivingDetails", "strComponentSerialNumber = TempVars!VarComponentSerialNumber")

    If v = strPartNumber Then

Me.strDateAssigned.Value = Me.Text21.Value

Me.strTechnicianName.Value = Me.Text23.Value

Me.strTimeAssigned.Value = Me.Text25.Value

DoCmd.RefreshRecord

DoCmd.SetWarnings False

DoCmd.OpenQuery "qryUpdateAssignementStatus"

DoCmd.SetWarnings True

    Else

    MsgBox "Il partnumber associato al seriale inserito non corrisponde a quello che dovresti inserire, probabilmente non è stato trasformato!!        The Part Number associated with the Serial Number you entered does not match the the Part Number on your sheet, Please verify?"

    DoCmd.Requery

    End If

End If

End Sub

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

11 risposte

Ordina per: Più utili
  1. Anonimo
    2019-02-11T09:51:27+00:00

    Per darti una mano a risolvere i problema bisognerebbe avere i due file con la base dati che ne abbia un minimo per provare, se puoi postali.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-02-10T20:09:44+00:00

    Grazie comunque, 

    non saprei quali informazioni passarVi

    comunque ne cancella e riscrive 600, che poi possono anche diminuire o aumentare dipende, non riscrive anche le altre.

    avevo provato a fare una versione che eseguiva solo la qryValidateToAssignementDetails1   solamente alla chiusura del programma

    così da rendere piu veloce il tutto ma poi avevo paura che non funzionasse qualche cosa e non ho piu testato se funzionava correttamente

    Grazie mille per il tuo tempo

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-02-10T17:54:19+00:00

    Eliminare 600 records ed inserirne 8886 (o perlomeno provarci) sono numeri che se ripetuti di frequente potrebbero spiegare i problemi di dimensioni del DB.

    Il blocco a livello di record non centra niente (serve per la concorrenza).

    Sinceramente con le informazioni che ci hai dato non vedo soluzioni.

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2019-02-10T12:34:47+00:00

    Ciao, grazie

    Si nella tabella non ci devono essere assolutamente chiavi duplicate (deve essere così per evitare inserimenti duplicati) quindi quando  vengono compilati dei record, alla chiusura, vengono cancellate le chiavi vuote e riscritte solamente le vuote rimanenti.

    Le tabelle vuote vengono create quando io creo una nuova commessa (Es se creo un nuovo "computer" che deve contenere che ne so 1 processore, una mainboard un hard disk, lui crea delle chiavi vuote con processore, mainboard e Hdd prendendole da una lista che c'è in un'alrta tabella, poi i miei colleghi riempiono i record vuoti che vengono scritti nella tabella TEMP.

    La tabella tblSerialNumberAssignementDetailsTEMP è quella dove i miei colleghi imputano il serialnumber del processore, della mainboard ecc.

    questa tabella viene poi copiata in qualche modo nella tblSerialNumberAssignementDetails1.

    Io avevo letto su qualche forum in inglese che forse si poteva risolvere togliendo la spunta nelle impostazioni "apri il database con blocco a livello record" ma non vorrei fare cavolate e non l'ho mai fatto, anche perchè non saprei se farlo sul FE o sul BE e se poi funziona utilizzando il programma con Access runtime.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2019-02-10T12:03:40+00:00

    La seconda query và in errore probabilmente per chiavi duplicate. Comunque và in errore anche se eseguita dal codice ma tu non lo vedi per effetto dei SetWarning che te lo nascondono.

    Forse è una cosa voluta che in presenza di chiave duplicata non operi l'inserimento, bisognerebbe saperne di più sulla tabella tblSerialNumberAssignementDetailsTEMP e la filosofia che ci stà dietro.

    Lavorare in wifi non è la soluzione migliore per i tempi di risposta ci vorrebbe una rete Lan.

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento