Η σελίδα μας αναβαθμίστηκε, γι' αυτό τον λόγο τα μέλη μας θα πρέπει να ζητήσουν νέο κωδικό πρόσβασης από την υπηρεσία "Αποστολή κωδικού πρόσβασης".
Εάν το email με τον νέο κωδικό δεν έρθει στο inbox κοιτάξτε και στο spam folder. Ο server είναι φρέσκος και δεν έχει το reputation που του αξίζει.

Multiple Instances of Access

Συζητήσεις για την τοπική βάση δεδομένων Access της Microsoft

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Multiple Instances of Access

Δημοσίευση από Antonis78 » 21 Μαρ 2008 11:50

Χαιρετώ

Έχω το εξής θέμα:

Έχω φτιάξει μία βάση σε Access η οποία έχει κάποιους tables linked σε έναν SQL Server από τους οποίους παίρνω κάποια data και τα περνάω σε tables που έχω στην βάση μου (αφού τα επεξεργαστώ κάπως).
Αυτήν την στιγμή πρέπει να κάνω μία διαδικασία update κάθε μέρα για να τραβάω τις αλλαγές από τον SQL Server και να ανανεώνω τους πίνακές μου, με ένα script που έχω φτιάξει.
Το θέμα είναι πως θα βλέπω αν χρησιμοποιεί και κάποιος άλλος την Access εκείνη την στιγμή, να τον ειδοποιήσω ότι θα κλείσει η εφαρμογή (με ένα popup ίσως) και μετά να κλείσω όλα τα instances εκτός από το δικό μου για τρέξω το script του update.
Το αρχείο Access βρίσκεται σε ένα shared φάκελλο κάπου στο δίκτυο και το χρησιμοποιούν πολλοί, με αποτέλεσμα να μην ξέρω ποιος το χρησιμοποιεί κάθε φορά και να αναγκάζομαι να παίρνω τηλέφωνα για να κλείσουν το πρόγραμμα.

Αν κάποιος μπορεί να βοηθήσει, ευχαριστώ πολύ!

Άβαταρ μέλους
kon73
Script Master
Δημοσιεύσεις: 224
Εγγραφή: 13 Απρ 2008 23:47
Επικοινωνία:

Multiple Instances of Access

Δημοσίευση από kon73 » 14 Απρ 2008 00:00

Antoni Καλησπέρα, Μόλις έχω γίνει μέλος στο Forum και βλέποντας το post σου είπα να απαντήσω. Δεν ξέρω από 26 Φεβ αν τελικά μέχρι τώρα βρήκες λύση στο πρόβλημα σου αλλά έχω να σου προτείνω το εξής.
Με κώδικα VBA μπορείς να κάνεις το εξής. Με το που ανοίγει η Βάση σου θα ενημερώνει έναν πίνακα της Access (Append Query) ή καλύτερα SQL Insert Into με το όνομα του Υπολογιστή όπως το βλέπει στο Δίκτυο. Δηλαδή αν ο Η/Υ που βλέπει δίκτυο είναι πχ. Antonis τότε αυτό το string θα ενημέρωνει το πίνακα.
Έτσι εσύ θα ξέρεις ανοίγοντας τον πίνακα ποιοι είναι στην βάση. Εννοείται ότι μόλις κλείσει ο χρήστης την βάση θα υπάρχει ένα DeleteQuery ή SQL string Delete όπου θα σβήνει τον χρήστη από τον πίνακα.
Όμως γιατί χρειάζεσαι να κλείνουν όλοι την Access για να δουλέψεις. Υπάρχει ένα mdb Access που είναι πχ στον Server και τον ανοίγουν όλοι ? Γιατί αν ναι τότε καλύτερα είναι να κάνεις έναν mdb στον Server και πολλά mdb τοπικά σε κάθε Η/Υ που θα έχουν Link πίνακες στον mdb του Server.
Σχετικά με τον κώδικα VBA ή όποια άλλη βοήθεια θέλεις στείλε μου ...

Εύχομαι να σε βοήθησα

Φιλικά
kon73

Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Multiple Instances of Access

Δημοσίευση από Antonis78 » 14 Απρ 2008 13:03

