Προς το περιεχόμενο

Access - ΠΝΙΓΟΜΑΙ στα απλά ...


Pleasure

Προτεινόμενες αναρτήσεις

Δημοσ.

Αγαπητοί συμφορουμίτες καλησπέρα σας. Θα ήθελα το εξής.

 

Έστω έχω μια βάση με 2 πίνακες με ίδια πεδία.

 

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

Κατά τον ίδιο τρόπο θα ήθελα να διαγράφω μια εγγραφή κλπ.

 

Δεν θέλω να το κάνω με Update Queries. Κάτι θα πρέπει να γίνεται με ADO κλπ αλλά δεν ξέρω τέτοιο κώδικα.

 

 

Ευχαριστώ προκαταβολικά ...

Δημοσ.

Γιατί οχι με update queries; Τί εννοείς με ADO το ADO είναι είδος connection σε Database από ό,τι ξέρω...

Δημοσ.
Γιατί οχι με update queries; Τί εννοείς με ADO το ADO είναι είδος connection σε Database από ό,τι ξέρω...

Δίκιο έχει ο φίλος εκτός και αν η Access παρέχει triggers (που δεν νομίζω). To ADO (ActiveX Data Objects) είναι ενα API για πρόσβαση σε βάσεις δεδομένων, με το οποίο μπορείς να εκτελέσεις queries στη βαση σου.

http://www.w3schools.com/ado/default.asp

Δημοσ.

Δηλαδή δεν γίνεται με κώδικα να προσθέσω Records στον άλλο πίνακα ? Πρέπει να κάνω Update ή Addon query ?

Δημοσ.

Για να το καταφέρω αυτό μέχρι τώρα έκανα την μία φόρμα Subform μέσα στην κύρια φόρμα. Με το On click στο + τοποθετούσα στα πεδία της Subform τα δεδομένω των πεδίων της κυρίας φόρμας και με ένα Me.requery γινόταν και η αποθήκευση.

 

Αυτό που θέλω είναι να παρακάμψω τις υποφόρμες, να μην τις χρησιμοποιώ. Επίσης να μην τρέχω Update Queries γιατί ουσιαστικά πρόκειται για μπακαλίστικη μέθοδο και μάλιστα σε πολλές περιπτώσεις αργή.

 

Γι αυτό να ξέρετε κάτι σε VB ή οτιδήποτε άλλο θα επιθυμούσα την βοήθειά σας ...

Δημοσ.

Δεν ξέρω αν είναι αυτό που ζητάς, αλλά θα βοηθούσε αν έδειχνες τον κώδικα για το κουμπάκι + που σχεδίασες.

 

>
Sub AddSameRecord()
Dim rs As New ADODB.Recordset
Dim TableName As String

TableName = "Table1" ' Το όνομα του πίνακα που θα ενημερώσεις

rs.Open "Select * From [" & TableName & "]", _
        CurrentProject.Connection, adOpenKeyset, adLockOptimistic

rs.AddNew

rs.Fields("aFieldName").Value = Text1 ' Το αντίστοιχο textbox στη φόρμα
' Το ίδιο για όλα τα πεδία

rs.Update
rs.Close

End Sub

 

Τη Sub AddSameRecord πρέπει να την καλείς από τον κώδικα στο κουμπί +

Πολύ πιθανόν να γίνεται και μέσα στον κώδικα για το κουμπί +

 

 

Όσο για το delete, τί κώδικα χρησιμοποιείς;

Δημοσ.

Φίλε είσαι ΜΕΓΑΣ. Αυτό ακριβώς που έψαχνα. Το δόκίμασα και δουλεύει εκπληκτικά. Για να σβήσω άκου τί κουφό έκανα (και εξακολουθώ να κάνω):

- Είχα μέσα στην κεντρική φόρμα τα Subforms (που οδηγούσαν στους αντίστοιχους πίνακες).

-Αντί να σβήνω εγγραφές έκανα Link τις subform με την κυρία φόρμα μέσω του Lot Numer (ενός συγκεκριμένου πεδίου που ήταν κοινό) και στη συνέχεια έδινα Null τιμές στα πεδία της Subform. Επομένως δεν έσβηνα εγγραφή αλλά μετέτρεπα όλα τα πεδία της εγγραφής σε Null.

- Στην συνέχεια έτρεχα ένα Query για να κάνω Erase όλες τις Null Εγγραφές για κάθε πίνακα.

 

Με λίγα λόγια μεγάλο ΠΑΚΕΤΟ !!!

 

Τώρα τουλάχιστον γράφω με τον δικό σου τρόπο. Πώς όμως μπορώ να σβήσω με τον δικό σου τρόπο συγκεκριμένες εγγραφές (για παράδειγμα όπου Lot=33 όπου το Lot είναι απλά ένα πεδίο και όχι πεδίο-κλειδί). ?????

 

Φίλε και πάλι σε ευχαριστώ. Είσαι ΣΩΤΗΡΑΣ έστω και για την εισαγωγή των δεδομένων ...

Δημοσ.

>
Function DeleteRecord(FromTable As String, WhereFieldName As String, HasValue) As Boolean
Dim rs As New ADODB.Recordset

rs.Open "Select * From [" & FromTable & "]", _
        CurrentProject.Connection, adOpenKeyset, adLockOptimistic

rs.MoveFirst
If TypeName(HasValue) = "String" Then ' Ο τύπος είναι string (και οι ημερ/νίες δίνονται σαν string)
   rs.Find "[" & WhereFieldName & "] = '" & HasValue & "'"
Else ' Ο τύπος δεν είναι string (δουλεύει για αριθμούς, αλλά δεν το δοκίμασα για τους άλλους τύπους)
   rs.Find "[" & WhereFieldName & "] = " & HasValue
End If


If rs.EOF Then
   'MsgBox "Η εγγραφή δεν βρέθηκε"
   DeleteRecord = False
Else
   rs.Delete
   DeleteRecord = True
End If

rs.Close

End Sub

 

Νομίζω ότι τα ορίσματα της DeleteRecord είναι κατανοητά

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...