+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 4 su 4

Connessioni ADO dinamiche

  1. #1
    L'avatar di cippalippa
    cippalippa non è in linea Topo di biblioteca
    Ciao,
    il database che sogno di fare sta diventando un incubo.
    Mi è venuto un grande dubbio:
    Finora ho usato (e so usare) il controllo ADO settando le proprietà.
    Nel caso di una fattura però posso avere bisogno che un campo, es. Cliente vada a prendere i valori dalla tabella clienti se la fattura è di vendita (immediata), ma se è una fattura differita (da DDT), lo stesso campo deve prendere i valori da quelli che trova sul ddt.

    Dico bene se affermo che l'unico modo per risolvere il problema è quello di istanziare da codice e creare recordset diversi a seconda del tipo di documento, che possano essere creati e distrutti al volo?

    Esistono strade più semplici di cui siate a conoscenza? Magari con i controlli e senza scrivere codice?

  2. #2
    L'avatar di Cteniza
    Cteniza non è in linea Amanuense
    Se preferisci farti la struttura dei dati puoi usare anche il data environment aggiungendo diversi "command", ciascun command corrisponde alla struttura di una tabella.
    Per "giocare a tutto campo" devi smettere di usare l'ado datacontrol e passare a leggere / scrivere direttamente i dati.

  3. #3
    L'avatar di yronium
    yronium non è in linea Scribacchino
    Ciao. Oltre a ciò che ha detto Cteniza puoi istanziare un oggetto recordset indipendente.
    L'oggetto ADODB.Recordset funziona come un controllo ADO, e se lo dichiari usando la parola chiave WithEvents ne puoi perfino ricevere gli eventi.

    Potresti procedere così:
    - apri una connessione al database (diciamo che la connessione si chiama cn) e la lasci aperta: la chiuderai all'uscita della tua applicazione;

    - dichiari una variabile come segue:
        Dim rs As ADODB.Recordset
        Set rs = New ADODB.Recordset
    
    - dichari una variabile con la quale definisci la tabella da aprire di volta in volta:
        Dim tbl As String
        If FatturaImmediata Then 
            tbl = "TabellaFatture" 
        ElseIf DDT Then 
            tbl = "TabellaDDT"
        End If
    
    - utilizzi la variabile per aprire l'oggetto recordset sulla tabella scelta
        rs.Open tbl, cn, , , adCmdTable
    
    - se credi, puoi impostare la proprietà DataSource dei controlli sulla variabile rs, e la proprietà DataField sui campi del recordset. Altrimenti puoi lavorare con il recordset disconnesso, cioè assegnare il valore dei campi ai controlli...
        txtNome.Text = rs.Fields("Nome").Value
        txtCognome.Text = rs.Fields("Cognome").Value
        txtNumDoc.Text = rs.Fields("NumeroDocumento").Value
        ' ...... ecc....
    
    ... e poi chiuderlo;

    - puoi navigare nel recordset con i metodi rs.Move, rs.MoveNext, rs.MovePrevious, rs.MoveLast e rs.MoveFirst;

    - puoi modificare il record corrente semplicemente modificando il valore dei suoi campi (o delle textbox, se le tieni associate tramite la proprietà DataField): i nuovi valori saranno salvati automaticamente nel recordset appena ti sposti su un altro record - molti fanno rs.Move 0 -, come se il recordset fosse un controllo ADO. (Attento: se lavori con un recordset disconnesso, cioè già chiuso, la modifica avrà effetto solo sui valori nei controlli, ma non nella tabella del database. Per modificare i valori nella tabella del database devi esplicitamente inviare un'istruzione SQL, tipo "UPDATE TabellaDDT SET Cognome = " & txtCognome.Text. Oppure, aprire di nuovo il recordset, modificare i valori dei campi e richiuderlo.)

    - puoi aggiungere un nuovo record con il metodo rs.AddNew, e confermare l'aggiunta con il metodo rs.Update o annullare con il metodo rs.CancelUpdate;

    - puoi eliminare il record corrente con il metodo rs.Delete

    - quando il recordset non ti serve più, lo chiudi e lo distruggi:
        rs.Close
        Set rs = Nothing
    
    Insomma, l'oggetto Recordset si comporta esattamente come un controllo ADO, anzi a dire il vero il controllo ADO si comporta come un Recordset a cui sono stati aggiunti dei pulsanti di spostamento. L'oggetto Recordset è molto potente, e ti consiglio di studiarne il meccanismo.
    Spero ti sia utile. Ciao e Buon Anno.

  4. #4
    L'avatar di cippalippa
    cippalippa non è in linea Topo di biblioteca
    Ciao Yronium,
    bellino questo codice, mi sa tanto che lo proverò.

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. c++ matrci dinamiche
    Da marek42 nel forum C/C++
    Risposte: 7
    Ultimo Post: 23-12-2017, 01:37
  2. liste dinamiche in C++
    Da el cuba libre nel forum C/C++
    Risposte: 0
    Ultimo Post: 14-04-2011, 15:58
  3. Selezione dinamiche in VBA
    Da marcozanet nel forum Microsoft Word
    Risposte: 2
    Ultimo Post: 02-10-2009, 17:44
  4. combobox dinamiche
    Da gusic89 nel forum Visual Basic 6
    Risposte: 12
    Ultimo Post: 28-12-2008, 20:09
  5. [C/C++] liste dinamiche
    Da tommyje nel forum C/C++
    Risposte: 7
    Ultimo Post: 24-10-2007, 22:15