none
query da access a vb.net 2010 non và RRS feed

  • Domanda

  • Salve a tutti scusate in anticipo sto cercando di passare da acccess a vb.net creando un interfaccia ad un db perfettamente funzionante ma mi sono imbatuto in un problema che non mi spiego.

    in access ho una maschera continua che pesca i dati da due tabelle.

    tbl_equipment :                                                       tbl_equi_app:        ID=chiave primaria

    id_equi = chiaveprimaria     <relazione 1 a molti      Equipment_Name=numerico (chiave esterna

    Equipment_Name=testo                                              pieces=numerico

    price=valuta                                                         

    creo la query in modo che quando digito Id_equi mi recupera i valori dell'equipagiamento e mi calcola a secondo dei pezzi(pieces) il totale davvero comodo ed elemetare in Access .

    SELECT tbl_equi_app.ID, tbl_equi_app.ID_entry, tbl_equi_app.ID_Equipment, tbl_equipment.Equipment_Name, tbl_equi_app.pieces, tbl_equipment.price, [pieces]*[price] AS tot
    FROM tbl_equipment INNER JOIN (tbl_entry INNER JOIN tbl_equi_app ON tbl_entry.ID_entry = tbl_equi_app.ID_entry) ON tbl_equipment.ID_Equipment = tbl_equi_app.ID_Equipment;
    


    sto cercando di fare la stessa cosa in vb.net usando un datagrid ho modificato al query in questa maniera

    SELECT        tbl_equi_app.ID, tbl_equi_app.ID_entry, tbl_equi_app.ID_Equipment, tbl_equipment.price, tbl_equi_app.pieces, 
                             tbl_equipment.price * tbl_equi_app.pieces AS tot
    FROM            (tbl_equi_app INNER JOIN
                             tbl_equipment ON tbl_equi_app.ID_Equipment = tbl_equipment.ID_Equipment)

    ma tutto diventa di solo lettura e non riecoa prelevare i dati dalla tabella Equpment insomma non ci capisco na mazza

    Grazie per ogni vostro consiglio.

    Giovanni_A

    martedì 9 ottobre 2012 13:04

Risposte

  • Utilizzando le DataTable puoi impostare i comandi di aggiornamento direttamente sul DataAdapter e differenziare le query di select da quelle di update. Su MSDN a questo indirizzo:

    http://msdn.microsoft.com/it-it/library/system.data.oledb.oledbdataadapter(v=vs.80).aspx

    c'è un esempio che fa proprio al caso tuo.

    In buona sostanza usi una query per recuperare i dati con il SelectCommand e lui ti mappa tutte le variabili sulle varie colonne, dopodiché indichi all'update, al delete e all'insert command quali sono i loro statment SQL da usare per aggiornare il DB.

    Questa funzionalità è supportata anche dal designer della DataTable.

    HTH


    Alberto De Luca [MVP - Visual Basic .NET]

    • Contrassegnato come risposta Giovanni_A mercoledì 10 ottobre 2012 13:55
    mercoledì 10 ottobre 2012 13:35

Tutte le risposte

  • In access sei direttamente sul DB e la logica di aggiornamento è gestita dal motore integrato che riesce a fare l'upgrade della tabella in query poichè conosce come i campi sono mappati. In vb.net la query che tu interroghi sul db appare lato client come fosse una tabella risultante dall'operazione, appunto, di query. Il provider odbc con cui recuperi i dati non vede l'origine effettiva dei dati bensì soltanto una loro rappresentazione tabellare e per questo non è capace di generare i comandi necessari all'aggiornamento.

    HTH


    Alberto De Luca [MVP - Visual Basic .NET]

    mercoledì 10 ottobre 2012 06:41
  • Ciao Alberto grazie della risposta come potrei aggirare il tutto?

    io dovrei fare in modo che in un datagrid potessi recuperare "Id" Equipaggiamento e "prezzo_equp" e poterlo calcolare con i "Pezzi" per poter ottenere il totale in rete una volta avevo trovato un video con qualcosa del genere ma adesso che lo cerco non lo trovo.

    Grazie ancora dell'inrteressamento.

    Giovanni_A

    mercoledì 10 ottobre 2012 10:55
  • Con cosa stai accedendo ai dati? DataTable? EntityFramework?

    Alberto De Luca [MVP - Visual Basic .NET]

    mercoledì 10 ottobre 2012 11:11
  • Ciao Alberto grazie per il tuo interessamento accedo ai dati essendo da poco che smanetto con vb.net nel modo classico con dataSet e datatable

    Grazie ancora dell'inrteressamento.

    Giovanni_A

    mercoledì 10 ottobre 2012 12:26
  • Utilizzando le DataTable puoi impostare i comandi di aggiornamento direttamente sul DataAdapter e differenziare le query di select da quelle di update. Su MSDN a questo indirizzo:

    http://msdn.microsoft.com/it-it/library/system.data.oledb.oledbdataadapter(v=vs.80).aspx

    c'è un esempio che fa proprio al caso tuo.

    In buona sostanza usi una query per recuperare i dati con il SelectCommand e lui ti mappa tutte le variabili sulle varie colonne, dopodiché indichi all'update, al delete e all'insert command quali sono i loro statment SQL da usare per aggiornare il DB.

    Questa funzionalità è supportata anche dal designer della DataTable.

    HTH


    Alberto De Luca [MVP - Visual Basic .NET]

    • Contrassegnato come risposta Giovanni_A mercoledì 10 ottobre 2012 13:55
    mercoledì 10 ottobre 2012 13:35
  • Ciao Alberto ti ringrazio davvero tanto non ho ancora provato ma la strada credo che me l'hai indicata faro sapere i risultati

    grazie davvero tanto a te e a tutte le persone come te che ci regalano la loro esperioenza

    Giovanni_A

    mercoledì 10 ottobre 2012 13:55
  • Salve Aalberto ho smanettato tante ore ma alla fine con un piccolo stratagemme anche se credo che non sia propio da  manuale ma funziona ho modificato la query in questa maniera e come hai detto tu dato che si lavora con i dati disconnessi i risultati si vedono solo dopo che si salva e si ricarica il dataset.

    SELECT        tbl_equi_app.ID, tbl_equi_app.ID_entry, tbl_equi_app.ID_Equipment, tbl_equi_app.pieces, tbl_equi_app.pieces * tbl_equipment.price AS tot, 
                             tbl_equi_app.pieces * tbl_equipment.price / tbl_equi_app.pieces AS Prezzo
    FROM            (tbl_equi_app INNER JOIN
                             tbl_equipment ON tbl_equi_app.ID_Equipment = tbl_equipment.ID_Equipment)

    Grazie ancora ,

    Giovanni_A

    giovedì 11 ottobre 2012 18:51