Une fois que vous avez terminé votre Solution de base de données Delphi, la dernière étape consiste à le déployer avec succès sur l'ordinateur de l'utilisateur.
ConnectionString à la volée
Si vous utilisiez des composants dbGo (ADO), leChaîne de connexion propriété du TADOConnection spécifie les informations de connexion pour le magasin de données.
De toute évidence, lors de la création d'applications de base de données qui doivent être exécutées sur différentes machines, la connexion à la source de données ne doit pas être codée en dur dans l'exécutable. En d'autres termes, la base de données peut être située n'importe où sur l'ordinateur de l'utilisateur (ou sur un autre ordinateur dans un réseau) - la chaîne de connexion utilisée dans l'objet TADOConnection doit être créée à Durée. L'un des emplacements suggérés pour stocker les paramètres de chaîne de connexion est le Registre Windows (ou, vous pourriez décider d'utiliser la "plaine" Fichiers INI).
En général, pour créer la chaîne de connexion au moment de l'exécution, vous devez
a) placer le chemin d'accès complet à la base de données dans le registre; et
b) chaque fois que vous démarrez votre application, lisez les informations du Registre, "créez" la ConnectionString et "ouvrez" l'ADOConnection.
Base de données... Relier!
Pour vous aider à comprendre le processus, nous avons créé un exemple d'application "squelette" composé d'un formulaire (formulaire principal de l'application) et d'un module de données. Les modules de données de Delphi fournissent un outil d'organisation pratique qui est utilisé pour isoler les parties de votre application qui gèrent la connectivité à la base de données et les règles métier.
le OnCreate L'événement du module de données est l'endroit où vous placez le code pour construire dynamiquement le ConnectionString et vous connecter à la base de données.
procédure TDM.DataModuleCreate (expéditeur: TObject); commencersi DBConnect ensuite ShowMessage ('Connecté à la base de données!') autre ShowMessage ('NON connecté à la base de données!'); fin;
Remarque: Le nom du module de données est "DM". Le nom du composant TADOConnection est "AdoConn".
le DBConnect fait le travail réel de connexion à la base de données, voici le code:
function TDM.DBConnect: booléen; var conStr: chaîne; ServerName, DBName: chaîne; commencerServerName: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Provider = sqloledb;' + 'Source de données =' + ServerName + ';' + 'Catalogue initial =' + DBName + ';' + 'ID utilisateur = myUser; Mot de passe = myPasword '; Résultat: = faux; AdoConn. Fermer; AdoConn. ConnectionString: = conStr; AdoConn. LoginPrompt: = False;si (NE PAS AdoConn. Connecté) ensuiteessayer AdoConn. Ouvert; Résultat: = True; saufsur E: exception fairecommencerMessageDlg ('Une erreur s'est produite lors de la connexion à. la base de données. Erreur: '+ # 13 # 10 + e. Message, mtError, [mbOk], 0);siNE PAS TDatabasePromptForm. Exécuter (ServerName, DBName) ensuite Résultat: = faux. autrecommencer WriteRegistry ('DataSource', ServerName); WriteRegistry («DataCatalog», DBName); // rappelle cette fonction Résultat: = DBConnect; fin; fin; fin; fin; //DBConnect
La fonction DBConnect se connecte à la base de données MS SQL Server - le ConnectionString est construit en utilisant le local connStr variable.
Le nom du serveur de base de données est stocké dans le Nom du serveur variable, le nom de la base de données est conservé dans la DBName variable. La fonction commence par lire ces deux valeurs dans le registre (à l'aide de la ReadRegistry () procédure). Une fois le ConnectionString assemblé, nous appelons simplement AdoConn. Ouvert méthode. Si cet appel renvoie "vrai", nous avons réussi à nous connecter à la base de données.
Remarque: Étant donné que nous transmettons explicitement les informations de connexion via ConnectionString, le module Puisque le créé avant le formulaire principal, vous pouvez appeler en toute sécurité les méthodes à partir du module de données dans OnCreate de MainForm un événement.LoginPrompt est définie sur false pour empêcher une boîte de dialogue de connexion inutile.
Le "fun" démarre si une exception se produit. Bien que la méthode Open puisse échouer pour de nombreuses raisons, supposons que le nom du serveur ou le nom de la base de données est incorrect.
Si tel est le cas, nous donnerons à l'utilisateur la possibilité de spécifier les paramètres corrects en affichant un formulaire de dialogue personnalisé.
L'exemple d'application contient également un formulaire supplémentaire (DatabasePromptForm) qui permet à l'utilisateur de spécifier le serveur et le nom de base de données pour le composant Connection. Ce formulaire simple ne fournit que deux zones d'édition, si vous souhaitez fournir une interface plus conviviale, vous pouvez ajoutez deux zones de liste déroulante et remplissez-les en énumérant les serveurs SQL disponibles et en récupérant les bases de données sur un serveur SQL.
Le formulaire DatabasePrompt fournit un méthode de classe nommé Execute qui accepte deux paramètres variables (var): ServerName et DBName.
Avec les "nouvelles" données fournies par un utilisateur (nom du serveur et de la base de données), nous appelons simplement à nouveau la fonction DBConnect () (récursivement). Bien sûr, les informations sont d'abord stockées dans le Registre (en utilisant une autre méthode personnalisée: WriteRegistry).
Assurez-vous que DataModule est le premier "formulaire" créé!
Si vous essayez de créer ce projet simple par vous-même, vous pouvez rencontrer des exceptions de violation d'accès lorsque vous exécutez l'application.
Par défaut, le premier formulaire ajouté à l'application devient le MainForm (le premier créé). Lorsque vous ajoutez un module de données à l'application, le module de données est ajouté à la liste des "formulaires de création automatique" en tant que formulaire qui est créé après le formulaire principal.
Maintenant, si vous essayez d'appeler l'une des propriétés ou méthodes du module de données dans l'événement OnCreate de MainForm, vous obtiendrez une exception de violation d'accès - car le module de données n'est pas encore créé.
Pour résoudre ce problème, vous devez modifier manuellement l'ordre créé du module de données - et le définir sur le premier formulaire créé par l'application (en utilisant la boîte de dialogue Propriétés du projet ou en modifiant le Fichier source des projets).
Étant donné que le module de données est créé avant le formulaire principal, vous pouvez appeler en toute sécurité les méthodes à partir du module de données dans l'événement OnCreate de MainForm.