Dans l'application de base de données DELPHI, nous disposons généralement de deux manières d'accéder à la base de données. La première consiste à effectuer une recherche dans la base de données BDE moteur, c'est-à-dire en utilisant le pilote de base de données fourni avec DELPHI. L'avantage de cette méthode est qu'elle est rapide, mais sa portée d'application est limitée. Lorsque la version de la base de données est mise à jour, il se peut qu'elle ne soit pas en mesure de faire fonctionner la nouvelle base de données. Une autre méthode consiste à utiliser ODBC, ce qui présente des avantages ; Le fait est qu'il peut être fourni avec le système d'exploitation (comme WINDOWS) et peut être adapté à une variété de bases de données en tant qu'interface standard. L'inconvénient est qu'il est lent. En préparation Au cours du processus, nous pouvons choisir l’une des méthodes en fonction de nos besoins. Lorsque vous utilisez ODBC pour accéder à la base de données, la méthode habituelle consiste à configurer une source de données système ODBC dans le panneau de gestion ODBC. (DSN système), puis définissez un alias de base de données (Alias) dans le DBD ou dans le programme pour correspondre au DSN, afin que vous puissiez utiliser La base de données peut être facilement exploitée. Je pense que les programmeurs qui ont utilisé DELPHI pour créer des applications de bases de données connaissent déjà très bien cet aspect, et je n'en connais pas beaucoup. Dit. Dans des applications pratiques, l'auteur a rencontré une telle situation. Notre application de base de données s'appuie sur la source de données du système ODBC. Le programme d'application qui accède à la base de données et l'exploite a bien fonctionné jusqu'au jour où une personne qui connaît le système WINDOWS mais ne le connaît pas Les utilisateurs trop avertis modifient ou suppriment accidentellement notre système DSN prédéfini... Par conséquent, l'auteur a commencé à étudier comment définir dynamiquement le contenu du DSN du système ODBC dans le programme, afin que je puisse augmenter mon propre programme. La commande est solide. Après une journée entière de recherche sur le registre WINDOWS, j'ai enfin trouvé le secret pour configurer DSN avec le gestionnaire ODBC. (« Il y a de la justice au ciel et sur terre, et vous serez toujours récompensés pour vos efforts ! » Ce n'est pas une publicité !) Je l'écris pour le partager avec tout le monde, et je demande aussi conseil à des experts. Le secret de la configuration du DSN par le programme de gestion ODBC se trouve dans le registre. Si vous n'y croyez pas, vous pouvez accéder à HKEY_LOCAL_MACHINE/Software/ODBC. Jetez-y un œil, cela vous fera certainement sentir que vous avez déjà réussi à moitié. Tout d'abord, jetons un coup d'œil au pilote de base de données ODBC installé sur le système. Dans HKEY_LOCAL_MACHINE/Software/ODBC/ ODBCInst.INI stocke des informations sur le pilote de base de données ODBC installé. De là, vous pouvez vérifier le numéro ODBC installé. Informations telles que le fichier DLL correspondant au pilote de base de données. Dans chaque valeur clé des pilotes ODBCInst.INI/ODBC, le nom de la clé est le pilote Le nom (tel que Microsoft Access Driver (*.mdb)) et la valeur de la clé sont « Installé », indiquant que le pilote a été installé. exister ODBCInst.INI/DriverName (DriverName est un nom de pilote, tel que Microsoft Access Driver (*.mdb)) , il y a des informations détaillées sur le pilote. Nous obtenons principalement ici le chemin et le nom du fichier DLL correspondant au pilote ODBC. La valeur clé du nom de clé Pilote est généralement « C:/WINDOWS/SYSTEM/FileName.DLL ». Regardez ensuite les informations d'enregistrement du DSN du système Dans HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI, le système est stocké. Les informations d'enregistrement du DSN, les paramètres DSN que nous avons définis dans le panneau de gestion ODBC sont ici. Jetons un coup d'œil aux étapes pour créer un DSN système ODBC, c'est-à-dire qu'après avoir terminé les réglages des paramètres dans le panneau de gestion ODBC, la gestion ODBC. Comment le programme enregistre-t-il les informations DSN dans le registre ? Prenons comme exemple la création d'un DSN système de type Ms Access97 nommé MyAccess. Les paramètres que nous spécifions incluent principalement le type de base de données (Microsoft Access Driver (*.mdb)), le nom de la source de données (MyAccess), Description de la source de données (Mon ACCESS), chemin de la base de données (C:/Inetpub/wwwroot/Test.mdb), autres paramètres tels que le nom d'utilisateur, Mot de passe utilisateur, exclusif, lecture seule, base de données système, répertoire par défaut, taille du tampon, nombre de lignes de numérisation, délai d'expiration de la page, etc. utiliser le système Paramètres par défaut. À l’heure actuelle, le système d’enregistrement DSN devrait généralement comporter les étapes suivantes : 1. Ajoutez une clé de chaîne dans les sources de données HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/ODBC La valeur est MyAccess = Microsoft Access Driver (*.mdb), où correspondent respectivement le nom de la source de données et le type de base de données. Il s'agit d'enregistrer un nom DSN système dans le registre. 2. Créez une sous-clé (SubKey) MyAccess dans HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI, c'est-à-dire créez Créez une clé sous HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess, puis créez-en Valeur clé, qui décrit en détail les informations de configuration d'un DSN système. Les informations principales sont (le contenu entre [] est le commentaire de l'auteur) : DBQ=C:/Inetpub/wwwroot/Test.mdb [Chaîne indiquant le chemin de la base de données] Description=Mon ACCÈS [chaîne, représentant la description de la base de données] Driver=C:/PWIN98/System/odbcjt32.dll [Chaîne indiquant le pilote, visible ODBCINST.INI] DriverId=0x00000019(25) [Le numéro indiquant l'identification du conducteur ne peut pas être modifié] FIL=Ms Access ; [Chaîne, peut être liée au filtre] SafeTransaction=0x00000000 [Nombre, peut indiquer le nombre d'opérations transactionnelles prises en charge] UID="" [Chaîne indiquant le nom d'utilisateur, voici une chaîne vide] 3. Créez une sous-clé (SubKey)Engines dans HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess, Créez ensuite une sous-clé (SubKey)Jet en dessous, c'est-à-dire créez une clé comme HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess/Engines/Jet et créez-en quelques-uns Valeur clé, qui décrit en détail les informations de configuration du moteur de base de données d'un DSN système. Les informations principales sont les suivantes (le contenu entre [] est l'annotation de l'auteur) : ImplicitCommitSync=Oui [Chaîne, peut indiquer si les modifications des données sont reflétées immédiatement] MaxBufferSize=0x00000200(512) [numéro indiquant la taille du tampon] PageTimeout=0x00000005(5) [numéro indiquant le délai d'expiration de la page] Threads=0x00000003(3) [nombre, indiquant éventuellement le nombre maximum de threads pris en charge] UserCommitSync=Oui [Chaîne, peut indiquer si les modifications des données seront immédiatement répercutées sur l'utilisateur] Ce qui précède constitue les informations de base pour établir un DSN système (d'autres informations telles que les options ou les options avancées sont également définies ici, mais comme la valeur par défaut informations non répertoriées dans le registre), nous exploitons le registre selon les étapes ci-dessus dans le programme, et pouvons également ajouter un DSN système ou modifier sa configuration. Dans l'exemple de programme suivant, un DSN système sera créé selon les étapes ci-dessus. Veuillez prêter attention aux commentaires dans le programme. {************************************************* * *** Dans cette procédure, une source de données système ODBC (DSN) sera créée, Nom de la source de données : MyAccess Description de la source de données : Ma nouvelle source de données Type de base de données :ACCESS97 Base de données correspondante : C:/Inetpub/wwwroot/test.mdb ************************************************** * *****} {Notez que le registre doit être inclus dans l'instruction USES} PRécédure TForm1.Button1Click(Expéditeur : TObject); var registerTemp : TRegistry; bData : tableau[ 0..0 ] d'octet ; commencer registerTemp := TRegistry.Create; //Créer une instance de registre avec registerTemp faire commencer RootKey:=HKEY_LOCAL_MACHINE;//Définissez la valeur de la clé racine sur HKEY_LOCAL_MACHINE //Rechercher un logiciel/ODBC/ODBC.INI/ODBC Sources de données si OpenKey('Software/ODBC/ODBC.INI/ODBC Data Sources',True) alors commencer //Enregistrer un nom DSN WriteString( 'MyAccess', 'Pilote Microsoft Access (*.mdb)' ); fin autre début // Échec de la création de la valeur clé memo1.lines.add('Échec de l'ajout de la source de données ODBC'); sortie; fin; FermerClé ; //Trouver ou créer Software/ODBC/ODBC.INI/MyAccess et écrire les informations de configuration DSN si OpenKey('Software/ODBC/ODBC.INI/MyAccess',True) alors commencer WriteString( 'DBQ', 'C:/inetpub/wwwroot/test.mdb' );//répertoire de la base de données WriteString( 'Description', 'Ma nouvelle source de données' );//Description de la source de données WriteString( 'Driver', 'C:/PWIN98/SYSTEM/odbcjt32.dll' );//Fichier DLL du pilote WriteInteger( 'DriverId', 25 );//ID du pilote WriteString( 'FIL', 'Ms Access;' );//Base du filtre WriteInteger( 'SafeTransaction', 0 );//Nombre d'opérations de transaction prises en charge WriteString( 'UID', '' );//Nom d'utilisateur bDonnées[0] := 0; WriteBinaryData( 'Exclusif', bData, 1 );//Mode non exclusif WriteBinaryData( 'ReadOnly', bData, 1 );//Mode non lecture seule fin else // Échec de la création de la valeur clé commencer memo1.lines.add('Échec de l'ajout de la source de données ODBC'); sortie; fin; FermerClé ; //Trouver ou créer un logiciel/ODBC/ODBC.INI/MyAccess/Engines/Jet //Écrire les informations de configuration du moteur de base de données DSN si OpenKey('Software/ODBC/ODBC.INI/MyAccess/Engines/Jet',True) alors commencer WriteString( 'ImplicitCommitSync', 'Oui' ); WriteInteger( 'MaxBufferSize', 512 );//Taille du tampon WriteInteger( 'PageTimeout', 10 ); //Délai d'expiration de la page WriteInteger( 'Threads', 3 );//Le nombre de threads pris en charge WriteString( 'UserCommitSync', 'Oui' ); fin else // Échec de la création de la valeur clé commencer memo1.lines.add('Échec de l'ajout de la source de données ODBC'); sortie; fin; FermerClé ; memo1.lines.add('Ajouter une nouvelle source de données ODBC avec succès'); Gratuit; fin; fin; Le programme ci-dessus a été débogué et passé sous PWIN98+DELPHI3.0. Voici les informations qui doivent être définies pour créer un DSN de types de bases de données courants ([] est le contenu du commentaire, à l'exception des commentaires spéciaux, chaque paramètre peut être vu dans la description précédente) : 1. Accès (Pilote Microsoft Access (*.mdb)) DBQ, Description, Pilote[odbcjt32.dll], DriverID[25], FIL[Ms Access;], SafeTransaction[la valeur par défaut est 0], UID[la valeur par défaut est vide], Engines/Jet/ImplicitCommitSync[la valeur par défaut est Oui], Engines/Jet/MaxBufferSize[par défaut 512], Engines/Jet/PageTimeout[la valeur par défaut est 512], Engines/Jet/Threads[la valeur par défaut est 3], Moteurs/Jet/UserCommitSync [la valeur par défaut est Oui] Paramètres facultatifs : SystemDb[string, chemin d'accès à la base de données système], ReadOnly[binaire, s'il faut ouvrir en mode lecture seule, 1 signifie oui, la valeur par défaut est 0], Exclusif[binaire, s'il faut ouvrir en mode exclusif, 1 signifie oui, la valeur par défaut est 0], PWD [chaîne, mot de passe utilisateur] 2. Excel (Pilote Microsoft Excel (*.xls)) DBQ[Excel97(=chemin/xxx.xls), 5.0/7.0(=chemin/xxx.xls), 4.0(=chemin), 3.0(=chemin)], Description, pilote[odbcjt32.dll], DefaultDir[Excel97(<>DBQ),5.0/7.0(<>DBQ),4.0(=DBQ),3.0(=DBQ)], ID du pilote[790(Excel97), 22(5.0/7.0), 278(4.0), 534(3.0)], FIL[Excel5.0;], Lecture seule, SafeTransaction, UID, Engines/Excel/ImplicitCommitSync, Engines/Excel/MaxScanRows[nombre, nombre de lignes analysées, la valeur par défaut est 8], Moteurs/Excel/Threads、Moteurs/Excel/UserCommitSync、 Engines/Excel/FirstRowHasName[binaire, si la première ligne est le nom de domaine, 1 signifie oui, la valeur par défaut est 1] Remarque : DBQ d'Excel97 et Excel7.0/5.0 correspond à un fichier XLS, tandis qu'Excel4.0 et Excel3.0 correspondent à un répertoire ; DefaultDir correspond à un répertoire, qui est le chemin correspondant à DBQ dans Excel97 et Excel7.0/5.0. C'est la même chose que DBQ sous Excel4.0 et Excel3.0 ; le DriverID de chaque version est différent. 3. dBase (Pilote Microsoft dBase (*.dbf)) DefaultDir[string, répertoire où se trouve le fichier de base de données], Description, Driver[odbcjt32.dll], ID du pilote[277(IV), 533(5.0)], FIL[dbase III;], SafeTransaction, UID, Moteurs/Xbase/ImplicitCommitSync, Engines/Xbase/Collating[Chaîne, base de tri, peut être ASCII, International, Norvégien-Danois, Suédois-finlandais], Engines/Xbase/Deleted[binaire, s'il faut ou non afficher les enregistrements supprimés de manière logicielle, 0 signifie affichage, la valeur par défaut est 1], Engines/Xbase/PageTimeout[la valeur par défaut est 600], Engines/Xbase/UserCommitSync, Engines/Xbase/Threads, Engines/Xbase/Statistics [binaire, s'il faut utiliser le nombre approximatif de lignes, 1 signifie oui, 0 par défaut] Remarque : (Le DriverId des deux versions de dBaseIV et dBase5.0 est différent) 4. Foxpro (Pilote Microsoft Foxpro (*.dbf)) DefaultDir[le répertoire où se trouve le fichier de base de données], Description, Pilote[odbcjt32.dll], DriverID[536(2.6), 280(2.5)], FIL[Foxpro 2.0;], SafeTransaction, UID, Engines/Xbase/Collating[Chaîne, base de tri, peut être ASCII, International], Engines/Xbase/Deleted[binaire, s'il faut ou non afficher les enregistrements supprimés de manière logicielle, 0 signifie affichage, la valeur par défaut est 1], Engines/Xbase/PageTimeout[la valeur par défaut est 600], Engines/Xbase/UserCommitSync, Engines/Xbase/Threads, Engines/Xbase/Statistics [binaire, s'il faut utiliser le nombre approximatif de lignes, 1 signifie oui, 0 par défaut] Remarque : (Les DriverId de Foxpro2.5 et Foxpro2.6 sont différents) Transformez le programme ci-dessus en un contrôle COM ou ActiveX, qui peut être utilisé dans de nombreux langages de programmation de haut niveau tels que DELPHI, C++Buider, VB, VC et PB. |