Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#11
| |||
| |||
Το module δουλευει ως εξης. Δημιουργείς ένα πίνακα όπως αναφέρω ποιο πάνω και το καλείς απο μια μακροεντολή που ονομάζεται Autoexec --->Εκτελεση Κώδικα--->ODBCShared. Σου δημιουργεί μονο του τα DSN δεν χρειάζεται να κανεις τπτ αλλο. Αν δεν βγάλεις ακρη μετα απο αυτό τοτε θα σου γραψω αναλυτικα την διαδικασια. |
#12
| |||
| |||
Παράθεση:
μηπως δεν έχω κατεβσει τα καταλληλα εργαλεια? (odbc driver for sql server 17 kai sql exxpress 14) οπως και να χει σευχαριστω πολυ για το χρόνο σου και τη διαθεση σου να με βοηθήσεις. Τελευταία επεξεργασία από το χρήστη exarhos : 31-07-20 στις 10:06. |
#13
| |||
| |||
Λοιπόν αναλυτικά η διαδικασία. Πρωτο βήμα: είναι να δημιουργήσεις έναν πίνακα με τα εξής πεδία. Ονομα Πεδίου: DataBase Τύπος Πεδίου: Συντομο Κείμενο (Short Text) Μέγεθος Πεδίου: 50 πχ Ονομα Πεδίου: Server Τύπος Πεδίου: Συντομο Κείμενο (Short Text) Μέγεθος Πεδίου: 50 πχ Ονομα Πεδίου: ODBCTableName Τύπος Πεδίου: Συντομο Κείμενο (Short Text) Μέγεθος Πεδίου: 50 πχ Ονομα Πεδίου: LocalTableName (Πρωτεύον Κλείδί) Τύπος Πεδίου: Συντομο Κείμενο (Short Text) Μέγεθος Πεδίου: 50 πχ Ονομα Πεδίου: DSN Τύπος Πεδίου: Συντομο Κείμενο (Short Text) Μέγεθος Πεδίου: 50 πχ Αφού Δημιουργήσεις τον πίνακα τον αποθηκεύεις και του δίνεις ένα όνομα πχ UsysShared. Δεύτερο βήμα: Δημιουργείς ένα module με όνομα πχ RelinkSQL και κάνεις επικόλληση τον εξής κώδικα. Public Function DoesTableExist(strTableName As String) As Boolean '(Author:Microsoft) On Error Resume Next Dim db As DAO.Database: Set db = CurrentDb() Dim Tbl As DAO.TableDef: Set Tbl = db.TableDefs(strTableName) If Err.Number = 3265 Then ' Item not found. DoesTableExist = False Exit Function End If DoesTableExist = True End Function Public Function RelinkShared() As Boolean '(Author:Microsoft/Changes:Christos Karakizos) Dim strTableName As String Dim strConn As String Dim db As DAO.Database: Set db = CurrentDb() Dim rs As DAO.Recordset Dim Tbl As DAO.TableDef ' --------------------------------------------- ' Register ODBC database(s) ' --------------------------------------------- If DoesTableExist("UsysShared") = True Then Set rs = db.OpenRecordset("UsysShared", dbOpenSnapshot) With rs While Not .EOF If ReadODBCDriver() = True Then 'ODBC Driver 17 for SQL Server DBEngine.RegisterDatabase rs("DSN"), "ODBC Driver 17 for SQL Server", True, "Description=" & rs("DataBase") & Chr(13) & "Server=" & rs("Server") & Chr(13) & "Database=" & rs("DataBase") Else 'SQL Server Driver DBEngine.RegisterDatabase rs("DSN"), "SQL Server", True, "Description=" & rs("DataBase") & Chr(13) & "Server=" & rs("Server") & Chr(13) & "Database=" & rs("DataBase") End If ' --------------------------------------------- ' Link table ' --------------------------------------------- strTableName = rs("LocalTableName") strConn = "ODBC;" strConn = strConn & "DSN=" & rs("DSN") & ";" strConn = strConn & "APP=Microsoft Access;" strConn = strConn & "DATABASE=" & rs("DataBase") & ";" strConn = strConn & "Trusted_Connection=Yes" & ";" strConn = strConn & "TABLE=" & rs("ODBCTableName") If (DoesTableExist(strTableName) = False) Then Set Tbl = db.CreateTableDef(strTableName, dbAttachSavePWD, rs("ODBCTableName"), strConn) db.TableDefs.Append Tbl Else Set Tbl = db.TableDefs(strTableName) Tbl.Connect = strConn Tbl.RefreshLink End If rs.MoveNext Wend End With End If rs.Close Set rs = Nothing RelinkShared = True End Function Public Function ReadODBCDriver() As Boolean On Error GoTo Err: If CreateObject("WScript.Shell").RegRead("HKEY_LOCAL_ MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers\ODBC Driver 17 for SQL Server") = "Installed" Then ReadODBCDriver = True Else ReadODBCDriver = False End If Err: End Function Σου έχω βάλει μέσα στον κώδικα να ελέγχει αν υπάρχει εγκατεστημενος ο ODBC 17 Driver και αν ναι να δημιουργεί τα DSN με αυτόν τον Driver αλλιώς δημιουργεί τα DSN με τον SQL Driver. Τρίτο Βήμα : Στον Πίνακα που δημιούργησες καταχωρείς τα στοιχεία απο τους πίνακες που θες να συνδέσεις απο τον SQL Server. Πχ: Πεδιο Database --->Ονομα DSN (Shared) Πεδίο Server ---> Εδω καλύτερα να δώσεις την IP Address του SQL Server και όχι το όνομα. Πεδίο ODBCTableName --->Εδώ δίνεις το όνομα του πίνακα που θες να συνδέσεις απο τον SQL Server Πεδίο LocalTableName --->Εδώ δίνεις το όνομα του συνδεμένου πίνακα πώς θες να ονομάζεται μέσα στην Access Πεδιο DSN--->Εδώ δώσε το όνομα που θες στο DSN. Εγώ βάζω το ίδιο με το πεδίο Database Τέταρτο βήμα: Δημιουργείς μια μακροεντολή που την ονομαζεις Autoexec--->Εκτελεση κώδικα--->RelinkShared() και είσαι έτοιμος. Ελπίζω αυτο να σε βοηθήσει καλύτερα. Αν όχι πάλι εδώ είμαστε. Τελευταία επεξεργασία από το χρήστη pctechdr : 31-07-20 στις 10:47. |
#14
| |||
| |||
Καλημερα .Ειχα κανει και εγω την διαδικασια που προτεινει ο Χρηστος. Θα στα πω οπως θυμαμαι τα βηματα 1)Ανοιγεις την εκτελεση των windows με τα πληκτρα windows key + r .Εκει μεσα γραφεις odbcad32 και πατας οκ.Λογικα θα σου ανοξει ενα παραθυρο οπου δεξια εχει το πληκτρο "add".Εκει διαλεγεις ποιον driver θα βαλεις.Εγω εχω βαλει τον "sql Server".Πατας "οκ".Μετα βαζεις ενα ονομα οποιο θες και μια περιγραφη οποια θες.Μετα ποιο κατω στο ονομα του σερβερ βαζεις ακριβως την ονομασια θα την βρεις αν πας στο sql management studio και αφου κανεις connect στην βαση πανω πανω λεει πχ server/SQLEXPRESS.Αν ειναι σωστο το ονομα που θα βαλεις θα σε παει στο επομενο βημα.Μετα πατας ξανα επομενο οπου εκει πανω πανω λεει να επιλεξεις "change the default database to"και διαλεγεις την δικια σου βαση.Μετα επομενο και τελος.Το παραθυρο που θα σου ανοιξει πατας και "TEST DATA SOURCE".Αν εχει γινει σωστη συνδεση θα σου βγαλει "TEST COMPLETED SUCCESSFULLY 2)Μετα πας στην access και φτιαχεις εναν πινακα με ονομα "UsysShared" με τα πεδια Database - Short text Server - Short Text ODBCTableName - Short Text LocalTableName - Short Text DSN - Short Text 3)Μετα θα εισαγεις το module που σου εδωσε ο χρηστος . 4)Μετα εναν εναν τους πινακες δεξι κλικ σε καθε πινακα-->εξαγωγη-->βαση δεδομενων odbc.Δινεις το ονομα του πινακα ξανα η το αφηνεις ως εχει.Στο παραθυρο που θα σου ανοιξει θα διαλεξεις τωρα το DSN που εφτιαξες πριν (1).Πατας οκ και μετα κλεισιμο.Αυτο το κανεις για ολους τους πινακες. 5)Τωρα παιρνεις copy-paste το ονομα καθε πινακα εναν εναν παλι και το κανεις επικολληση μεσα στον πινακα στα πεδια "ODBCTableName" και LocalTableName".Στο πεδιο "server"βαζεις το ονομα του server sql και στο DSN το ονομα που εχεις βαλεις στην αρχη (1).Μπορεις επισης για να μην γραφεις συνεχεια το ονομα του server ,το ονομα του dsn και το ονομα της database ,να βαλεις προεπιλεγμενη τιμη γιαυτα.Αυτο γινεται αν πας στο πεδιο πχ"server" και μετα κατω εκει που λεει "Γενικες"-->Προεπιλεγμενη τιμη βαζει το ονομα του server πχ "sqlserver" 6)Αφου κανεις αυτα μετα θα κανεις παλι εναν εναν τους πινακες μετανομασια πχ εχεις εναν πινακα "table"κανε το μετανομασια σε "tablebak". 7)Αφου κανεις και αυτα ,φτιαξε μια μακροεντολη "Autoexec" και .Επιλγεις -->εκτελεση κωδικα-->και στο ονομα συναρτησης βαζεις την εντολη ODBCShared().Αποθηκευεις και μετα τρεχεις την μακροεντολη.Αν ειναι ολα οκ οι πινακες σου θα φαινονται ετσι. |
#15
| |||
| |||
Φίλοι μου σας ευχαριστώ πάρα πολύ. (το μονο που δεν κάνατε είναι να ρθείτε το φτιάξετε μόνοι σας) για μένα αυτό ήταν βουνό. δεν θα το έκανα ποτέ χωρίς την βοήθεια σας όπως και πολλά αλλα. το προβλημα ειναι βεβαια οτι αργεί παααααααααααρα πολυ. δλδ κανει περιπου ενα λεπτο μεχρι να ανοιξει την κάθε φόρμα. Επίσης με την είσοδο μου βγάζει τα εξης μηνύματα "operation must use an updateable query" και "the recordset is not updateable" και αναφέρεται σε ερωτήματα ενημέρωσης που ειχω με τη φόρτωση και πάλι σας Ευχαριστώ πάρα πολυ. Με εκτίμηση Τελευταία επεξεργασία από το χρήστη exarhos : 31-07-20 στις 21:25. |
#16
| ||||
| ||||
Καλησπέρα σε όλους! Για σύνδεση πινάκων από βάση MSSQL μπορείτε να ρίξετε μια ματιά εδώ: https://www.ms-office.gr/forum/acces...html#post31345 Καλή συνέχεια! Με εκτίμηση Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
#17
| |||
| |||
φίλε Τάσο καλησπέρα και σ ευχαριστώ παρά\α πολύ για τη βοήθεια σου. Όπως ίσως θα κατάλαβες, εγώ εκτός απο αρχάριος ει μαι και περιορισμένης αντίληψης, Οπότε αν θες σε παρακαλώ γινε λιγο πιο συγκεκριμενος, δλδ εξήγησε μου τι ακριβώς πρέπει να κάνω. Να διευκρινίσω εδω οτι με τον τρόπο που πρότεινε ο Χρήστος και Γίαννης σύνδεσα επιτυχώς τους πινακες μου σε SQL SERVER και μετά τους εκανα λικ στις φόρμες αλλα η εφαρμογη κολάει δεν γίνεται να δουλεψω ετσι συν το οτι δεν λειτουργούν τα ερωτηματα ενημερωσης. Ισως όμως με το δικο σου τροποι η σύνδεση να γίνει πιο αποτελεσματικα, γι αυτο σε παρακαλώ βοηιθησε με να το δοκιμασω. πες ακτιβως τι πρεπει να κανω και πως να το κανω. σ ευχαριστώ πολυ εκτων πρωτερων. |
#18
| |||
| |||
Γεια σου Έξαρχε, Στο παράδειγμα του Τάσου αυτό που πρέπει να κάνεις είναι να συμπληρώσεις σωστά τα πεδία με τα κατάλληλα στοιχεία. Δηλαδή: Στο πεδίο «Διεύθυνση && Θύρα επικ. Server» να βάλεις την Διεύθυνση και Θύρα επικοινωνίας του SQL Server σου (πχ: mssql.name.gr,1555). Στο πεδίο «Όνομα χρήστη» το username που έχεις για να συνδεθείς στον SQL Server σου (πχ: sa). Στο πεδίο «Κωδικός» το password που έχεις για να συνδεθείς στον SQL Server σου (πχ: 12345). Και στο πεδίο «Όνομα βάσης στον Server» το όνομα της βάσης σου από τον SQL Server σου και πατάς το κουμπί αποθήκευση για να αποθηκεύσεις τα παραπάνω στοιχεία. Τώρα στο «Απομακρ. Πίνακας» θα πρέπει να γράψεις τα ονόματα των πινάκων της βάσης του SQL Server σου που θέλεις να κάνεις link στο αρχείο της access και στο «Τοπικός πίνακας» θα πρέπει να γράψεις τα ονόματα των πινάκων που θα γίνουν link στην Access και θα πατήσεις το κουμπί «Σύνδεση πινάκων». Το βασικό είναι τα ονόματα των πινάκων να είναι ίδια γιατί μετά θα έχεις πρόβλημα στις φόρμες, ερωτήματα στην access (FrontEnd). Την παραπάνω διαδικασία θα την κάνεις στο αρχείο της access που έχεις μόνο φόρμες ερωτήματα κτλ (FrontEnd) Ότι άλλο θέλεις εδώ είμαστε…. Ευχαριστώ. |
#19
| |||
| |||
Φίλε μου σ'ευχαριστ'ω πολύ.το εκανα. οι φορμες ανοιγουν κανονικα. αλλα το προβλημα μου ειναιοτι δεν λειτουργουν τα ερβτηματα ενημερωσης που εχω (true-false). πηγα στο design του πινακα με το SSMS και ειδα οτι data type των παιδιων που ενημερωνω ειναι "bit" στην access ηταν true - false. προσπαθησα να το αλλαξω σε char αλλα μου βγαζει το μυνημα της φωτο που επισυνάττω. και πάλι ευχαριστω πολύ όλους σας |
#20
| |||
| |||
Καλησπέρα Έξαρχε, Άνοιξε το SSMS και πήγαινε από το μενού ToolsOptionsDesigners και ξετςέκαρε την επιλογή «Prevent saving changes that require table re-creation» όπως φαίνεται και στην επισυναπτόμενη εικόνα. Έτσι θα μπορέσεις να ανοίξεις τους πίνακες της βάσης sql σε προβολή σχεδίασης και να κάνεις αλλαγές. Ευχαριστώ. |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Παρόμοια Θέματα | ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
[ Ερωτήματα ] Σύνδεση πεδίων φόρμας με ερώτημα διασταύρωσης | mdragon | Access - Ερωτήσεις / Απαντήσεις | 7 | 15-12-18 11:05 |
[ Πίνακες ] Σύνδεση με odbc σε βάση oracle | Dafnh0106 | Access - Ερωτήσεις / Απαντήσεις | 1 | 22-02-15 13:42 |
Αυτόματη τηλεφωνική κλήση, μεσω φόρμας, με συνδεση modem PC | dimitrisp | Access - Ερωτήσεις / Απαντήσεις | 7 | 18-12-14 22:58 |
[ Πίνακες ] Σύνδεση Πινάκων σε FrontEnd BackEnd βάση | Δημήτρης | Access - Ερωτήσεις / Απαντήσεις | 2 | 26-11-11 14:47 |
[ Υποφόρμες ] Σύνδεση κυρίως Φόρμας με Υπόφορμα | Free_Ghost | Access - Ερωτήσεις / Απαντήσεις | 3 | 29-11-10 15:39 |
Η ώρα είναι 08:26.