Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    231

    VBA: lettura campo in Access

    Salve a tutti,
    mi potete aiutare a scrivere il codice VBA per leggere un campo di una tabella di access?
    il campo è una stringa che poi devo elaborare.

  2. #2
    Dim RS As New ADODB.Recordset
    sql = "SELECT campo FROM tabella WHERE criterio=x"
    RS.Open sql, CurrentProject.Connection

    Dim valore
    valore = rs!campo
    Quando ti sei messo in testa di essere migliore di me ... R.DeNiro (TheScore)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    231
    Ti ringrazio molto.
    Ho compilato il nome della tabella e del campo
    Non so cosa si mette nei criteri "x" ??

    Private Sub Comando3_Click()
    Dim RS As New ADODB.Recordset
    strSQL = "SELECT Interpretazione_limiti FROM DB_Monocircuito WHERE criterio=x"
    RS.Open strSQL, CurrentProject.Connection
    Dim valore
    valore = RS!Interpretazione_limiti
    MsgBox valore
    End Sub

    Mi genera il seg. errore sulla riga "RS.Open....." :
    "Errore di runtime ..."
    "Nessun valore specificato per alcuni parametri necessari"

  4. #4
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Devi inserire un criterio di estrazione.
    Per esempio se vuoi che Interpretazione_limiti sia minore di 100

    codice:
    strSQL = "SELECT Interpretazione_limiti FROM DB_Monocircuito WHERE Interpretazione_limiti < 100"
    Ciao,
    Ciao, Brainjar

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    231
    mi sto avvicinando... ma mi da lo stesso errore.
    Il mio scopo è mettere in una variabile di testo il contenuto di un campo ed elaborarlo (dovrò individuare il testo tra le virgolette)
    Per tutti i record (immagino che dovrò fare un ciclo for... fino ad arrivare al EOF)

    Private Sub Comando3_Click()
    Dim RS As New ADODB.Recordset
    Dim valore
    Dim strCompare As String
    strCompare = "allarme se 1"
    strSQL = "SELECT Interpretazione_limiti FROM DB_Monocircuito WHERE Interpretazione_limiti = strCompare"
    RS.Open strSQL, CurrentProject.Connection
    valore = RS!Interpretazione_limiti
    MsgBox valore
    End Sub

  6. #6
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Devi tradurre "allarme se 1" in una condizione logica che puoi
    individuare nei valori dei campi estratti.

    Il campo 'Interpretazione_limiti' è quello che se vale 1 ti fa
    scattare l'allarme ?

    Se si la stringa sql diventa :
    codice:
    ' Con queste istruzioni ti estrae tutti i record che hanno 
    ' il valore Interpretazione_limiti = strCompare.
    
    strCompare = 1  
    strSQL = "SELECT Interpretazione_limiti FROM DB_Monocircuito WHERE Interpretazione_limiti =" & strCompare
    Tieni però presente che il codice, per funzionare, deve essere
    corretto facendo queste considerazioni :


    1) RS.Open strSQL, CurrentProject.Connection
    Questa istruzione presuppone che tu abbia un oggetto complesso
    "CurrentProject", che al suo interno contiene un oggetto
    connessione "Connection".
    Dai post si desume che questo è quello che funziona a
    twiste_has_you, che molto probabilmente questo oggettone se lo crea
    con delle sue Classi.
    Tu, invece, probabilmente non ce l'hai. Allora devi inserire,
    prima di RS.Open strSQL,.....

    una istruzione del tipo

    Dim cn As New ADODB.Connection

    devi aprire la connessione

    codice:
        Dim cn As New ADODB.Connection 
        cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<PathFisicoDelTuoDB>;Persist Security Info=False"
        ' La RS.Open diventa : 
    
        strCompare = 1  
        strSQL = "SELECT Interpretazione_limiti FROM DB_Monocircuito WHERE Interpretazione_limiti =" & strCompare 
    
        RS.Open strSQL, cn, adOpenStatic, adLockOptimistic
    2) Estrai dei recordset con il solo campo
    Interpretazione_limiti.
    Questa informazione non la leghi a nessun altro valore e non
    saprai mai individuare qual'è il record che, si ti fa scattare
    l'allarme, ma non sai qual'è.

    Detto questo per proseguire devi analizzare bene cosa vuoi
    estrarre dal DB (è una mia opinione, non è la regola,
    intendiamoci).

    Ciao,
    Ciao, Brainjar

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    231
    Gentilissimo Brainjar
    ti ringrazio per il tuo aiuto.
    A questo punto devo dirla tutta......
    Penso che per chi ha dimestichezza con access e VB questo è un quesito stimolante.
    In pratica, sto cercando di lavorare con un database access aperto sfruttando codice VBA per operazioni complesse. Le operazioni di routine le faccio con le "pronte" querry, maschere ecc.
    L'operazione complessa è la seguente:
    Dentro una tabella (dello stesso DB aperto) ho un campo ("Interpretazione_limiti") di tipo stringa che può avere diverse informazioni. Queste informazioni sono racchiuse da virgolette e separate da una virgola ("xx","xxx","x"). Il numero di informazioni (separate da virgola) è variabile per ogni record.
    Lo scopo è: in base al valore di un campo numerico "DefaultValue" (dello stesso record) devo compilare il campo "Interpretazione_default" (dello stesso record) con la stringa "abbinata".
    Per "abbinata" faccio un chiaro esempio di un record:
    se Interpretazione_limiti vale -> "italiano","inglese","francese"
    e se DefaultValue = 1 -> Interpretazione_default dovrà essere -> italiano
    o se DefaultValue = 2 -> Interpretazione_default dovrà essere -> inglese
    o se DefaultValue = 3 -> Interpretazione_default dovrà essere -> francese
    In sostanza devo prelevare una stringa in base alla "posizione" indicata.
    La difficoltà è che la lunghezza delle stringhe varia e varia il numero.
    Questo codice volevo metterlo dentro un bottone in una maschera dello stesso database.

    Io ho pensato di risolvere il rilevamento stringhe nel seguente modo:
    - per ogni record, campionare il campo "Interpretazione_limiti"e calcolare quante volte compare il carattere doppio apice (") e salvare il numero calcolato nella var. NumSeparatori.
    - se NumSeparatori = 0 saltare il record
    - verificare se NumSeparatori è dispari e visualizzare l'errore "Controllare Interpretazioni dei limiti"
    - Se NumSeparatori è pari, trovare quante stringhe ci sono (semplicemente dividendolo per due) NumInterpretazioni = NumSeparatori / 2
    - Calcolare per ogni stringa, la prima e l'ultima posizione dei caratteri in essa contenuti (per poterla poi estrarre), partendo dagli estremi del campo e via via restringendo la ricerca:
    PosRicerca := 1
    For I:=1 to NumInterpretazioni do
    PosizStartInterpr[I] = Instr(PosRicerca,Interpretazione_Limiti, """, VbTextCompare) 'Ricerca della posizione del primo carattere " che trova (funziona """ ??)
    PosRicerca := PosRicerca + 1 'esclude primo carattere per cercare il prossimo "
    PosizEndInterpr[I] = Instr(PosRicerca,Interpretazione_Limiti, """, VbTextCompare) 'Ricerca della posizione del prossimo carattere " che trova che corrisponde alla fine della prima stringa
    LunghStringa[I]= PosizEndInterpr[I] - PosizStartInterpr[I] - 2 ' Calcolo della lunghezza della stringa escludendo due caratteri per la posizione di " in testa ed in coda
    PosizStartInterpr[I] = PosizStartInterpr[I] + 1 'per evitare il primo carattere "
    Interpretazione(I) : = MID (Interpretazione_Limiti, PosizStartInterpr[I], LunghStringa[I]) 'estrazione della prima stringa contenuta tra doppie virgolette
    DB_Monocircuito. DefaultValue := Interpretazione(I) ' popolamento campo del DB
    End
    - Resettare tutti gli indici

    ciao e grazie
    Davide

  8. #8
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Ciao Davide,
    Oggi non sono in ufficio e non posso sfruttare una connessione
    flat di 8 ore. Per cui mi studio il tuo algoritmo e ti farò
    sapere.
    Ciao e buon lavoro.
    Ciao, Brainjar

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.