Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    361

    tempi di attesa operazioni ADODB (vb6)

    Ciao a tutti
    Sto utilizzando delle connessioni adodb per oprire e operare sulle mie tabelle (access).
    In alcune circostanze effettuo + query sulle stesse tabelle
    A questo punto, effettuata una operazione, chiudo la queri e successivamente apro l'altra (sulla stessa tabella).
    Ma sulla mia macchina (600Mhz) la chiusura di un recorset è + lenta rispetto a il mio codice che gli fa aprire l'altro recordset.
    Gli errori visualizzati sono

    '-2147217887 (80040e21)': ODBC driver does not support the requested properties.

    oppure

    '-2147467259 (8004005)': [Microsoft][ODBC Microsoft Access Driver] Could not save; currently locked by another user.

    Eseguendo lo stesso programma su un computer a 2Ghz non viene segnalato nessun errore: è normale???
    come posso aggirare questo problema di lentezza nella chiusura, oppure se apro il secondo recordset in sola lettura, non dovrebbe consentirmi di aprire + volte la stessa tabella???
    I recordset li apro :

    codice:
    'inizio pagina
    Dim numagg As New ADODB.Recordset
    
    'nelle procedure
    Set numagg = Nothing
    numagg.Open "numeriaggiuntivi", conn, 1, 1
    A, il primo recordset che impiega troppo tempo a chiudersi è un altro (sempre aodb), dove però apro la stessa tabella (con una query)

  2. #2
    A volte problemi di sincronismo possono essere dati dalle connsessioni. Usi sempre lo stesso oggetto connection o lo chiudi e ricrei tra un recordset e l'altro?

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    361
    per la connessione al db la apro all'avvio del programma e la mantengo fissa (la dichiaro in un module come public) utilizzando poi sempre lei....
    codice:
    'nel module
    Public conn As ADODB.Connection
    
    'nella prima form del programma
    Set conn = New ADODB.Connection
    conn.ConnectionString = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & App.Path & "\db.mdb"
    conn.Open

  4. #4
    Prova a postare un po di codice di dove apri i recordset...

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    361
    aspe che lo pulisco lasciando 1 sola tabella...

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    361
    codice:
    Private Sub Form_Load()
    query4 = "SELECT apparatiusati.idlinea, apparaticonnessi.Apparato, Linea.idcentralino FROM Linea " & _
    "INNER JOIN (apparaticonnessi INNER JOIN apparatiusati ON apparaticonnessi.idapparato = apparatiusati.idapparato) " & _
    "ON Linea.idlinea = apparatiusati.idlinea;"
    
    appusati.Open query4, conn, 3, 3
    end sub
    
    Private Sub carica()
    
    appusati.Requery
    appusati.MoveFirst
    Do While Not appusati.EOF
       If appusati("idlinea") = linea("idlinea") Then
          List2.AddItem (appusati("apparato"))
          If appusati("apparato") = "Centralino" Then
             List2.ItemData(List2.NewIndex) = appusati("idcentralino")
             Frame6.Enabled = True
            Else
             List2.ItemData(List2.NewIndex) = 0
             Frame6.Enabled = True
          End If
       End If
       appusati.MoveNext
    Loop
    
    end sub
    
    Private Sub Salva_Click()
    Set generica = Nothing
    generica.Open "apparatiusati", conn, 3, 3
    Do While Not generica.EOF
       If generica("idlinea") = linea("idlinea") Then
          If generica("idapparato") = 1 Then
             linea("idcentralino") = 0
          End If
          generica.Delete
          generica.Update
       End If
       generica.MoveNext
    Loop
    If List2.ListCount > 0 Then
       For i = 0 To List2.ListCount - 1
           List2.ListIndex = i
           If List2.text = "Centralino" Then
              If centralino.EOF = True And centralino.BOF = True Then
                 MsgBox ("Attenzione, non è presente in memoria nessun centralino! Prima di poter selezionare il centralino bisogna inserirlo")
                 Exit Sub
                Else
                 linea("idcentralino") = centralino("idcentralino")
              End If
           End If
           generica.AddNew
           generica("idlinea") = linea("idlinea")
           generica("idapparato") = List2.ItemData(List2.ListIndex)
           generica.Update
       Next
       generica.Close
    End If
    end sub
    La sub carica la uso nel form_load e dopo aver salvato...

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    361
    quando, dopo aver salvato, richiamo carica...mi mostra l'errore nel comando "appusati.Requery" dicendo appunto '-2147467259 (8004005)': [Microsoft][ODBC Microsoft Access Driver] Could not save; currently locked by another user.

  8. #8
    Alposto di requery prova a chiudere e riaprire il recordset

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    361
    a dimenticavo...è solo un problema di tempi...se infatti clicco su debug e poi "rilancio il codice" non da + nessun errore perchè a quel punto mi e stato realmente "liberata" la tabella apparatiusati.
    Tra l'altro nella sub salva "completa", riutilizzo il recordset generica (come dice il nome) per aprire altre tabelle e query.
    Quindi presumo sia un problema del odbc che è "lento" nel disconnettersi dalla tabella (ripeto che su un pc + veloce e in rari casi anche con il mio, il problema non sussiste).
    Volevo sapere come si fa da codice a mettere un controllo per , nel caso la tabella sia occupata...di aspettare finchè non si libera

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    361
    diciamo che per il momento ho risolto aprendo il primo recordset "appusati" in sola lettura (che mi consente di aprire la stessa tabella quante volte voglio).
    Però mi interesserebbe lo stesso approfondire la questione....
    Potrebbe accadermi di dover aprire la stessa tabella + volte in lettura/scrittura, e magari senza nemmeno saperlo, il mio applicativo potrebbe crashare con computer un po' lenti (nemmeno troppo visto che uso un 600MHz)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.