Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Σύνδεση φόρμας με SQL βάση (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/5319-sindesi-formas-me-sql-basi.html)

pctechdr 31-07-20 00:05

Το module δουλευει ως εξης. Δημιουργείς ένα πίνακα όπως αναφέρω ποιο πάνω και το καλείς απο μια μακροεντολή που ονομάζεται Autoexec --->Εκτελεση Κώδικα--->ODBCShared.
Σου δημιουργεί μονο του τα DSN δεν χρειάζεται να κανεις τπτ αλλο.

Αν δεν βγάλεις ακρη μετα απο αυτό τοτε θα σου γραψω αναλυτικα την διαδικασια.

exarhos 31-07-20 08:35

Παράθεση:

Αρχική Δημοσίευση από pctechdr (Μήνυμα 31337)
Το module δουλευει ως εξης. Δημιουργείς ένα πίνακα όπως αναφέρω ποιο πάνω και το καλείς απο μια μακροεντολή που ονομάζεται Autoexec --->Εκτελεση Κώδικα--->ODBCShared.
Σου δημιουργεί μονο του τα DSN δεν χρειάζεται να κανεις τπτ αλλο.

Αν δεν βγάλεις άκρη μετα απο αυτό τοτε θα σου γραψω αναλυτικα την διαδικασια.

φίλε μου καλήμερα. προσπάθησα με όλους τους πιθανούς τρόπους και συνδυασμούς άλλα δεν κατάφερα. όταν ανοίγει η εφαρμογή μου βγάζει συνημμένα οτι δε μπορεί να εκτελεστεί η μακροεντολή και πατάω stopmacro
μηπως δεν έχω κατεβσει τα καταλληλα εργαλεια? (odbc driver for sql server 17 kai sql exxpress 14) οπως και να χει σευχαριστω πολυ για το χρόνο σου και τη διαθεση σου να με βοηθήσεις.

pctechdr 31-07-20 09:36

Λοιπόν αναλυτικά η διαδικασία.

Πρωτο βήμα: είναι να δημιουργήσεις έναν πίνακα με τα εξής πεδία.

Ονομα Πεδίου: 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() και είσαι έτοιμος.

Ελπίζω αυτο να σε βοηθήσει καλύτερα. Αν όχι πάλι εδώ είμαστε. :byebye:

gianniskar 31-07-20 10:02

1 Συνημμένο(α)
Καλημερα .Ειχα κανει και εγω την διαδικασια που προτεινει ο Χρηστος.

Θα στα πω οπως θυμαμαι τα βηματα

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().Αποθηκευεις και μετα τρεχεις την μακροεντολη.Αν ειναι ολα οκ οι πινακες σου θα φαινονται ετσι.

exarhos 31-07-20 19:24

Φίλοι μου σας ευχαριστώ πάρα πολύ. (το μονο που δεν κάνατε είναι να ρθείτε το φτιάξετε μόνοι σας)
για μένα αυτό ήταν βουνό. δεν θα το έκανα ποτέ χωρίς την βοήθεια σας όπως και πολλά αλλα.
το προβλημα ειναι βεβαια οτι αργεί παααααααααααρα πολυ. δλδ κανει περιπου ενα λεπτο μεχρι να ανοιξει την κάθε φόρμα. Επίσης με την είσοδο μου βγάζει τα εξης μηνύματα "operation must use an updateable query" και "the recordset is not updateable" και αναφέρεται σε ερωτήματα ενημέρωσης που ειχω με τη φόρτωση
και πάλι σας Ευχαριστώ πάρα πολυ.
Με εκτίμηση

Tasos 01-08-20 16:43

Καλησπέρα σε όλους!
Για σύνδεση πινάκων από βάση MSSQL μπορείτε να ρίξετε μια ματιά εδώ:
https://www.ms-office.gr/forum/acces...html#post31345

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

Με εκτίμηση

Τάσος

exarhos 01-08-20 17:21

φίλε Τάσο καλησπέρα και σ ευχαριστώ παρά\α πολύ για τη βοήθεια σου. Όπως ίσως θα κατάλαβες, εγώ εκτός απο αρχάριος ει μαι και περιορισμένης αντίληψης, Οπότε αν θες σε παρακαλώ γινε λιγο πιο συγκεκριμενος, δλδ εξήγησε μου τι ακριβώς πρέπει να κάνω. Να διευκρινίσω εδω οτι με τον τρόπο που πρότεινε ο Χρήστος και Γίαννης σύνδεσα επιτυχώς τους πινακες μου σε SQL SERVER και μετά τους εκανα λικ στις φόρμες αλλα η εφαρμογη κολάει δεν γίνεται να δουλεψω ετσι συν το οτι δεν λειτουργούν τα ερωτηματα ενημερωσης.
Ισως όμως με το δικο σου τροποι η σύνδεση να γίνει πιο αποτελεσματικα, γι αυτο σε παρακαλώ βοηιθησε με να το δοκιμασω. πες ακτιβως τι πρεπει να κανω και πως να το κανω. σ ευχαριστώ πολυ εκτων πρωτερων.

vraxnakisg 01-08-20 22:24

Γεια σου Έξαρχε,

Στο παράδειγμα του Τάσου αυτό που πρέπει να κάνεις είναι να συμπληρώσεις σωστά τα πεδία με τα κατάλληλα στοιχεία. Δηλαδή:

Στο πεδίο «Διεύθυνση && Θύρα επικ. 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)

Ότι άλλο θέλεις εδώ είμαστε….

Ευχαριστώ.

exarhos 02-08-20 12:20

1 Συνημμένο(α)
Φίλε μου σ'ευχαριστ'ω πολύ.το εκανα. οι φορμες ανοιγουν κανονικα. αλλα το προβλημα μου ειναιοτι δεν λειτουργουν τα ερβτηματα ενημερωσης που εχω (true-false). πηγα στο design του πινακα με το SSMS και ειδα οτι data type των παιδιων που ενημερωνω ειναι "bit" στην access ηταν true - false. προσπαθησα να το αλλαξω σε char αλλα μου βγαζει το μυνημα της φωτο που επισυνάττω.
και πάλι ευχαριστω πολύ όλους σας

vraxnakisg 02-08-20 13:07

1 Συνημμένο(α)
Καλησπέρα Έξαρχε,

Άνοιξε το SSMS και πήγαινε από το μενού ToolsOptionsDesigners και ξετςέκαρε την επιλογή «Prevent saving changes that require table re-creation» όπως φαίνεται και στην επισυναπτόμενη εικόνα.

Έτσι θα μπορέσεις να ανοίξεις τους πίνακες της βάσης sql σε προβολή σχεδίασης και να κάνεις αλλαγές.

Ευχαριστώ.


Η ώρα είναι 00:52.

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


Search Engine Optimization by vBSEO 3.3.2