Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Πρόβλημα με κώδικα σε πεδίο (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/3655-problima-me-kodika-se-pedio.html)

γιώργοςΚ 22-04-15 13:57

Πρόβλημα με κώδικα σε πεδίο
 
Καλησπέρα στην παρέα,

Προσπαθώ να δημιουργήσω την υποδομή έτσι ώστε να μπορώ να αντιγράφω τα δεδομένα απο ένα Record σε ένα νέο, και αντιμετωπίζω πρόβλημα με το πεδίο [Notes] επειδή το format του είναι Memo.
Σημειώστε ότι ο κώδικας και η όλη διαδικασία δουλεύει εάν ακυρώσω την γραμμή κώδικα που αφορά το συγκεκριμένο πεδίο

Παραθέτω αυτούσιο τον κώδικα έτσι ώστε να μπορέσω να γίνω πιο κατανοητός:

Private Sub cmdDublicateRec_Click()
On Error GoTo Err_cmdDublicateRec_Click

Dim lngID As Long, dbs As DAO.Database
Dim lngDietType As Long
Dim lngNewDietID As Long
Dim lngBreakfastMeals As Long
Dim lngSnack1Meals As Long
Dim lngLunchMeals As Long
Dim lngSnack2Meals As Long
Dim lngDinnerMeals As Long
Dim lngNightMeals As Long
Dim lngBefSleepMeals As Long
Dim lngNotes As Long (εδώ είναι το πρόβλημα διότι πιστεύω πως δεν πρέπει να έχω As Long αλλά κάτι άλλο εφόσον το πεδίο αυτό είναι Memo)

If Not Me.NewRecord Then
lngID = Me.DietID
lngDietType = Me.DietType
lngBreakfastMeals = Me.BreakfastMeals
lngSnack1Meals = Me.Snack1Meals
lngLunchMeals = Me.LunchMeals
lngSnack2Meals = Me.Snack2Meals
lngDinnerMeals = Me.DinnerMeals
lngNightMeals = Me.NightMeals
lngBefSleepMeals = Me.BefSleepMeals
lngNotes = Me.Notes

Set dbs = CurrentDb
With Me.RecordsetClone
.AddNew
![Customer No] = Me.txtCustomer
!DietType = lngDietType
!BreakfastMeals = lngBreakfastMeals
!Snack1Meals = lngSnack1Meals
!LunchMeals = lngLunchMeals
!Snack2Meals = lngSnack2Meals
!DinnerMeals = lngDinnerMeals
!NightMeals = lngNightMeals
!BefSleepMeals = lngBefSleepMeals
!Notes = lngNotes

lngNewDietID = !DietID
.Update
.FindFirst ("DietID=" & lngNewDietID)
If Not .NoMatch Then Me.Bookmark = .Bookmark
End With

Αισιοδοξώ προς θα μπορέσει κάποιος πιο έμπειρος φίλος στο φόρουμ να με βοηθήσει και ευχαριστώ εκ προτέρων.

Φιλικά

kapetang 23-04-15 09:25

Καλημέρα και χρόνια πολλά.

Γιώργο, θα σου πρότεινα να δημιουργήσεις μια νέα ΒΔ.

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

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

Φιλικά/Γιώργος

γιώργοςΚ 23-04-15 10:02

Καλημέρα, Χρόνια σου Πολλά Γιώργο μου....πάντα γερός..!!

Γιώργο έχεις δίκιο στην αναφορά σου περί Upload μιας βάσης που να περιλαμβάνει όλα τα σχετικά αλλά αρκετα δύσκολο έως ανέφικτο εξαιτίας ότι για να μπορεί κάποιος να δουλέψει με το σχετικό κομμάτι του σημείου που είναι ενσωματωμένος ο κώδικας, πρέπει δυστυχώς να "ξεσηκωσω" πάνω απο την μισή βάση...

Θα με βοηθούσε έστω μια διαφώτηση στο εξής;

1. εάν πεδίο είναι Memo τι βαζουμε στο .......As......? (πχ As Long - Byte - ??)
2. Εάν μπορώ ίσως να ανατρέξω σε κάποιο βιβλίο - ιστοσελίδα ή οτιδήποτε επιμορφωτικό υλικό έτσι ώστε να πάρω και να μελετήσω την πιο πάνω απορία..

Σε ευχαριστώ για το ενδιαφέρον Γιώργο, συνήθως όταν και εφόσον χρειάζομαι κάποια βοήθεια φροντίζω και ανεβάζω κάποιο "παράδειγμα - βάση" έτσι ώστε να μπορεί κάποιος να αντιληφθεί τι χρειάζομαι. Δυστυχώς στην προκυμένη περίπτωση είναι σχεδόν αδύνατο να γίνει κάτι ανάλογο φίλε..

Ευχαριστώ

Spirosgr 23-04-15 10:10

Καλημέρα
Εντελώς τυχαία, διάβασα το ζητούμενό σου.
Επειδή το Note, είναι δεσμευμένη λέξη, (keyword) θα ήταν καλό, να αλλάξεις με κάτι παρόμοιο, πχ Info
Κάνε και το memo as String
Δοκίμασε τον κώδικα, μήπως και γλυτώσεις τις φασαρίες.
Χωρίς να γνωρίζω το έργο σου, αν οι μεταβλητές (γενικά) είναι αριθμητικά πεδία, ακέραιοι,
και έχουν να κάνουν με ποσότητες γευμάτων (από την ονομασία) ίσως και το Long είναι υπερβολικό.
Επιφυλάσσομαι της απάντησής μου, επειδή δεν γνωρίζω όπως είπα το έργο σου.

γιώργοςΚ 23-04-15 11:56

1 Συνημμένο(α)
Γειά σου Σπύρο και ευχαριστώ για την βοήθεια,

Ωστόσο, έχω τροποποιήσει τον κώδικα όπως εισηγείσαι αλλά εντούτις λαμβάνω error msg (το οποίο επισυνάπτω). Έχω δηλαδή κάνει το πιο κάτω:

Private Sub cmdDublicateRec_Click()
On Error GoTo Err_cmdDublicateRec_Click

Dim lngID As Long, dbs As DAO.Database
Dim lngDietType As Long
Dim lngNewDietID As Long
Dim lngBreakfastMeals As Long
Dim lngSnack1Meals As Long
Dim lngLunchMeals As Long
Dim lngSnack2Meals As Long
Dim lngDinnerMeals As Long
Dim lngNightMeals As Long
Dim lngBefSleepMeals As Long

Dim lngDietCalories As Single
Dim lngCarbs As Single
Dim lngProtein As Single
Dim lngFat As Single
Dim IngInfo As String

Dim lngbrTime As Single
Dim lngbrTimeÔï As Single
Dim lngBrSnTime As Single
Dim lngBrSnTimeÔï As Single
Dim lngLunTime As Single
Dim lngLunTimeÔï As Single
Dim lngAftTime As Single
Dim lngAftTimeÔï As Single
Dim lngDinTime As Single
Dim lngDinTimeÔï As Single
Dim lngNightTime As Single
Dim lngNightTimeÔï As Single
Dim lngDrnkTime As Single
Dim lngDrnkTimeÔï As Single


If Not Me.NewRecord Then
lngID = Me.DietID
lngDietType = Me.DietType
lngBreakfastMeals = Me.BreakfastMeals
lngSnack1Meals = Me.Snack1Meals
lngLunchMeals = Me.LunchMeals
lngSnack2Meals = Me.Snack2Meals
lngDinnerMeals = Me.DinnerMeals
lngNightMeals = Me.NightMeals
lngBefSleepMeals = Me.BefSleepMeals

lngbrTime = Me.brTime
lngbrTimeÔï = Me.brTimeÔï
lngBrSnTime = Me.BrSnTime
lngBrSnTimeÔï = Me.BrSnTimeÔï
lngLunTime = Me.LunTime
lngLunTimeÔï = Me.LunTimeÔï
lngAftTime = Me.AftTime
lngAftTimeÔï = Me.AftTimeÔï
lngDinTime = Me.DinTime
lngDinTimeÔï = Me.DinTimeÔï
lngNightTime = Me.NightTime
lngNightTimeÔï = Me.NightTimeÔï
lngDrnkTime = Me.DrnkTime
lngDrnkTimeÔï = Me.DrnkTimeÔï

lngDietCalories = Me.DietCalories
lngCarbs = Me.pCarbs
lngProtein = Me.pProtein
lngFat = Me.pFat
IngInfo = Me.Notes

Set dbs = CurrentDb
With Me.RecordsetClone
.AddNew
![Customer No] = Me.txtCustomer
!DietType = lngDietType
!BreakfastMeals = lngBreakfastMeals
!Snack1Meals = lngSnack1Meals
!LunchMeals = lngLunchMeals
!Snack2Meals = lngSnack2Meals
!DinnerMeals = lngDinnerMeals
!NightMeals = lngNightMeals
!BefSleepMeals = lngBefSleepMeals

!brTime = lngbrTime
!brTimeÔï = lngbrTimeÔï
!BrSnTime = lngBrSnTime
!BrSnTimeÔï = lngBrSnTimeÔï
!LunTime = lngLunTime
!LunTimeÔï = lngLunTimeÔï
!AftTime = lngAftTime
!AftTimeÔï = lngAftTimeÔï
!DinTime = lngDinTime
!DinTimeÔï = lngDinTimeÔï
!NightTime = lngNightTime
!NightTimeÔï = lngNightTimeÔï
!DrnkTime = lngDrnkTime
!DrnkTimeÔï = lngDrnkTimeÔï

!DietCalories = lngDietCalories
!pCarbs = lngCarbs
!pProtein = lngProtein
!pFat = lngFat
!Notes = IngInfo

lngNewDietID = !DietID
.Update
.FindFirst ("DietID=" & lngNewDietID)
If Not .NoMatch Then Me.Bookmark = .Bookmark
End With


Κάθε βοήθεια είναι σημαντική.

Ευχαριστώ πολύ

γιώργοςΚ 23-04-15 14:07

Σπύρο χαιρετώ και πάλι,

Στην προσπάθεια μου να βρώ λύση στον κώδικα, εντόπισα οτι η βάση μου δυστυχώς για κάποιο λόγο έγινε corrupt και έτσιμ αφενώς μέν 1) άνοιξα μια νέα access 2) έριξα όλα τα αντικείμενα μέσα 3) προσάρμωσα τον κώδικα όπως ακριβώς μου έχεις εισηγηθεί.....και φυσικά ΔΟΥΛΕΥΕΙ μια χαρά..!!

Φίλε μπορεί εντελώς τυχαία να είδες την ανάρτηση μου αλλά μάλλον θεόσταλτος θα ήσουν..! Σε ευχαριστώ άλλη μια φορά.

Καλή συνέχεια

kapetang 23-04-15 14:39

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

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

γιώργοςΚ 23-04-15 19:11

Καλησπέρα Γιώργο και σε όλη την παρέα

Γιώργο οι γνώσεις μου είναι πολύ περιορισμένες σε vba, αν θές και έχεις την καλοσύνη μπορείς να μου δείξεις στον κώδικα μου τί ακριβώς εννοείστ

Νάσαι καλά

kapetang 23-04-15 21:16

Αντί:
lngDietType = Me.DietType
!DietType = lngDietType

Θα μπορούσες να γράψεις (είνα απλά μαθηματικά):
!DietType = Me.DietType

Έτσι θα καταργούσες την εντολή lngDietType = Me.DietType και τη δήλωση της μεταβλητής lngDietType, δηλαδή το μεγαλύτερο μέρος του κώδικα.

γιώργοςΚ 24-04-15 17:49

Γιώργο γειά σου,

Δηλαδή να μπορούσε ο κώδικας να δουλέψει έτσι?

Private Sub cmdDublicateRec_Click()
On Error GoTo Err_cmdDublicateRec_Clicκ

Set dbs = CurrentDb
With Me.RecordsetClone
.AddNew
![Customer No] = Me.txtCustomer
!DietType = lngDietType
!BreakfastMeals = lngBreakfastMeals
!Snack1Meals = lngSnack1Meals
!LunchMeals = lngLunchMeals
!Snack2Meals = lngSnack2Meals
!DinnerMeals = lngDinnerMeals
!NightMeals = lngNightMeals
!BefSleepMeals = lngBefSleepMeals

!brTime = brTime
!brTimeÔï = brTimeÔï
!BrSnTime = BrSnTime
!BrSnTimeÔï = BrSnTimeÔï
!LunTime = LunTime
!LunTimeÔï = LunTimeÔï
!AftTime = AftTime
!AftTimeÔï = AftTimeÔï
!DinTime = DinTime
!DinTimeÔï = DinTimeÔï
!NightTime = NightTime
!NightTimeÔï =NightTimeÔï
!DrnkTime = DrnkTime
!DrnkTimeÔï = DrnkTimeÔï

!DietCalories = DietCalories
!pCarbs = Carbs
!pProtein = Protein
!pFat = Fat
!Notes = Info

lngNewDietID = !DietID
.Update
.FindFirst ("DietID=" & lngNewDietID)
If Not .NoMatch Then Me.Bookmark = .Bookmark
End With

Φιλικά,

kapetang 24-04-15 19:15

Καλησπέρα

Γιώργο, διάβασε προσεκτικά τι γράφω. Νομίζω κόλλησες.

Επαναλαμβάνω οι μεταβλητές: lngBreakfastMeals, lngSnack1Meals, lngLunchMeals κλπ είναι άχρηστες.

Χρησιμοποίησε στη θέση τους τα αντίστοιχα στοιχεία ελέγχου (πεδία) της φόρμας:

Me.BreakfastMeals, Me.Snack1Meals, Me.LunchMeals, κλπ.

Φιλικά/Γιώργος


Η ώρα είναι 05:38.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2