Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    170

    estrazione manuale da db access

    Premesso che è un argomento trito e ritrito, premesso che ho letto le pillole e relativi vecchi post,non sono riuscito a trovare quello di cui ho bisogno: eseguire le classiche operazioni su tabella senza utilizzare wizard, ossia sapere come si fa a scorrere, inserire, modificare, eliminare dati di una tabella.
    Sto utilizzando vb2005 Express Edition ed una tabella access, ed ho inserito questo codice:
    codice:
            Dim strconn As String
            Dim sql As String
            strconn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\db.mdb"
            Dim cn As New OleDbConnection(strconn)
            cn.Open()
            Dim command As New OleDbCommand("select * from anagrafica", cn)
            Dim reader As OleDbDataReader
     
            reader = command.ExecuteReader
            Dim i As Integer
     
                 While reader.Read
                    cognome.Text = reader("cognome") & " " & reader("nome")
                    nome.Text = reader("nome")
                    id_anagrafica.Text = reader("id_anagrafica")
                End While
    Con questo codice riesco a connettermi al db, il problema è che così non ha molto senso, in quanto mi visualizza solo l'ultimo record.
    Qualcuno può aiutarmi a modificare questo codice per scorrere i dati della tabella?
    Vi ringrazio in anticipo e mi scuso per la bassa "qualità" della domanda.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,461
    Il linguaggio va indicato anche nel titolo, come da Regolamento.

    In merito al tuo problema, tu stai già scansionando la tabella correttamente, ma è chiaro che se memorizzi - per ciascun record - i valori di alcuni campi all'interno di una casella di testo, ogni record che incontri sostituirà il precedente e pertanto, alla fine della scansione, pur avendo "toccato" tutti i record, vedrai solo i dati dell'ultimo.

    Per modificare il codice, dovresti specificare cosa intendi farci con i dati estratti tramite la tabella o la query.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    Per "scorrere" i dati hai bisogno quantomeno di un bottone "Avanti" e uno "Indietro".

    Poi il codice (a parte qualche piccola modifica) è quello che hai scritto (con qualche miglioramento.

    Inizia dai bottoni....
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    170
    Originariamente inviato da alka
    Il linguaggio va indicato anche nel titolo, come da Regolamento.
    In merito al tuo problema, tu stai già scansionando la tabella correttamente, ma è chiaro che se memorizzi - per ciascun record - i valori di alcuni campi all'interno di una casella di testo, ogni record che incontri sostituirà il precedente e pertanto, alla fine della scansione, pur avendo "toccato" tutti i record, vedrai solo i dati dell'ultimo.
    Per modificare il codice, dovresti specificare cosa intendi farci con i dati estratti tramite la tabella o la query.
    Chiedo scusa riguardo al titolo, sapevo di dovercelo mettere, però poi me ne sono dimenticato! Riguardo al resto dovrei estrarre e visualizzare i dati dentro delle textbox, con conseguente possibilità di scorrere un record alla volta, e di aggiornare i dati memorizzandoli sul db.
    Però non so proprio come fare!


    Originariamente inviato da kalosjo
    Per "scorrere" i dati hai bisogno quantomeno di un bottone "Avanti" e uno "Indietro".
    Poi il codice (a parte qualche piccola modifica) è quello che hai scritto (con qualche miglioramento.
    Inizia dai bottoni....
    Il problema è proprio questo: non so come collegare i bottoni avanti e indietro: come faccio a dirgli che deve avanzare al record successivo a quello che sto visualizzando?! Ad ogni click mi richiamerebbe sempre la stessa query, quindi?!? Dovrei avere un oggetto che mi memorizza la posizione attuale e mi fa avanzare al record successivo?

    Scusate ma se mi potete spiegare come fare perchè io non ho molta dimestichezza con questo linguaggio!

    Grazie.

  5. #5
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    Dichiara le variabili all'interno del form, e nei bottoni fai solo avanti e indietro del datareader (io userei un dataset...)
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    170
    Originariamente inviato da kalosjo
    Dichiara le variabili all'interno del form, e nei bottoni fai solo avanti e indietro del datareader (io userei un dataset...)
    Il codice che ho postato prima l'ho inserito dentro l'evento load del form però poi quando tento di richiamare l'oggetto datareader da un'altra sub non ce l'ho disponibile!
    Dove sbaglio?
    Cosa intendi con l'usare un dataset?
    Potresti postare un esempio concreto?

    Grazie.

  7. #7

    Up

    Up.
    Seguo la discussione
    i7 3770K --- Asus P8z77 --- 2x4Gb Corsair Vengeance 2133MHz--- Enermax NoiseTaker II 600w --- SSD: 128Gb Vertex 4 --- WD 1000Gb --- WD 2000Gb --- ASUS ATI5850 1Gb --- Case: Kandalf 25cm Fan --- Tastiera Logitech G15 --- Mouse Razer Copperhead

  8. #8
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    Ovviamente l'esempio che faccio è un esempio diciamo base.

    Poi è aperto ad ampie modifiche ed interpretazioni.

    Le dichiarazioni non le devi fare sul form_load ma a livello di dichiarazioni.

    codice:
    public class mioform
      Inherits System.Windows.Forms.Form
      
      Dim strconn As String="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\db.mdb"
      Dim cn As New Data.OleDb.OleDbConnection
      dim LDSet as new Dataset
      dim NumRows as long
    Sul form_load puoi aprire il dataset (che è come un recordset... diciamo....)


    codice:
    private sub form_load ...........
      Dim sql As String
      dim LCmd as new Data.OleDb.OleDbCommand
      dim LocalDA as New Data.OleDb.OleDbDataAdapter
    
      cn = New Data.OleDb.OleDbConnection(strconn)
      sql="select * from anagrafica"
      LCmd = New Data.OleDb.OleDbCommand(sql, cn)
      LocalDA.selectcommand = LCmd
      LDSet = New DataSet("elenco")
      LocalDA.fill(LDSet, "anagrafica")
      LCmd.Dispose()
      NumRows=LDSet.Tables("anagrafica").Rows.Count
    end sub
    In questo modo abbiamo aperto la tabella anagrafica, il cui numero righe è NumRows

    I tasti avanti e indietro non devono fare altro che aumentare o diminuire una variabile indice, dichiarata sempre a livello di dichiarazioni, facendo attenzione a mantenerla sempre tra 0 e NumRows-1

    Per visualizzare il record corrente, basta pensare che per estrarre un dato dal dataset puoi scrivere:

    codice:
    Text1.text=LDSet.Tables("anagrafica").Rows(indice).Item("nomecampo")
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    170
    Ti ringrazio per l'esempio molto esauriente: adesso provo a implementarlo per vedere se mi funziona.

    Grazie intanto per l'aiuto e soprattutto per il tempo dedicatomi.

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.