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

 

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

Αποφυγή διπλογγραφής σε ACCESS

Îåêßíçóå áðü ôï ìÝëïò TAKHS. Τελευταία δημοσίευση από το μέλος TAKHS στις 06-12-2006, 16:52. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-12-2006, 20:39 21702

    Αποφυγή διπλογγραφής σε ACCESS

    Aγαπητοί φίλοι Καλημέρα.
    Θα ήθελα την βοήθειά σας στο παρακάτω πρόβλημα , απορία μου.
    Σε βάση Access χρησιμοποιώ την Dcount Function για αποφυγή διπλοεγγραφής στο BeforeUpdate
    του πεδίου ΤΗΛΕΦΩΝΟ, με κριτήρια τα πεδία ΟΝΟΜΑ και ΤΗΛΕΦΩΝΟ με τον παρακάτω κώδικα που
    δουλεύει άψογα και μου βγάζει μήνυμα ότι υπάρχει διπλοεγγραφή.

    Private Sub ΤΗΛΕΦΩΝΟ_BeforeUpdate(Cancel As Integer)

       If DCount("*", "contacts", _
       "[ΤΗΛΕΦΩΝΟ] & """" = '" & Me.ΤΗΛΕΦΩΝΟ & "" & _
       "' And [ΟΝΟΜΑ] & """"  = '" & Me.ΟΝΟΜΑ & "" & "'") > 0 Then  
              MsgBox "bla bla bla..." vbInformation  
       End If
    End Sub

    Το πρόβλημά μου και απορία μου είναι η εξής:
    Θα ήθελα μετά το ΟΚ του μηνύματος να πηγαίνω στην πρώτη εγγραφή με το ίδιο ΟΝΟΜΑ και ΤΗΛΕΦΩΝΟ,
    αλλά κάτι  κάνω λάθος στον παρακάτω κώδικα που βάζω μέσα στο Sub ΤΗΛΕΦΩΝΟ_BeforeUpdate


    Private Sub ΤΗΛΕΦΩΝΟ_BeforeUpdate(Cancel As Integer)
    Dim tel As String
    Dim Onom As String
    Dim stLinkCriteria As String
    Dim rsc As DAO.Recordset

    Set rsc = Me.RecordsetClone

    Onom = Me.ΟΝΟΜΑ.Value
    tel = Me.ΤΗΛΕΦΩΝΟ.Value
    'Πιθανόν εδώ στο stLinkCriteria κάνω το λάθος
    stLinkCriteria = "[ΟΝΟΜΑ]=" & "'" & Onom & "'" and "[ΤΗΛΕΦΩΝΟ]=" & "'" & tel & "'"

       If DCount("*", "contacts", _
       "[ΤΗΛΕΦΩΝΟ] & """" = '" & Me.ΤΗΛΕΦΩΝΟ & "" & _
       "' And [ΟΝΟΜΑ] & """"  = '" & Me.ΟΝΟΜΑ & "" & "'") > 0 Then  
              
      MsgBox "bla bla bla..." vbInformation  

    rsc.FindFirst stLinkCriteria
    Me.Bookmark = rsc.Bookmark
       End If

    Set rsc = Nothing
    End Sub

    Μπορεί κάποιος να βοηθήσει;
    Ευχαριστώ εκ των προτέρων για οποιαδήποτε βοήθεια.
  •  05-12-2006, 20:58 21703 σε απάντηση της 21702

    Απ: Αποφυγή διπλογγραφής σε ACCESS

    Θα πρότεινα να μην καλείς την DCount. Να κάνεις κατευθείαν το rsc.FindFirst, και αν έχεις rsc.EOF τότε δεν έχεις δεύτερη φορά την ίδια εγγραφή. Αντί για το Bookmark που προσπαθείς να περάσεις στο αρχικό recordset καλύτερα θα ήταν να κάνεις και εκεί ένα me.recordset.FindFirst με κριτήρια που ήδη έχεις στο stLinkCriteria.

     

    George J.


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

    Απ: Αποφυγή διπλογγραφής σε ACCESS

    το string οντως το φτιάχνεις λάθος δοκίμασε το παρακάτω :

    stLinkCriteria = "[ΟΝΟΜΑ]='" & Onom & "' and [ΤΗΛΕΦΩΝΟ]='" & tel & "'"
  •  06-12-2006, 16:06 21753 σε απάντηση της 21743

    Smile [:)] Απ: Αποφυγή διπλογγραφής σε ACCESS

    Δε μπορείς να μετακινηθείς σε κάποια άλλη εγγραφή ενώ ακόμη δεν έχεις αποθηκεύσει ή αναιρέσει την τρέχουσα εγγραφή.

    Θα πρέπει πρώτα να ξεκαθαρίσεις τί θα κάνεις με την τρέχουσα διπλοεγγραφή ιδιαίτερα αν κανένα από τα πεδία Τηλέφωνο και Όνομα δεν έχει ορισμένη την ιδιότητα με ευρετήριο σε Ναι (Δεν επιτρέπονται διπλότυπα).

    Στον έλεγχο θα πρέπει επίσης να λάβεις υπόψην αν πρόκειται για νέα ή για ήδη αποθηκευμένη εγγραφή.

    Private Sub ΤΗΛΕΦΩΝΟ_BeforeUpdate(Cancel As Integer)

    Dim strPhone As String
    Dim strName As String
    Dim rs As Object

    strPhone = Nz(Me.ΤΗΛΕΦΩΝΟ)
    strName = Nz(Me.ΟΝΟΜΑ)

    If Me.NewRecord = True Then
        If DCount("*", "contacts", "ΤΗΛΕΦΩΝΟ='" & Me.ΤΗΛΕΦΩΝΟ & "' AND ΟΝΟΜΑ='" & Me.ΟΝΟΜΑ & "'") > 0 Then
            Me.Undo
            ' Εύρεση της εγγραφής που ταιριάζει
            Set rs = Me.Recordset.Clone
            rs.FindFirst "ΤΗΛΕΦΩΝΟ='" & strPhone & "' AND ΟΝΟΜΑ='" & strName & "'"
            If Not rs.EOF Then Me.Bookmark = rs.Bookmark
        End If
    Else
        If Me.Telephone.OldValue <> Me.Telephone Then
            If DCount("*", "contacts", "ΤΗΛΕΦΩΝΟ='" & Me.ΤΗΛΕΦΩΝΟ & "' AND ΟΝΟΜΑ='" & Me.ΟΝΟΜΑ & "'") > 0 Then
                Me.Undo
                ' Εύρεση της εγγραφής που ταιριάζει
                Set rs = Me.Recordset.Clone
                rs.FindFirst "ΤΗΛΕΦΩΝΟ='" & strPhone & "' AND ΟΝΟΜΑ='" & strName & "'"
                If Not rs.EOF Then Me.Bookmark = rs.Bookmark
            End If
        End If
    End If

    End Sub

     

  •  06-12-2006, 16:52 21759 σε απάντηση της 21702

    Απ: Αποφυγή διπλογγραφής σε ACCESS

    Ευχαριστώ όλους γαι τις απαντήσεις.

    Ειδικά εσένα KoYkoY κυρολεκτικά μου 'δωσες μασημένη τροφή.

    Να σαι καλά.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems