Problema con ordinamento access da VB2008

di il
10 risposte

Problema con ordinamento access da VB2008

Salve a tutti,
mi sono appena registrato. Volevo presentarmi ma non ho trovato una sezione apposita.
Lo faccio, brevemente quì.

Fausto Testa, 45 primavere sul groppone, lavoro in qualità di programmatore/system tester (ambienti proprietari) in una multinazionale Svedese. Provo a programmare in VB 2008 un pò per diletto un pò per lavoro. Gli altri miei interessi sono il Rugby (ex giocatore ora allenatore) e la fotografia (esclusivamente analogica).

Ora vi presento il mio problema.
Sto scrivendo un applicazione in VB2008 (autodidatta) per la gestione di un DB access.
Una cosa che vorrei fare è ordinare il DB secondo una chiave.
La tabella si chiama "anagrafe". Il campo per il quale vorrei ordinare è "cognome".
Ho provato quanto segue:

Dim Pengine As dao.DBEngine = New dao.DBEngine()
Dim rec As dao.Recordset
Dim db As dao.Database = Pengine.OpenDatabase("c:\DBpazienti\dibi.mdb")
Dim cueri As String = "SELECT * FROM anagrafe ORDER BY cognome"

rec = db.OpenRecordset("anagrafe")
rec.MoveFirst()
db.Execute(cueri)

Ma non funziona. l'ultima istruzione (in rosso) mi da un errore. Ho provato a cercare in rete ma non sono riuscito a quagliare.
Qualche anima pia ha la dritta giusta ?
Grazie

10 Risposte

  • Re: Problema con ordinamento access da VB2008

    Ciao Fausto,
    l'area presentazioni c'è, è dentro la prima sezione del forum (il bar dei programmatori).

    Veniamo però al tuo problema e iniziamo a smontare il DAO, ormai destinato al museo.

    Te la faccio semplice, non ho avuto tempo di testarlo quindi se c'è qualche errore, fammi sapere:
    
    'namespaces da importare
    Imports System.Data
    Imports System.Data.OleDb
    
    'codice per interrogare MS Access
    Dim connection as new OleDbConnection( _
                "PROVIDER=Microsoft.Jet.OLEDB.4.0;" _
                & "DATA SOURCE=c:\DBpazienti\dibi.mdb")
    
    Dim sql As String = "SELECT * FROM anagrafe ORDER BY cognome"
    Dim dtAdapter as new OleDbDataAdapter(sql, connection)
    
    Dim dtSet as DataSet = new DataSet()
    dtAdapter.Fill(dtSet, "anagrafe")
          
    Dim anagrafeDataTable as DataTable = dtSet.Tables("anagrafe")
         
    
    Dentro anagrafeDataTable hai i records estratti.
  • Re: Problema con ordinamento access da VB2008

    Grazie tante.
    Vado a presentarmi "ufficialmente" .
    A presto
  • Re: Problema con ordinamento access da VB2008

    Toki ha scritto:


    Ciao Fausto,
    
    'namespaces da importare
    Imports System.Data;
    Imports System.Data.OleDb;
    
    'codice per interrogare MS Access
    Dim connection as new OleDbConnection( _
                "PROVIDER=Microsoft.Jet.OLEDB.4.0;" _
                & "DATA SOURCE=c:\DBpazienti\dibi.mdb")
    
    Dim sql As String = "SELECT * FROM anagrafe ORDER BY cognome"
    Dim dtAdapter as new OleDbDataAdapter(sql, connection)
    
    Dim dtSet as DataSet = new DataSet()
    dtAdapter.Fill(dtSet, "anagrafe")
          
    Dim anagrafeDataTable as DataTable = dtSet.Tables("anagrafe")
         
    
    Dentro anagrafeDataTable hai i records estratti.

    Salve. Eccomi di nuovo ad approfittare......
    Ho implementato il codice quà sopra modificandolo leggermente (vedi sotto)

    Dim connection As New OleDb.OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;" & "DATA SOURCE=c:\DBpazienti\dibi.mdb")

    Dim sql As String = "SELECT * FROM anagrafe ORDER BY cognome"
    Dim dtAdapter As New OleDb.OleDbDataAdapter(sql, connection)

    Dim dtSet As DataSet = New DataSet()
    dtAdapter.Fill(dtSet, "anagrafe")

    Dim anagrafeDataTable As DataTable = dtSet.Tables("anagrafe")
    connection.Close()

    Visto che la cosa non funziona ho qualche domanda.
    1) Le istruzioni "imports" non funzionano. Le ho omesse ho aggiunto da "reference" sistem.data ma non ho trovato system.data.oledb, La domanda è: E' possibile che il tutto funzioni senza imports ?

    2) Per quel poco che ho fatto in passato con access ricordo che,a alla fine, facevo, prima di .CLOSE qualcosa del tipo .UPDATE. Esiste istruzione corrispondente ? Perchè non mi trovo la tabella con i dati ordinati ? Dove sbaglio ?
    Grazie
  • Re: Problema con ordinamento access da VB2008

    Ciao, le imports ti servono a referenziarti ai namespace.
    Vanno messe all'inizio, prima della dichiarazione della classe.
    Togli i punto e virgola, avevo scritto "Imports System.Data;" ma è "Imports System.Data" è il mio refuso di C# ogni volta che passo a scrivere qualcosa con VB.NET

    Il resto del codice inseriscilo nel metodo della classe in cui ti serve.

    Fammi sapere
  • Re: Problema con ordinamento access da VB2008

    Risolto con le imports (le avevo messe nel posto sbagliato....)
    Però continuo ad avere il problema con l'ordinamento. Mi viene eseguito il codice senza
    messaggi d'errore. Alla fine mi aspetterei la tabella con i dati ordinati ma non la trovo.
    Dove sbaglio ?
    Grazie

    P.S. sono un principiante vero e proprio nel programmare con VB2008. Ho sempre usato VB6 per applicazioni molto semplici. Qua c'è un approccio più "professionale". Mi ci vorrà del tempo.
  • Re: Problema con ordinamento access da VB2008

    Ciao non ho capito se i dati ci sono o meno a prescindere dall'ordine.
    inserisci MsgBox(anagrafeDataTable.Rows.Count)
    dopo
    Dim anagrafeDataTable As DataTable = dtSet.Tables("anagrafe")
    così vedi se ci sono le righe.
  • Re: Problema con ordinamento access da VB2008

    Rieccomi.
    Messo il MSGBOX. Le righe ci sono.
    Però la tabella anagrafeDataTable non la trovo.....
    Forse devo fare in modo di salvarla dentro al file access ?
    Come si fà ?
    Grazie
  • Re: Problema con ordinamento access da VB2008

    Ciao anagrafeDataTable é un DataTable, considerala come la rappresentazione della tua tabella "anagrafe".
    In anagrafeDataTable hai i dati estratti dal tuo database.
    A titolo di esempio se vuoi accedere al dato cognome del primo elemento estratto puoi usare:
    anagrafeDataTable.Rows(0)("cognome")
  • Re: Problema con ordinamento access da VB2008

    Quindi, se ho capito bene, anagrafeDataTable contiene i dati ordinati disponibili solo ed esclusivamente durante l'esecuzone del sw (italiano moderno: run time ).
    Giusto ?
  • Re: Problema con ordinamento access da VB2008

    Si certo vedo che stai entrando nell'ottica.
Devi accedere o registrarti per scrivere nel forum
10 risposte