Kon73, ευχαριστώ για την απάντησή σου. Επειδή δεν είμαι έμπειρος στην Access μάλλον δεν το έχω υλοποιήσει σωστά. Πράγματι υπάρχει μόνο ένα αρχείο mdb στον server και αυτό χτυπάνε όλοι. Θα προσπαθήσω να τα χωρίσω όπως πρότεινες αλλά θα ήθελα να μου πεις αν ξέρεις τι θα γίνει όταν εγώ θα κάνω update τους πίνακες και κάποιοι χρήστες θα τους χρησιμοποιούν. Θα τους χτυπήσει κάποιο error; Εδώ πρέπει να σου πω ότι δεν κάνουν update,insert ή delete σε αυτόυς τους πίνακες, απλά τραβάνε κάποια δεδομένα και τα βλέπουν (οι πίνακες έχουν απλώς κάποια στοιχεία πελατών, τηλ, διεύθυνση κτλ). Επίσης κάπου είδα ότι η Access έχει μία επιλογή που δημιουργείς front-end (mde) και back-end (mdb). Μήπως ξέρεις περισσότερα και πως υλοποιείται κάτι τέτοιο; Και πάλι σε ευχαριστώ για την απάντησή σου και καλώς ήρθες στο forum!

Άβαταρ μέλους
kon73
Script Master
Δημοσιεύσεις: 224
Εγγραφή: 13 Απρ 2008 23:47
Επικοινωνία:

Multiple Instances of Access

Δημοσίευση από kon73 » 14 Απρ 2008 18:10

Φίλε Antonis78 καλησπέρα και πάλι.
Φόβο για να σου βγάλει μήνυμα ότι ο πίνακας είναι δεσμευμένος και τροποποιείται από άλλο χρήστη θα σου έβγαζε αν και οι δύο διαβάζατε το ίδιο mdb αρχείο και ένας από τους δύο έδινε είτε Update / Append Query (ή SQL string UPDATE, για να πω την αλήθεια προτιμώ SQL strings). Δεν σου βγάζει πρόβλημα αν κάνεις τα παρακάτω που σου αναφέρω γιατί το mdb δεν ανοίγει αποκλειστικά σε έναν και μόνο χρήστη. Έχεις ένα mdb που είναι η βάση Back End και πάνω σ'αυτήν ανοίγουν πολλά mdb.

Αν θέλεις και πάλι ένα ίδιο αρχείο να ανοίγει Αποκλειστικά η και όχι, Υπάρχουν [σου λέγω για Access 2000] στο Tools-Options-Advanced επιλογές για το τρόπο που θα ανοίγει αποκλειστικά και πως θα διαχειρίζεται τα records.)

Τώρα όσο αφορά αυτό που διάβασες στο Internet σχετικά με front-end (mdb) και back-end (mdb) είναι ουσιαστικά η ορολογία αυτού που σου πρότεινα ουσιαστικά να κάνεις.

Δηλαδή πιο απλά κάνεις ένα mdb όπου εκεί βάζεις μόνο τους πίνακες. το mdb αυτό το βάζεις στον Server ή τέλος πάντων σε ένα shared Folder. Έτσι έχεις κάνει το back-end. To Front End είναι ένα mdb αρχείο που θα το χειρίζονται οι τελικοί χρήστες όπου εκεί θα έχεις όλα τα υπόλοιπα, Forms, Queries, Reports, Macros και αν δουλεύεις VBA και τα modules. Πιθανολογώ ότι δεν πρόκειται να το βάλεις το mdb στο Internet επομένως δεν αναφέρω και τα pages. Λοιπόν στο Front End (Το mdb δηλαδή με όλα τα αντικείμενα εκτός από τα tables) θα πρέπει να συνδέσεις σε αυτό τους πίνακες που έχει το Back end. Έτσι τι κάνεις. Στο Front End Access αρχείο πας στο File - Get External Data - Link Tables. θα σου ανοίξει ένα παράθυρο που θα σου ζητά την τοποθεσία και το όνομα του αρχείου mdb (Back End). Το βρίσκεις και κάνεις click. Ανοίγει ένα παράθυρο που σου δείχνει τους πίνακες (Tables) του mdb (Back End). Επιλέγεις το Select all και το οκ. Και έχεις τους πίνακες με ένα βελάκι στο αρχείο mdb (Front End)[Το βελάκι σημαίνει ότι είναι Linked - συνδεδεμένοι πίνακες).

Τι γίνεται τώρα. Έχεις τα δεδομένα του back end στο Front End mdb (Μπορείς να αλλάξεις όμως ιδιότητες των πινάκων μόνο στο back end). Στο Front End καταχωρείς, τροποποιείς και διαγράφεις δεδομένα και άμεσα έχουν αλλαχτεί αυτά τα δεδομένα στο back end.
Έτσι κάνεις αντίγραφα του Front End για να το χειρίζονται παραπάνω από ένας χρήστης και δεν υπάρχει conflict στα δεδομένα. Απλά στις φόρμες θέλει το refresh στα ερωτήματα requery και στους πίνακες άνοιγμα και ξανά κλείσιμο για να ενημερωθούν οι υπόλοιποι χρήστες από τις μεταβολές που ενεργεί ένας χρήστης. Αν δεν θέλεις κάποιοι χρήστες να μεταβάλουν δεδομένα απενεργοποιείς τις ιδιότητες στις φόρμες Allow edits, additions, deletions στις φόρμες.
Το βασικό τώρα είναι να μην αλλάξει κάποια στιγμή, θέση το backend mdb . Αν αλλάξει υπάρχει η δυνατότητα με extra κώδικα VBA (Θέλει εξοικίωσει με VBA) να το αντιλαμβάνεται το FrontEnd αυτόματα και να σου ζητά νέα τοποθεσία backend. Αλλιώς χειροκίνητα ξαναδηλώνεις από το Tools - Database Utilities - Linked Table Manager - Select All κάνεις click Always prompt for new location και σου ζητά νέα τοποθεσία για τον πίνακα.

Περιμένω νέα σου το λοιπόν για την βάση σου και εύχομαι να σε βοήθησα κάπως.

Φιλικά

kon73

Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Multiple Instances of Access

Δημοσίευση από Antonis78 » 15 Απρ 2008 11:35

Φίλε μου, σε ευχαριστώ για την απάντησή σου. Θα το δοκιμάσω μόλις βρω χρόνο και θα σου πω πως πήγε. Μία άλλη ερώτηση τώρα αν γνωρίζεις:
Ορισμένοι από αυτούς που πρέπει να χρησιμοποιούν την βάση δεν έχουν Access. Διάβασα όμως ότι δεν χρειάζεται να έχεις Access για να τρέξεις κάποια application φτιαγμένα σε Access απλά κάνεις distribute το run-time. Χρειάζεσαι, απ' ότι κατάλαβα, το Visual Studio 2005 Tools For Office. Γνωρίζεις κάτι για αυτό το θέμα.

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

Άβαταρ μέλους
kon73
Script Master
Δημοσιεύσεις: 224
Εγγραφή: 13 Απρ 2008 23:47
Επικοινωνία:

Multiple Instances of Access

Δημοσίευση από kon73 » 15 Απρ 2008 19:36

Φίλε Antonis78

Ναι γνωρίζω αρκετά πράγματα από Runtime της Access. Πρώτα από όλα. Visual Studio 2005 ή καλύτερα Visual Studio 2008 σημαίνει Executable προγράμμα με διαχείριση απλά mdb πινάκων. δηλαδή κάτι εν τελώς από όσο ξέρω διαφορετικό από αυτό που θέλεις εσύ. Εσύ θέλεις το mdb σου αρχείο με τα objects του (Πίνακες, Ερωτήματα, Φόρμες κλπ) να τα βάλεις να τρέχουν χωρίς κάποιος να έχει Access στον Η/Υ. Επομένως θα χρειαστείς όχι Visual Studio 2005 ή 2008. Απλά ανάλογα πια έκδοση Αccess έχεις πχ. η Access 2000 και XP που περιέχει το Runtime θέλει την έκδοση Office Developer Edition , η Access 2003 και 2007 τα Developer extensions.
Το πρόβλημα είναι όμως άντε και έχεις βάλει την Access 2000 Developer Edition όμως σε ποιο λειτουργικο σύστημα θα εγκατασταθεί. πχ. η Access 2000 δεν βλέπει windows Vista (Εκτός και αν έβγαλε κάποιο service pack) η Access 2007 βλέπει μόνο τα windows XP SP2 και Vista.
Μπέρδευμα που λες.
Νομίζω ότι ναι το Visual Studio 2005 ή (2008 καλύτερα για να έχουμε κάτι αναβαθμισμένο) είναι μια πολύ καλή λύση και έχω και πολλά e-book για μετάβαση από Access VBA σε Visual Studio 2008.

Αλλιώς φίλε μου μια άλλη λύση εγκατάσταση της Access στους clients και να πω την αλήθεια αν έχεις κάνει κώδικα VBA (Σου συνιστώ εκ πείρας να κάνεις τον κώδικα VBA μόνο σε Access 2000). Οι άλλες εκδόσεις Access αν και διαφημίζουν ότι υπάρχει συμβατότητα με Access 2000 και ότι το format του αρχείου mdb που αποθηκεύουν είναι Access 2000 αυτό το καημένο αρχείο δεν δουλεύει πάντα όταν ανοικτεί από Access 2000. Αυτό συμβαίνει όταν ο κώδικας VBA δουλευτεί σε π.χ Access XP, 2003,2007 και δοκιμάσουν να ανοίξουμε Access 2000 και να βάλουμε τον κώδικα να δουλέψει. Πολλοί οι λόγοι που μπορώ να σου αναφέρω εκτός από αναβαθμίσεις της VBA που δεν δουλεύουν σε Access 2000 είναι πολλά άλλα.

Φιλικά

Kon 73

Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Multiple Instances of Access

Δημοσίευση από Antonis78 » 15 Απρ 2008 20:41

Φίλε Kon

Σκοπός μου είναι σε λίγο καιρό να μετατρέψω όλη την εφαρμογή σε .NET. To πρόβλημα είναι ότι τώρα δεν έχω χρόνο και πιέζομαι να δουλέψει, έστω και στην μορφή που είναι τώρα (Access). Μόλις ξεκινήσω την μετατροπή θα χρειαστώ σίγουρα την βοήθειά σου. Σου παραθέτω μερικά στοιχεία που μπορεί να βοηθήσουν

1) η εφαρμογή είναι σε Access 2003
2) Όλα τα συστήματα που θα τρέξει είναι Windows XP
3) To Visual Studio 2005 Tools For Office δεν είναι το ίδιο με το Visual Studio. Είναι ξεχωριστό πρόγραμμα (και εγώ την πάτησα και έψαχνα μάταια) και το κακό είναι ότι το Access Developer extensions περιέχονται μέσα στο Visual Studio 2005 Tools For Office

Σε ευχαριστώ για τις συμβουλές σου περί συμβατότητας, όπως σου είπα είμαι πολύ αρχάριος και σίγουρα θα τις χρειαστώ, όπως όμως σου γράφω παραπάνω έχω το θέμα της πίεσης. Η λύση του να αγοράσω την Access για όλους τους clients δεν μπορεί να εφαρμοστεί λόγω κόστους (δεν μου το εγκρίνουν) , οπότε πρέπει αναγκαστικά να πάω στην λύση του runtime μέχρι να την μετατρέψω σε .NET. Θα αποκτήσω σύντομα το Visual Studio Tools For Office οπότε θα το προσπαθήσω. Οτιδήποτε χρειαστώ ελπίζω να βοηθήσεις, γιατί δεν έχω καταλάβει καλά πως κάνεις distribute το runtime ( την όλη διαδικασία), για να είμαι ειλικρινής.

Σε ευχαριστώ πολύ για το χρόνο σου!

Αντώνης

Άβαταρ μέλους
kon73
Script Master
Δημοσιεύσεις: 224
Εγγραφή: 13 Απρ 2008 23:47
Επικοινωνία:

Multiple Instances of Access

Δημοσίευση από kon73 » 15 Απρ 2008 23:43

Φίλε Antonis78

Αν βέβαια μεταπηδήσεις σε Visual Studio τότε ναι καλός πράττεις και το Runtime αυτού (Tools for office που είδα και εγώ στο http://msdn2.microsoft.com/en-us/library/ms178739.aspx και ομολογούμενος δεν το είχα προσέξει παλιότερα) σου δίνει σαφώς περισσότερες επιλογές από ότι τα απλά wizards του Office Developer edition.

Καλή σου επιτυχία

Φιλικά
kon73

Απάντηση

Επιστροφή στο “MS Access”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες