+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Dataenvironment VB6 connessione database access

  1. #1
    cris77 non è in linea Scolaretto
    Post
    127

    Exclamation Dataenvironment VB6 connessione database access

    Ciao a tutti,

    Ho provato a connettere un database access con il Dataenvironment di VB6 la connessione è avvenuta....Questo database si trova in una cartella condivisa di un pc server, in quanto voglio che sia utilizzato da piu utenti contemporaneamente per leggere, modificare, cancellare o scrivere records.
    Quardando nelle proprietà di connessione del Dataenvironment creato, nella sezione Avanzate compare una Listbox con le autorizzazioni all'access e come default mi risulta SHARE DENY NONE "checckato" cosa significa?

    Inoltre vorrei capire se selezionando altre check box all'interno di questa lista come ad esempio READWRITE mi permetta di modificare, scrivere, leggere il database condiviso da piu utenti senza che non mi compaia il famoso messaggio di errore "Database già aperto"....

    Premetto di sapere che un database access deve essere sempre condiviso per essere utilizzato in rete, però mi è capitato spesso che non ho potuto modificare, leggere o inserire records contemporaneamente da pc client in quanto mi dava sempre il famoso errore....

    Ho letto che il database access deve essere diviso in backend e backfront per poter essere utilizzato in rete ma io non l'ho mai fatta questa procedura.....

    In fin dei conti mi chiedevo se il Dataenvironment di VB 6 permette a + utenti di accedere ad un database in rete contemporaneamente senza che vi sia un errore....

  2. #2
    L'avatar di gibra
    gibra non è in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    4,529
    Un consgilio: lascia perdere il DataEnvironment.

    Basta aprire la connessione dal client indicando il percorso del database sul server così

    \\server1\applicazione\database.mdb

    Per quanto riguarda la concorrenza dei dati in ambiente multi-utenza, guarda questi articoli, soprattutto il primo e vedi come usa il Lock, e l'ultimo.

    HOW TO Implement Multiuser Custom Counters in Jet 4.0 and ADO 2.1
    http://support.microsoft.com/default...b;EN-US;240317

    How to use connection control to prevent users from logging on at run time in Access 2002
    http://support.microsoft.com/kb/287655/en-us
    Determine Which and How many Users are Connected to a Database
    http://www.freevbcode.com/ShowCode.Asp?ID=4768
    How to keep a Jet 4.0 database in top working condition
    http://support.microsoft.com/kb/303528

    Di norma, usare record disconnessi, e scrivere sulle tabelle esclusivamente tramite uqery di comando SQL ovvero: INSERT, UPDATE, DELETE.
    Usare le transazion (molto importante!)
    Tutti i comandi eseguirli con il metodo Execute della connessione oppure, meglio ancora, dell'oggetto Command usando i Parametri; vedi questo mio articolo e progetto d'esempio che trovi sul mio sito (insieme ad altri progetti per vari modi di accedere ai dati)

    ADO, Parametri ed affini
    http://nuke.vbcorner.net/Articoli/VB...5/Default.aspx


    Non usare ADODC, DataCombo, DataList e porcherie varie che non servono a niente, peggiorano le prestazioni, consumano un sacco di risorse alla fine per regalarti qualche bel BUG.

    Ciao

  3. #3
    cris77 non è in linea Scolaretto
    Post
    127
    Grazie Gibra di avermi risposto così tempestivamente


    Volevo ringraziarti per i link che mi hai fornito ora darò un'occhiata per analizzare il tutto...

    Il fatto è che io ho fatto già un'applicazione con un database una cartella nel server della mia rete utilizzando una connessione DAO all'interno del modulo


    Option Explicit
    Public data As Database
    Public wrkjet As Workspace
    Public dcon As Connection
    ______________________
    Sub db_apri()

    Set wrkjet = CreateWorkspace("", "admin", "", dbUseJet)

    Set data = wrkjet.OpenDatabase("C:\Documents and Settings\utente\Documenti\Progetti\db1.mdb", _
    True)




    End Sub
    ____________________________

    Sub db_chiudi()



    data.Close

    End Sub


    Inoltre conosco bene il linguaggio SQL per la manipolazione dei database infatti uso sempre istuzioni INSERT, Update Delete con l'utilizzo di recordset e query....chi non le usasse sarebbe un pazzo suicida oppure uno che non ha la minima conoscenza database

    Ma purtroppo quando tento di al database contemporaneamente da diversi pc nello stesso momento, mi appare l'errore "database già aperto da un'altro utente" runtime error

    Perchè?
    Premetto che io detesto access e che ho sempre lavorato con database molto piu efficienti come Oracle che per quando riguarda l'accesso multiutente non ha paragoni con nessuno, ma purtroppo sono obbligto ad utilizzare per la mia applicazione questo tipo di database...


    In pratica dove sta l'errore se ho fatto tutto quello che mi hai postato?

  4. #4
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    10,515
    Blogs
    5
    Set data = wrkjet.OpenDatabase("C:\Documents and Settings\utente\Documenti\Progetti\db1.mdb", False)
    Il Crossposting è vietato. La "pappa pronta" è vietata. Leggi il Regolamento.
    Utilizza sempre i PM per comunicare con i moderatori.

  5. #5
    L'avatar di gibra
    gibra non è in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    4,529
    Oltre a quanto ti ha indicato Antonio, guarda il primo link e vedrai in fondo alla pagina che c'è il link per fare la stessa cosa con DAO, anche se io prefersico di gran lunga ADO, ma immagino che tu ti sia trovato la patata così com'è, quindi non abbia scelta.
    Se invece puoi scegliere mi butterei su ADO senza esitazione.

    Ciao

  6. #6
    cris77 non è in linea Scolaretto
    Post
    127

    Smile

    Grazie antoniogiuliana per la dritta.....

    Non so se vi eravate accorti ma vi ho anche postato la connessione errata, ma nell'applicazione è corretta perchè essendo in rete deve essere:
    Set data = wrkjet.OpenDatabase("\\Server\Documents and Settings\utente\Documenti\Progetti\db1.mdb", False)
    Non mi rimproverate per l'errore ortografico

    Rispondo anche a gibra:

    Anche io conosco ADO e lo utilizzo spesso e volentieri nelle mie applicazioni però ho scelto di utilzzare DAO perchè l'ho studiato di più e mi trovo a mio agio

    Grazie a tutti ora sistemo l'applicazione

  7. #7
    cris77 non è in linea Scolaretto
    Post
    127

    Post

    Ho settato la connessione con FALSE

    Set data = wrkjet.OpenDatabase("C:\Documents and Settings\utente\Documenti\Progetti\db1.mdb", False)


    però se un campo della tabella è nullo ad esempio:


    Form3.Text6.Text = rs!indirizzo

    mi da errore di runtime

    mentre ciò non accadeva quando la connessione era impostata a TRUE.

    Come si può evitare l'errore

  8. #8
    L'avatar di gibra
    gibra non è in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    4,529
    Quote Originariamente inviato da cris77 Visualizza il messaggio
    Ho settato la connessione con FALSE

    Set data = wrkjet.OpenDatabase("C:\Documents and Settings\utente\Documenti\Progetti\db1.mdb", False)


    però se un campo della tabella è nullo ad esempio:


    Form3.Text6.Text = rs!indirizzo

    mi da errore di runtime

    mentre ciò non accadeva quando la connessione era impostata a TRUE.

    Come si può evitare l'errore
    Questo è un problema diverso, quindi devi aprire una nuova discussione indicando un titolo descrittivo attinente al problema (come indicato dal Regolamento) potrebbe essere ad es.:

    DAO: come gestire i valori Null in un database Access

    Ciao

  9. #9
    cris77 non è in linea Scolaretto
    Post
    127
    Ok grazie


    ora provvedo ....

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi