+ Rispondi al messaggio
Pagina 1 di 3 123 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22

Accesso a database .dbf foxpro

  1. #1
    cris77 non è in linea Scolaretto
    Ciao a tutti dovrei creare una connessione ad una tabella foxpro .dbf (che si trova sul server) da una mia applicazione che ho creato considerando che c'è un'altra applicazione che ci potrebbe accedere contemporaneamente alla. Per evitare errori o di danneggiare la tabella, nel caso in cui accediamo alla tabella nello stesso momento, cosa mi suggerite di fare?
    Grazie in anticipo per la risposta

  2. #2
    L'avatar di gibra
    gibra ora è in linea Very Important Person
    Quote Originariamente inviato da cris77 Visualizza il messaggio
    cosa mi suggerite di fare?
    Semplice, accedere con una connessione in sola lettura, o come utente che non ha i diritti di creazione, modifica, ecc.
    ℹ️ Leggi di più su gibra ...

  3. #3
    cris77 non è in linea Scolaretto
    Il problema è che devo anche io scriverci su quella tabella .dbf. Che tipo di connessione devo fare per accedere al database in lettura e scrittura? Devo sempre verificare,ogni volta che mi connetto, che la tabella non sia già in uso da un' altro software?

  4. #4
    L'avatar di gibra
    gibra ora è in linea Very Important Person
    Quote Originariamente inviato da cris77 Visualizza il messaggio
    Il problema è che devo anche io scriverci su quella tabella .dbf.
    Quote Originariamente inviato da cris77 Visualizza il messaggio
    Devo sempre verificare,ogni volta che mi connetto, che la tabella non sia già in uso da un' altro software?
    Non è un problema, basta usare una transazione.
    Quando si apre una transazione, il record non è accessibile da altri software fino a che la transazione non viene chiusa.
    ℹ️ Leggi di più su gibra ...

  5. #5
    cris77 non è in linea Scolaretto
    il codice che uso io per connettermi è questo:

    
       Dim cn As OdbcConnection
            cn = New OdbcConnection("Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB="C:\MIOPERCORSO\;")
    
            cn.Open()
    
            Dim query As String = "UPDATE boldo SET BOCAMPO1='" & DataGridView2.Item(3, 
            DataGridView2.CurrentCell.RowIndex).Value & "' where BONUMBOL=" & DataGridView2.Item(5, 
            DataGridView2.CurrentCell.RowIndex).Value & " AND BONUMREG=" & DataGridView2.Item(10, 
            DataGridView2.CurrentCell.RowIndex).Value & ""
    
            Dim cmd As OdbcCommand = New OdbcCommand(query, cn)
    
            cmd.ExecuteNonQuery()
            cn.Close()
            MsgBox("Record aggiornato correttamente")
    
    Cosa intenti per transazione?

    grazie
    Ultima modifica di AntonioG; 14-06-2021 11:50  Motivo: Tag CODE per il codice

  6. #6
    Quote Originariamente inviato da cris77 Visualizza il messaggio
    il codice che uso io per connettermi è questo:

    Cosa intenti per transazione?
    Non ci sono molti modi di intendere una transazione per un DBMS... nel tuo caso

    OdbcTransaction
    https://docs.microsoft.com/it-it/dot...t-plat-ext-5.0
    ℹ️ Leggi di più su AntonioG ...

  7. #7
    cris77 non è in linea Scolaretto
    Grazie per il suggerimento proverò a postare il mio codice per vedere se è ok. Ho un po' paura a fare un test perché l' ultima volta ho danneggiato una tabella .dbf senza capire il motivo....

  8. #8
    cris77 non è in linea Scolaretto
    Ho provato ad implementarla così la transazione:

      Dim cn As OleDbConnection
    
            cn = New OleDbConnection("Provider=vfpoledb.1;Data Source=C:\VTAM200701\VTAMDBF\;;Exclusive=false;Nulls=false")
          
    
    
            Dim tra As OleDbTransaction = Nothing
    
    
            Try
            cn.Open()
            
            '*** Avvia transazione ***'  
            tra = cn.BeginTransaction(IsolationLevel.ReadCommitted)
            
    
    
    
    
            For Each row As DataGridViewRow In DataGridView1.Rows
    
                If Not row.IsNewRow Then
                    'MessageBox.Show("N380-" & row.Cells(0).Value.ToString & "-" & row.Cells(1).Value.ToString)
    
    
                    Dim query As String = "INSERT INTO Docum(dosigpos, doannpos, donumpos, dotratta, dodatins, donumart, docontat, docoddoc, donumdoc, dodatdoc, dotrasmi, donote, docampo1, docampo2, dolinea, dotest1, dotest2, dotest3, dotest4, dotest5, dotest6, dovalor1, dovalor2, dodata1, dodata2, dointerno) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
    
    
                   
                   
    
                    Dim cmd As OleDbCommand = New OleDbCommand(query)
                    cmd.Connection = cn
                
                 
    
                    cmd.Parameters.AddWithValue("?", row.Cells(6).Value)
                    cmd.Parameters.AddWithValue("?", row.Cells(7).Value)
                    cmd.Parameters.AddWithValue("?", row.Cells(5).Value)
                    cmd.Parameters.AddWithValue("?", "0")
                    cmd.Parameters.AddWithValue("?", row.Cells(0).Value)
                    cmd.Parameters.AddWithValue("?", row.Cells(8).Value)
                    cmd.Parameters.AddWithValue("?", "0")
                    cmd.Parameters.AddWithValue("?", "N380")
                    cmd.Parameters.AddWithValue("?", row.Cells(4).Value)
                    cmd.Parameters.AddWithValue("?", " ")
                    cmd.Parameters.AddWithValue("?", " ")
                    cmd.Parameters.AddWithValue("?", " ")
                    cmd.Parameters.AddWithValue("?", " ")
                    cmd.Parameters.AddWithValue("?", " ")
                    cmd.Parameters.AddWithValue("?", " ")
                    cmd.Parameters.AddWithValue("?", " ")
                    cmd.Parameters.AddWithValue("?", " ")
                    cmd.Parameters.AddWithValue("?", row.Cells(9).Value)
                    cmd.Parameters.AddWithValue("?", " ")
                    cmd.Parameters.AddWithValue("?", row.Cells(2).Value)
                    cmd.Parameters.AddWithValue("?", " ")
                    cmd.Parameters.AddWithValue("?", Year(MaskedTextBox1.Text))
                    cmd.Parameters.AddWithValue("?", row.Cells(3).Value)
                    cmd.Parameters.AddWithValue("?", " ")
                    cmd.Parameters.AddWithValue("?", " ")
                    cmd.Parameters.AddWithValue("?", False)
    
    
                    cmd.ExecuteNonQuery()
                    MsgBox("Record aggiornato correttamente")
    
                    tra.Commit()
    
    
    
    
                End If
    
            Next
            Catch ex As Exception
            MsgBox(ex.Message)
            tra.Rollback()
    
            End Try
    
            cn.Close()
            cn = Nothing
    

    Così potrebbe andare bene?

  9. #9
    L'avatar di gibra
    gibra ora è in linea Very Important Person
    Quote Originariamente inviato da cris77 Visualizza il messaggio
    Così potrebbe andare bene?
    Mi sembra ok.
    Perché non fai dei test su un database di prova?
    Io ho sempre fatto così, per evitare qualsiasi complicazione.

    Comunque, se al posto di IsolationLevel.ReadCommitted usi IsolationLevel.ReadUnCommitted ti faciliti il debug perché puoi vedere il risultato della query PRIMA di fare il Commit, basta aggiungere un BREAK nell'istruzione:

    tra.Commit()

    e prima di eseguirla , ovvero dopo la
    cmd.ExecuteNonQuery()

    vai ad analizzare i dati interessati e puoi così verificare se i valori sono quelli che ti aspetti.
    Una volta che ti sei assicurato che non vi sono errori e tutto è ok, allora esegui il Commit.

    Questo, ovviamente, come fase di controllo preliminare, poi una volta che sei sicuro che la procedura 'gira bene' allora togli il BREAK e metti in produzione.

    Però, ribadisco, fai prima il tutto su un database di TEST.
    ℹ️ Leggi di più su gibra ...

  10. #10
    cris77 non è in linea Scolaretto
    grazie Gibra, seguirò il tuo suggerimento e farò dei test per verificare.

+ Rispondi al messaggio
Pagina 1 di 3 123 ultimoultimo

Potrebbero interessarti anche ...

  1. Accesso Esclusivo Database
    Da Happo nel forum Microsoft Access
    Risposte: 7
    Ultimo Post: 01-02-2018, 11:12
  2. accesso al database ed errori
    Da piruet nel forum MySQL
    Risposte: 0
    Ultimo Post: 04-07-2013, 11:26
  3. Accesso a database
    Da Main nel forum C#
    Risposte: 2
    Ultimo Post: 09-08-2008, 15:37
  4. Errore accesso database
    Da iltheo nel forum Visual Basic .Net
    Risposte: 1
    Ultimo Post: 21-03-2008, 14:47
  5. Vb6 E Database Foxpro 8 - Dati Stringa Letti In Binario
    Da PITSOFT nel forum Visual Basic 6
    Risposte: 0
    Ultimo Post: 10-01-2008, 20:30