Πώς να κατασκευάσετε δυναμικά το string σύνδεσης βάσης δεδομένων

Μόλις τελειώσετε Λύση βάσης δεδομένων Delphi, το τελευταίο βήμα είναι να το αναπτύξετε με επιτυχία τον υπολογιστή του χρήστη.

ConnectionString On-the-Fly

Εάν χρησιμοποιείτε εξαρτήματα dbGo (ADO), τοConnectionString ιδιοκτησία του TADOCσύνδεση καθορίζει τις πληροφορίες σύνδεσης για το χώρο αποθήκευσης δεδομένων.

Προφανώς, κατά τη δημιουργία εφαρμογών βάσεων δεδομένων που πρόκειται να εκτελεστούν σε διάφορα μηχανήματα, η σύνδεση με την πηγή δεδομένων δεν θα πρέπει να είναι σκληρή κωδικοποιημένη στο εκτελέσιμο αρχείο. Με άλλα λόγια, η βάση δεδομένων μπορεί να βρίσκεται οπουδήποτε στον υπολογιστή του χρήστη (ή σε κάποια άλλη υπολογιστής σε δίκτυο) - η συμβολοσειρά σύνδεσης που χρησιμοποιείται στο αντικείμενο TADOConnection πρέπει να δημιουργηθεί στο χρόνο εκτέλεσης. Ένα από τα προτεινόμενα σημεία αποθήκευσης των παραμέτρων της συμβολοσειράς σύνδεσης είναι το Μητρώο των Windows (ή, μπορεί να αποφασίσετε να χρησιμοποιήσετε το "απλό" Αρχεία INI).

Γενικά, για να δημιουργήσετε τη συμβολοσειρά σύνδεσης κατά το χρόνο εκτέλεσης πρέπει να

instagram viewer

α) Τοποθετήστε το πλήρες μονοπάτι στη βάση δεδομένων στο μητρώο. και
β) κάθε φορά που ξεκινάτε την εφαρμογή σας, διαβάστε τις πληροφορίες από το μητρώο, "δημιουργήστε" το ConnectionString και "ανοίξτε" τη σύνδεση ADOC.

Βάση δεδομένων... Συνδέω-συωδεομαι!

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

ο OnCreate περίπτωση της ενότητας δεδομένων είναι όπου τοποθετείτε τον κώδικα για να κατασκευάσετε δυναμικά το ConnectionString και να συνδεθείτε στη βάση δεδομένων.

διαδικασία TDM.DataModuleCreate (αποστολέας: TObject); ξεκινήσειαν DBConnect έπειτα
ShowMessage ('Συνδεδεμένο με βάση δεδομένων!')
αλλού
ShowMessage ('ΔΕΝ έχει συνδεθεί με βάση δεδομένων!'); τέλος;

Σημείωση: Το όνομα της ενότητας δεδομένων είναι "DM". Το όνομα του στοιχείου TADOConnection είναι "AdoConn".

ο DBConnect λειτουργία κάνει την πραγματική εργασία της σύνδεσης με τη βάση δεδομένων, εδώ είναι ο κώδικας:

funcTDM.DBConnect: boolean; var
conStr: string; Όνομα διακομιστή, DBName: συμβολοσειρά. ξεκινήσειΌνομα_υπολογιστή: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Παροχέας = sqloledb;' + 'Πηγή δεδομένων =' + Όνομα διακομιστή + ';' + 'Αρχικός κατάλογος =' + DBName + ';' + 'Αναγνωριστικό χρήστη = myUser; Κωδικός πρόσβασης = myPasword '; Αποτέλεσμα: = ψευδής. AdoConn. Κλείσε; AdoConn. ConnectionString: = conStr; AdoConn. LoginPrompt: = Λάθος;αν (ΔΕΝ AdoConn. Συνδεδεμένος) έπειταδοκιμάστε
AdoConn. Ανοιξε; Αποτέλεσμα: = Αληθινό. εκτόςεπί E: Εξαίρεση κάνωξεκινήσειMessageDlg ('Υπήρξε σφάλμα σύνδεσης με το. τη βάση δεδομένων. Σφάλμα: '+ # 13 # 10 + μι. Μήνυμα, mtError, [mbOk], 0);ανΔΕΝ TDatabasePromptForm. Εκτέλεση (ServerName, DBName)
έπειτα
Αποτέλεσμα: = ψευδής. αλλούξεκινήσει
WriteRegistry ('DataSource', ServerName); WriteRegistry ('DataCatalog', DBName). // να ανακαλέσει αυτή τη λειτουργία
Αποτέλεσμα: = DBConnect; τέλος; τέλος; τέλος; τέλος; //DBConnect

Η συνάρτηση DBConnect συνδέεται με τη βάση δεδομένων MS SQL Server - το ConnectionString κατασκευάζεται χρησιμοποιώντας το τοπικό connStr μεταβλητός.

Το όνομα του διακομιστή βάσης δεδομένων αποθηκεύεται στο Ονομα διακομιστή μεταβλητή, το όνομα της βάσης δεδομένων διατηρείται στο DBName μεταβλητός. Η λειτουργία ξεκινά με την ανάγνωση αυτών των δύο τιμών από το μητρώο (χρησιμοποιώντας το προσαρμοσμένο ReadRegistry () διαδικασία). Μόλις συναρμολογηθεί το ConnectionString, απλά τηλεφωνούμε στη συνέχεια AdoConn. Ανοιξε μέθοδος. Αν αυτή η κλήση επιστρέψει "true", έχουμε συνδεθεί με επιτυχία στη βάση δεδομένων.

Σημείωση: Δεδομένου ότι μεταφέρουμε ρητά τα στοιχεία σύνδεσης μέσω του ConnectionString, το Δεδομένο Δεδομένου ότι είναι η ενότητα δεδομένων που δημιουργήθηκε πριν από την κύρια φόρμα, μπορείτε να καλέσετε με ασφάλεια τις μεθόδους από τη μονάδα δεδομένων στο OnCreate του MainForm Εκδήλωση.LoginPrompt η ιδιότητα έχει οριστεί ως μη έγκυρη για να αποτρέψει ένα άχρηστο παράθυρο διαλόγου σύνδεσης.

Η "διασκέδαση" ξεκινά αν προκύψει εξαίρεση. Ενώ μπορεί να υπάρχουν πολλοί λόγοι για να αποτύχει η μέθοδος Open, ας υποθέσουμε ότι το όνομα του διακομιστή ή το όνομα της βάσης δεδομένων είναι κακό.
Εάν συμβαίνει αυτό, θα δώσουμε στον χρήστη τη δυνατότητα να καθορίσει τις σωστές παραμέτρους, εμφανίζοντας μια προσαρμοσμένη φόρμα διαλόγου.
Η εφαρμογή δείγματος περιέχει επίσης μια πρόσθετη φόρμα (DatabasePromptForm) που επιτρέπει στο χρήστη να καθορίσει τον διακομιστή και το όνομα της βάσης δεδομένων για το στοιχείο σύνδεσης. Αυτή η απλή φόρμα παρέχει μόνο δύο πλαίσια επεξεργασίας, αν θέλετε να παρέχετε ένα πιο φιλικό προς το χρήστη περιβάλλον, θα μπορούσατε προσθέστε δύο ComboBoxes και συμπληρώστε αυτά με απαρίθμηση διαθέσιμων Servers SQL και ανάκτηση βάσεων δεδομένων σε έναν SQL Server.

Η φόρμα DatabasePrompt παρέχει ένα έθιμο class μέθοδο (Execute) που δέχεται δύο μεταβλητές (var) παραμέτρους: ServerName και DBName.

Με τα "νέα" δεδομένα που παρέχει ένας χρήστης (όνομα διακομιστή και βάσης δεδομένων), απλά καλούμε τη λειτουργία DBConnect () ξανά (αναδρομικά). Φυσικά, οι πληροφορίες αποθηκεύονται πρώτα στο μητρώο (χρησιμοποιώντας μια άλλη προσαρμοσμένη μέθοδο: WriteRegistry).

Βεβαιωθείτε ότι το DataModule είναι το πρώτο "έντυπο" που δημιουργήθηκε!

Εάν προσπαθήσετε να δημιουργήσετε μόνοι σας αυτό το απλό έργο, ενδέχεται να αντιμετωπίζετε εξαιρέσεις κατά της παραβίασης της πρόσβασης κατά την εκτέλεση της εφαρμογής.
Από προεπιλογή, η πρώτη φόρμα που προστέθηκε στην εφαρμογή είναι το MainForm (το πρώτο δημιουργήθηκε). Όταν προσθέτετε μια ενότητα δεδομένων στην εφαρμογή, η ενότητα δεδομένων προστίθεται στη λίστα "αυτόματης δημιουργίας εντύπων" ως τη φόρμα που δημιουργείται μετά την κύρια φόρμα.
Τώρα, αν προσπαθήσετε να καλέσετε κάποια από τις ιδιότητες ή τις μεθόδους της Μονάδας Δεδομένων στο συμβάν OnCreate του MainForm, θα έχετε μια εξαίρεση Παραβίασης Πρόσβασης - καθώς η ενότητα δεδομένων δεν έχει δημιουργηθεί ακόμα.
Για να επιλύσετε αυτό το πρόβλημα, πρέπει να αλλάξετε με μη αυτόματο τρόπο τη δημιουργούμενη σειρά της ενότητας δεδομένων - και να την ορίσετε η πρώτη μορφή που δημιουργείται από την εφαρμογή (είτε χρησιμοποιώντας το παράθυρο διαλόγου "Ιδιότητες-έργα" είτε με επεξεργασία ο Αρχείο προέλευσης έργων).

Δεδομένου ότι η ενότητα δεδομένων δημιουργείται πριν από την κύρια φόρμα, μπορείτε να καλέσετε με ασφάλεια τις μεθόδους από την ενότητα δεδομένων στο γεγονός OnCreate του MainForm.

instagram story viewer