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

 

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

RecordSet AddNew

Îåêßíçóå áðü ôï ìÝëïò Vagele. Τελευταία δημοσίευση από το μέλος Vagele στις 30-04-2010, 12:34. Υπάρχουν 14 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  28-04-2010, 17:29 58398

    RecordSet AddNew

    Ο τίτλος ίσως να μην είναι και σωστός. Θα τον αλλάξω αν χρειαστεί.
    Ένας γνωστός μου είχε ένα project σε VB6 με access. Το μεταφέραμε λοιπόν σε SQL Server 2005. Ξαναπιάσαμε το project από την αρχή για τις απαραίτητες διορθώσεις. Εδώ λοιπόν έχω κάποιες ερωτήσεις μιας κι έχω ασχοληθεί μόνο με Visual Studio 2008, VB.NET και SQL Server 2008.
    Στο κουμπί εισαγωγής νέας εταιρίας με βάση τα στοιχεία που πληκτρολογούμε κάνει Adodc1.RecordSet.AddNew Array(οι στήλες) και μετά Adodc1.Recordset.Update. Κάνει όμως στο ίδιο κουμπί addnew και σε άλλους δύο πίνακες. Στον δεύτερο πίνακα χτυπάει για foreign key και έτσι η εισαγωγή διακόπτεται. Στον πρώτο πίνακα όμως έχουν περαστεί τα δεδομένα κανονικά. Δεν θέλω όμως να γίνεται κάτι τέτοιο την στιγμή που δεν ολοκληρώνονται σωστά οι άλλες εισαγωγές. Υπάρχει κάτι αντίστοιχο όπως το RollBack; Αυτό προς το παρών και έπεται και συνέχεια. Συγνώμη αν τα έγραψα κάπως μπερδεμένα.
  •  28-04-2010, 21:24 58407 σε απάντηση της 58398

    Απ: RecordSet AddNew

    Πάνω στο Connection object υπάρχει η BeginTransaction και το commit και rollback ειναι όλα πάνω στο connection object. Όλα αυτά θα τα πάρεις από το Connection property του recordset

     


    Antonios Chatzipavlis

  •  28-04-2010, 21:38 58408 σε απάντηση της 58407

    Απ: RecordSet AddNew

    Το rollback πρέπει να το βάλω στο on error go to ?;
  •  28-04-2010, 22:25 58412 σε απάντηση της 58408

    Απ: RecordSet AddNew

    Έαν έχεις ένα κεντρικό ναι, ή θα το βάλεις στο σημείο που ελέγχεις τα λάθη από το transaction εαν έχεις δύο παγίδες λαθών δες παρακατω

    Dim myConnection As ADODB.Connection
    Dim myRecordset As ADODB.Recordset

    Set myConnection = New ADODB.Connection
    Set myRecordset = New ADODB.Recordset

    myConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=c:\BegDB\Biblio.mdb"

    '—Open the connection --
    myConnection.Open

    'Determine if we conected.
    If myConnection.State = adStateOpen Then

      myRecordset.Open "SELECT * FROM TITLES", myConnection, _
                                    adOpenDynamic, adLockOptimistic, adCmdTable
    Else
      MsgBox "The connection could not be made."
      myConnection.Close
      Exit Sub
    End If

    '—just to be sure --
    myRecordset.MoveFirst

    On Error GoTo transError

    '—here is the top of the transaction sandwich --
    myConnection.BeginTrans

    While Not myRecordset.EOF
       mcounter = mcounter + 1
       myRecordset!Title = myRecordset!Title & ""  'so we don't really change it
       myRecordset.Update
       myRecordset.MoveNext
    Wend

    '—if we got here ok, then everything is written at once
    myConnection.CommitTrans
    myRecordset.Close
    myConnection.Close

    Exit Sub

    transError:
       myConnection.RollBack
       myRecordset.Close
         myConnection.Close
       MsgBox Err.Description

     


    Antonios Chatzipavlis

  •  28-04-2010, 22:41 58416 σε απάντηση της 58412

    Απ: RecordSet AddNew

    Αν για το ίδιο connection χρησιμοποιώ πολλά recordset (στην περίπτωση μου 3) το myConnection.CommitTrans το βάζω μετά μία φορά και μετά την ολοκλήρωση και των τριών; Κι αν το πρόβλημα είναι π.χ. στο δεύτερο recordset αλλά στο πρώτο έχει γίνει κανονικά update τότε το rollback θα ξαναγυρίσει το πρώτο στην αρχική του κατάσταση;
  •  28-04-2010, 23:35 58419 σε απάντηση της 58416

    Απ: RecordSet AddNew

    Correct!


    Antonios Chatzipavlis

  •  29-04-2010, 12:32 58421 σε απάντηση της 58419

    Απ: RecordSet AddNew

    Όταν κάνουμε ένα addnew και μετά update πως παίρνουμε από την τελευταία αυτή εγγραφή στον server την τιμή μιας συγκεκριμένης στήλης του πίνακα;
  •  29-04-2010, 13:55 58426 σε απάντηση της 58421

    Απ: RecordSet AddNew

    Γίνε λίγο ποιο σαφής γιατί δεν το καταλαβα
    Antonios Chatzipavlis

  •  29-04-2010, 14:15 58427 σε απάντηση της 58426

    Απ: RecordSet AddNew

    Όταν κάνεις recordset.addnew και μετά recordset.update γίνεται εισαγωγή στην βάση σωστά;
    Πως γίνεται λοιπόν από αυτή την τελευταία εγγραφή να πάρω κάποια τιμή;
  •  29-04-2010, 14:28 58428 σε απάντηση της 58427

    Απ: RecordSet AddNew

    Λοιπόν αν κατάλαβα καλά.

    Μετά το update αν θέλεις να διαβάσεις την εγγραφή θα πρέπει να την κάνεις read, αλλά αυτό δεν σου χρειάζεται μιας και έχεις τις τιμές των πεδίων.

    Αυτό που μάλλον θέλεις είναι ρωτήσεις, υποθέτω, είναι να πάρεις την τιμή από κάποιο identity πεδίο.

    Σε αυτή την περίπτωση θα πρέπει να έχεις ένα transaction και με τα από το update να κάνεις ένα select scope_identity() or select @@Identity command.


    Antonios Chatzipavlis

  •  29-04-2010, 14:31 58429 σε απάντηση της 58428

    Απ: RecordSet AddNew

    Ακριβώς αυτό ήθελα. Ευχαριστώ.
  •  29-04-2010, 15:11 58431 σε απάντηση της 58429

    Απ: RecordSet AddNew

    Κάτι ακόμα. Στον συνδυασμό VB6 με SQL Server 2005 είναι καλύτερο να χρησιμοποιούμε transactions και τα αντίστοιχα insert, update, delete ή τα addnew, update, delete των recordset; Ελπίζω να μην σε μπέρδεψα.
  •  29-04-2010, 15:25 58432 σε απάντηση της 58431

    Απ: RecordSet AddNew

    Εάν έχεις ένα και μόνο ένα δεν έχει νοήμα να χρησιμοποίεις begin tran έτσι και αλλιώς και το ένα, transaction είναι


    Antonios Chatzipavlis

  •  30-04-2010, 10:48 58448 σε απάντηση της 58427

    Απ: RecordSet AddNew

    Vagele:
    Όταν κάνεις recordset.addnew και μετά recordset.update γίνεται εισαγωγή στην βάση σωστά;
    Πως γίνεται λοιπόν από αυτή την τελευταία εγγραφή να πάρω κάποια τιμή;

    Μισό εδώ - δεν χρειάζεται να γράψεις transaction ή store procedure για να παίξει αυτό - αν το connection έχει client cursor και είναι dynamic, ώστε φαίνονται οι αλλαγές κατευθείαν στο recordset, τότε μετά το recordset.Update() στο recordset.Fields("primarykey").value θα έχει την τιμή που πήρε το primary key. Κώδικας που παίζει επάνω στη γνωστή "Northwind" και κάνω ακριβώς αυτό:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
        ConnString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind;Data Source=."
        Set Conn = New ADODB.Connection
        Conn.CursorLocation = adUseClient
        Conn.Open ConnString
        
        Set Results = New ADODB.Recordset
        Set Results.ActiveConnection = Conn
        Results.CursorLocation = adUseClient
        Results.Open "Orders", Conn, adOpenDynamic, adLockOptimistic, adCmdTableDirect
        
        Debug.Print IIf(Results.Supports(adResync), "Supports", "Don't Support") & " Resync"
        
        Results.AddNew
        Results.Fields("CustomerID") = "ALFKI"
        Results.Fields("EmployeeID") = 1
        Results.Update
        
        'Results.Resync adAffectCurrent
        MsgBox Results.Fields("OrderID").Value
                    
        Results.Close
        Conn.Close

     

    George J.

     


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  30-04-2010, 12:34 58452 σε απάντηση της 58448

    Απ: RecordSet AddNew

    Σε μία while recordest.EOF=false μετά το τέλος της και αφού κάνω κάποιες συγκεκριμένες διαγραφές πρέπει να κάνω και update, όμως εκεί χτυπάει και λέει "Either BOF or EOF is True, or the current record has been deleted". Όντως μετά το τέλος της while το eof=true. Τι μπορώ να κάνω ώστε να γίνει τελικά το update;
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems