Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Update σε Join Tables

Îåêßíçóå áðü ôï ìÝëïò gmlogic. Τελευταία δημοσίευση από το μέλος PhilipKalogero στις 24-06-2005, 14:21. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  24-06-2005, 00:10 3064

    Geeked [8-|] Update σε Join Tables

    ΑΓΑΠΗΤΟΙ
    Έχουμε πχ δύο Tables APO1 (MF ΑΠΟΘΗΚΗΣ) ΚΑΙ APOTR (αρχείο εγραφών αποθηκης) συνδεδεμένα με ένα field APO1ID
    Fields APO1 πχ APO1ID,ADESCR
    Fields APOTR πχ APOTRID,APO1ID,VALUE
    Query γιά OleDbDataAdapter1
    SELECT     APO1.APO1ID,  APO1.ADESCR, APOTR.APO1ID,APOTR.VALUE
    FROM         (APO1 INNER JOIN  APOTR ON APO1.APO1ID = APOTR.APO1ID)
    Μύνημα
    Generated UPDATE statement.
    The original query has select list has columns from multiple tables.The statement
    cannot be generated automatically for this type of query
    Πως θα το κάνουμε το UPDATE
    Embarrassed
    Ευχαριστώ Γιώργος


    George Matzouranis
  •  24-06-2005, 03:02 3065 σε απάντηση της 3064

    Re: Update σε Join Tables

    Γιώργο έχεις ένα πεδίο ως primary key και στους δύο πίνακες που ονομάζεται APO1ID ή δεν το έχεις γράψει σωστά; Μήπως το πρόβλημα εστιάζεται εκεί;
    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  24-06-2005, 08:58 3066 σε απάντηση της 3065

    Re: Update σε Join Tables

     cap wrote:
    Γιώργο έχεις ένα πεδίο ως primary key και στους δύο πίνακες που ονομάζεται APO1ID ή δεν το έχεις γράψει σωστά; Μήπως το πρόβλημα εστιάζεται εκεί;


    Γιατί είμαι με την εντύπωση, ότι ο DataAdapter δεν γράφει μόνος του τα SQL statements για INSERT, UPDATE, DELETE όταν πρόκεται για JOINed SELECT Query;


    George J.

    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  24-06-2005, 09:36 3068 σε απάντηση της 3064

    Re: Update σε Join Tables

    Γιώργο μήπως θα επρεπε να δεις την εναλλακτική λύση stored procedure που θα την "δεσεις" στο InsertCommand / UpdateCommand. Στις παραμέτρους της sp όπως θα τις ορίσεις θα βάλεις σαν Source Column το όνομα του column των tables που αντιστοιχούν και μετά ασε τον DataAdapter να κανει τη δουλείά.

    Αν θες κώδικα γι αυτό πες μου.


    Philippos Kalogeropoulos
    M.C.P.
  •  24-06-2005, 12:53 3073 σε απάντηση της 3064

    Re: Update σε Join Tables

    Λοιπόν το συγκεκριμένο Query με προβλημάτιζε απο την VB6 με Access
    Έχουμε πχ ένα Datagrid όπου απεικονίζει στις γραμμές του το Query

    column1 column2 column3 column4
    APOTR.APO1ID APO1.ADESCR APOTR.VALUE APOTR.APOTRID

    κλπ
    sSQL=Query

    RS.Open sSQL, db, adOpenStatic, adLockOptimistic
    Set Datagrid1.DataSource = RS
    Σε RS.Update βγάζει err -2147467259(Ανεπαρκής πληροφορίες στήλης κλειδιών για ενημέρωση ή ανανέωση.)

    Και λογικό γιατί μάλλον δεν μπορεί να κάνει ταυτόχρονα ενημέρωση σε δύο Tables
    Λοιπόν και εγώ αποσύνδεα την RS από την βάση γινόταν το Update και στην εξοδο
    της Form ενημέρωνα το APOTR πίνακα από την RS με αναφορά το APOTR.APOTRID=TR!APOTRID γιατί βασικά αυτός ο πίνακας με ενδιέφερε
    Τον APO1 τον ήθελα μόνο για να βλεπω την περιγραφή του είδους
    Δεν ξέρω αν είναι ο καλύτερος τρόπος αλλά αυτόν σκέφτηκα

    Θα ήθελα μιας και περνάω σε .ΝΕΤ να ξέρω πως θά το κανω[:^)]

    Σας ευχαριστώ πολύ

    [8-|]

    Αγαπητέ
    PhilipKalogero
    Αν θελεις πες μου τον κώδικα




    RS.Open sSQL, db, adOpenStatic, adLockOptimistic 'adOpenKeyset, adLockOptimistic


    George Matzouranis
  •  24-06-2005, 14:21 3076 σε απάντηση της 3064

    Re: Update σε Join Tables

    Φίλε Γιώργο, σου στέλνω λίγο κώδικα που κάνω update το ApoTr talbe. Δυστυχώς δεν έχω μεγάλη οικιότητα με Access και χρησιμοποίησα Sql Server. Φαντάζομαι ομως οτι δεν εχουμε τεράστιες διαφορές τουλάχιτον για το Update.


    Private _ds As DataSet = New DataSet

    Private _da As OleDbDataAdapter = New OleDbDataAdapter

    Private Sub populateGrid()

    ' Αλλαξε το ConnectionString. Στο παράδειγμα παίζω με SqlServer

    Dim cn As OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=(local);Initial Catalog=GeorgeDB;User ID=sa;Password=;")

    ' Εχω κάνει select ένα παραπάνω πεδίο που φαντάζομαι οτι είναι το primary key του APOTR.

    ' Αυτό είναι αναγκαίο για να μπορέσει να βρεθεί το row που θα γίνει update.

    Dim cmdSelect As OleDbCommand = New OleDbCommand("SELECT APO1.APO1ID, APO1.ADESCR, APOTR.SOMEVALUE, APOTR.APOTRID FROM APO1 INNER JOIN APOTR ON APO1.APO1ID = APOTR.APO1ID", cn)

    ' Θα προτιμούσα να ηταν sp αλλά για ευκολία στο διάβασμα τώρα εγινε command text

    Dim cmdUpdate As OleDbCommand = New OleDbCommand("UPDATE APOTR SET APOTR.SOMEVALUE = ?, APOTR.APO1ID = ? WHERE APOTRID = ?", cn)

     

    ' Πρόσεξε εδώ την τελευταία παράμετρο μέσω της οποίας κάνεις Map τις παράμετρους με το πραγματικά Columns στη βάση

    ' έτσι ώστε ο DataAdapter να ξέρει ποιο column πάει σε ποια παράμετρο.

    cmdUpdate.CommandType = CommandType.Text

    cmdUpdate.Parameters.Add("@SomeValue", OleDbType.VarChar, 50, "SOMEVALUE")

    cmdUpdate.Parameters.Add("@Apo1ID", OleDbType.Integer, 4, "APO1ID")

    cmdUpdate.Parameters.Add("@ApoTrID", OleDbType.Integer, 4, "APOTRID")

    ' Γεμίζουμε SelectCommand + UpdateCommand. Inserts και Deletes δεν γίνονται.

    ' Αν θέλεις να κάνεις και Inserts/Deletes θα πρέπει να φτιάξεις commands και για

    ' αυτά και να τα αναθέσεις στο _da.InsertCommand και _da.DeleteCommand αντίστοιχα.

    _da.SelectCommand = cmdSelect

    _da.UpdateCommand = cmdUpdate

    Try

    _da.Fill(_ds, "GeorgeTable")

    ' GeorgeTable είναι το mapping name με το οποίο εμφανίζεται το

    ' table που γεμίζουμε στο DataSet

    Catch ex As OleDbException

    MessageBox.Show(ex.Message)

    End Try

     

    DataGrid1.SetDataBinding(_ds, "GeorgeTable")

    ' Θα μπορούσες να βάλεις .DataSource, .DataMember

    ' DataGrid1.DataSource = _ds

    ' DataGrid1.DataMember = "GeorgeTable"

    End Sub

    Private Sub saveDataSet()

    Try

    _da.Update(_ds, "GeorgeTable")

    Catch ex As OleDbException

    MessageBox.Show(ex.Message)

    End Try

    End Sub


     




    Philippos Kalogeropoulos
    M.C.P.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems