In der DELPHI-Datenbankanwendung haben wir normalerweise zwei Möglichkeiten, auf die Datenbank zuzugreifen. Eine besteht darin, die BDE-Datenbank zu durchsuchen Der Vorteil dieser Methode besteht darin, dass sie schnell ist, der Anwendungsbereich jedoch begrenzt ist. Wenn die Datenbankversion aktualisiert wird, kann die neue Datenbank möglicherweise nicht mehr betrieben werden. Eine andere Methode ist ODBC, was Vorteile bietet Der Punkt ist, dass es mit dem Betriebssystem (z. B. WINDOWS) bereitgestellt werden kann und als Standardschnittstelle an eine Vielzahl von Datenbanken angepasst werden kann. Der Nachteil ist, dass es langsam ist. In Vorbereitung Während des Prozesses können wir je nach Bedarf eine der Methoden auswählen. Wenn Sie ODBC für den Zugriff auf die Datenbank verwenden, besteht die übliche Methode darin, eine ODBC-Systemdatenquelle im ODBC-Verwaltungsbereich einzurichten. (System-DSN) und legen Sie dann im DBD oder im Programm einen Datenbankalias (Alias) fest, der dem DSN entspricht, damit Sie ihn verwenden können Die Datenbank kann sicher betrieben werden. Ich glaube, dass Programmierer, die DELPHI zum Erstellen von Datenbankanwendungen verwendet haben, bereits mit diesem Aspekt vertraut sind, und ich kenne nicht viele. Sagte. In praktischen Anwendungen ist der Autor auf eine solche Situation gestoßen. Unsere Datenbankanwendung basiert auf der ODBC-Systemdatenquelle. Das Anwendungsprogramm, das auf die Datenbank zugreift und diese betreibt, lief einwandfrei, bis eines Tages eine Person mit dem WINDOWS-System vertraut, aber nicht damit vertraut war Zu versierte Benutzer ändern oder löschen versehentlich unseren voreingestellten System-DSN ... Daher begann der Autor zu untersuchen, wie der Inhalt des ODBC-System-DSN dynamisch im Programm festgelegt werden kann, damit ich mein eigenes Programm erweitern kann. Die Bestellung ist solide. Nachdem ich einen ganzen Tag lang die WINDOWS-Registrierung durchforstet hatte, fand ich endlich das Geheimnis zum Einrichten von DSN mit dem ODBC-Manager. („Es gibt Gerechtigkeit im Himmel und auf Erden, und du wirst für deine Bemühungen immer belohnt!“ Dies ist keine Werbung!) Ich schreibe es auf, um es mit allen zu teilen, und bitte auch Experten um Rat. Das Geheimnis der DSN-Einstellung über das ODBC-Verwaltungsprogramm liegt in der Registrierung. Wenn Sie es nicht glauben, können Sie zu HKEY_LOCAL_MACHINE/Software/ODBC gehen. Werfen Sie einen Blick darauf, es wird Ihnen auf jeden Fall das Gefühl geben, dass Sie schon halbwegs erfolgreich sind. Schauen wir uns zunächst den im System installierten ODBC-Datenbanktreiber an. In HKEY_LOCAL_MACHINE/Software/ODBC/ ODBCInst.INI speichert Informationen über den installierten ODBC-Datenbanktreiber. Von hier aus können Sie die installierte ODBC-Nummer überprüfen. Informationen wie die DLL-Datei, die dem Datenbanktreiber entspricht. In jedem Schlüsselwert von ODBCInst.INI/ODBC Drivers ist der Schlüsselname der Treiber Der Name (z. B. Microsoft Access Driver (*.mdb)) und der Schlüsselwert sind „Installiert“, was darauf hinweist, dass der Treiber installiert wurde. existieren ODBCInst.INI/DriverName (DriverName ist ein Treibername, z. B. Microsoft Access Driver (*.mdb)) Hier erhalten wir hauptsächlich den Pfad und den Dateinamen der DLL-Datei, die dem ODBC-Treiber entspricht Der Schlüsselwert des Schlüsselnamentreibers ist im Allgemeinen „C:/WINDOWS/SYSTEM/FileName.DLL“. Schauen Sie sich dann die Registrierungsinformationen des System-DSN an. In HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI ist das System gespeichert Hier finden Sie die Registrierungsinformationen des DSN und die DSN-Parameter, die wir im ODBC-Verwaltungspanel festgelegt haben. Werfen wir einen Blick auf die Schritte zum Erstellen eines ODBC-System-DSN. Das heißt, nachdem wir die Parametereinstellungen im ODBC-Verwaltungsfenster abgeschlossen haben, erfolgt die ODBC-Verwaltung Wie registriert das Programm DSN-Informationen in der Registrierung? Nehmen Sie als Beispiel die Erstellung eines System-DSN vom Typ Ms Access97 mit dem Namen MyAccess. Zu den von uns angegebenen Parametern gehören hauptsächlich der Datenbanktyp (Microsoft Access-Treiber (*.mdb)), der Datenquellenname (MyAccess), Datenquellenbeschreibung (My ACCESS), Datenbankpfad (C:/Inetpub/wwwroot/Test.mdb), andere Parameter wie Benutzername, Benutzerkennwort, exklusiv, schreibgeschützt, Systemdatenbank, Standardverzeichnis, Puffergröße, Anzahl der Scanzeilen, Seiten-Timeout usw. verwenden das System Standardparameter. Zu diesem Zeitpunkt sollte das DSN-Registrierungssystem im Allgemeinen die folgenden Schritte aufweisen: 1. Fügen Sie einen Zeichenfolgenschlüssel in HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/ODBC Data Sources hinzu Der Wert ist MyAccess = Microsoft Access Driver(*.mdb), wobei der Name der Datenquelle bzw. der Datenbanktyp angegeben sind. Hiermit wird ein System-DSN-Name in der Registrierung registriert. 2. Erstellen Sie einen Unterschlüssel (SubKey) MyAccess in HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI, dh erstellen Erstellen Sie einen Schlüssel als HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess und erstellen Sie dann einige Schlüsselwert, eine detaillierte Beschreibung der Konfigurationsinformationen eines System-DSN. Die Hauptinformationen sind (der Inhalt in [] ist der Kommentar des Autors): DBQ=C:/Inetpub/wwwroot/Test.mdb [String, der den Datenbankpfad angibt] Beschreibung=Mein ZUGRIFF [Zeichenfolge, die die Datenbankbeschreibung darstellt] Driver=C:/PWIN98/System/odbcjt32.dll [String, der den Treiber angibt, sichtbare ODBCINST.INI] DriverId=0x00000019(25) [Nummer, die die Fahreridentifikation angibt, kann nicht geändert werden] FIL=Ms Access; [String, kann mit Filter zusammenhängen] SafeTransaction=0x00000000 [Zahl, kann die Anzahl der unterstützten Transaktionsvorgänge angeben] UID="" [String, der den Benutzernamen angibt, hier ist ein leerer String] 3. Erstellen Sie einen Unterschlüssel (SubKey)Engines in HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess, Erstellen Sie dann einen Jet-Unterschlüssel (SubKey) darunter, dh erstellen Sie einen Schlüssel als HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess/Engines/Jet und erstellen Sie einige darunter Schlüsselwert, der die Datenbank-Engine-Konfigurationsinformationen eines System-DSN detailliert beschreibt. Die Hauptinformationen lauten wie folgt (der Inhalt in [] ist die Anmerkung des Autors): ImplicitCommitSync=Yes [String, kann angeben, ob Datenänderungen sofort berücksichtigt werden] MaxBufferSize=0x00000200(512) [Zahl, die die Puffergröße angibt] PageTimeout=0x00000005(5) [Zahl, die das Seiten-Timeout angibt] Threads=0x00000003(3) [Zahl, die möglicherweise die maximale Anzahl unterstützter Threads angibt] UserCommitSync=Ja [String, kann angeben, ob Datenänderungen sofort für den Benutzer angezeigt werden] Das Obige sind die grundlegenden Informationen zum Einrichten eines System-DSN (andere Informationen wie Optionen oder erweiterte Optionen werden hier ebenfalls festgelegt, jedoch als Standard). Informationen, die nicht in der Registrierung aufgeführt sind), betreiben wir die Registrierung gemäß den oben genannten Schritten im Programm und können auch einen System-DSN hinzufügen oder seine Konfiguration ändern. Im folgenden Beispielprogramm wird gemäß den oben genannten Schritten ein System-DSN erstellt. Bitte beachten Sie die Kommentare im Programm. {***************************************************** ***** ****** In diesem Verfahren wird eine ODBC-Systemdatenquelle (DSN) erstellt. Name der Datenquelle: MyAccess Beschreibung der Datenquelle: Meine neue Datenquelle Datenbanktyp: ACCESS97 Entsprechende Datenbank: C:/Inetpub/wwwroot/test.mdb ************************************************** * *****} {Beachten Sie, dass die Registrierung in der USES-Anweisung enthalten sein sollte} PROzedur TForm1.Button1Click(Sender: TObject); var registerTemp : TRegistry; bData: Array[ 0..0 ] von Byte; beginnen registerTemp := TRegistry.Create; //Eine Registry-Instanz erstellen mit registerTemp tun beginnen RootKey:=HKEY_LOCAL_MACHINE;//Setzen Sie den Root-Schlüsselwert auf HKEY_LOCAL_MACHINE //Software/ODBC/ODBC.INI/ODBC-Datenquellen finden wenn OpenKey('Software/ODBC/ODBC.INI/ODBC Data Sources',True) dann begin //Registrieren Sie einen DSN-Namen WriteString( 'MyAccess', 'Microsoft Access Driver (*.mdb)' ); Ende anders begin//Schlüsselwert konnte nicht erstellt werden memo1.lines.add('Fehler beim Hinzufügen der ODBC-Datenquelle'); Ausfahrt; Ende; CloseKey; //Suchen oder erstellen Sie Software/ODBC/ODBC.INI/MyAccess und schreiben Sie DSN-Konfigurationsinformationen wenn OpenKey('Software/ODBC/ODBC.INI/MyAccess',True) dann beginnen WriteString( 'DBQ', 'C:/inetpub/wwwroot/test.mdb' );//Datenbankverzeichnis WriteString( 'Description', 'My new data source' );//Beschreibung der Datenquelle WriteString( 'Driver', 'C:/PWIN98/SYSTEM/odbcjt32.dll' );//Treiber-DLL-Datei WriteInteger( 'DriverId', 25 );//Treiber-ID WriteString( 'FIL', 'Ms Access;' );//Filterbasis WriteInteger( 'SafeTransaction', 0 );//Anzahl der unterstützten Transaktionsvorgänge WriteString( 'UID', '' );//Benutzername bData[0] := 0; WriteBinaryData( 'Exclusive', bData, 1 );//Nicht-exklusiver Modus WriteBinaryData( 'ReadOnly', bData, 1 );//Nicht-schreibgeschützter Modus Ende else//Schlüsselwert konnte nicht erstellt werden beginnen memo1.lines.add('Fehler beim Hinzufügen der ODBC-Datenquelle'); Ausfahrt; Ende; CloseKey; //Suchen oder erstellen Sie Software/ODBC/ODBC.INI/MyAccess/Engines/Jet //Konfigurationsinformationen für die DSN-Datenbank-Engine schreiben wenn OpenKey('Software/ODBC/ODBC.INI/MyAccess/Engines/Jet',True) dann beginnen WriteString( 'ImplicitCommitSync', 'Yes' ); WriteInteger( 'MaxBufferSize', 512 );//Puffergröße WriteInteger( 'PageTimeout', 10 ); //Seiten-Timeout WriteInteger( 'Threads', 3 );//Die Anzahl der unterstützten Threads WriteString( 'UserCommitSync', 'Yes' ); Ende else//Schlüsselwert konnte nicht erstellt werden beginnen memo1.lines.add('Fehler beim Hinzufügen der ODBC-Datenquelle'); Ausfahrt; Ende; CloseKey; memo1.lines.add('Neue ODBC-Datenquelle erfolgreich hinzugefügt'); Frei; Ende; Ende; Das obige Programm wurde debuggt und unter PWIN98+DELPHI3.0 übergeben. Im Folgenden sind die Informationen aufgeführt, die festgelegt werden müssen, um einen DSN für gängige Datenbanktypen zu erstellen ([] ist der Kommentarinhalt, mit Ausnahme spezieller Kommentare ist jeder Parameter in der vorherigen Beschreibung zu sehen): 1. Access (Microsoft Access-Treiber (*.mdb)) DBQ, Beschreibung, Treiber[odbcjt32.dll], DriverID[25], FIL[Ms Access;], SafeTransaction[Standard ist 0], UID[Standard ist leer], Engines/Jet/ImplicitCommitSync[Standard ist Ja], Engines/Jet/MaxBufferSize[Standard 512], Engines/Jet/PageTimeout[Standard ist 512], Engines/Jet/Threads[Standard ist 3], Engines/Jet/UserCommitSync [Standard ist Ja] Optionale Einstellungen: SystemDb[string, Pfad zur Systemdatenbank], ReadOnly[binär, ob im schreibgeschützten Modus geöffnet werden soll, 1 bedeutet ja, Standard ist 0], Exclusive[binär, ob im exklusiven Modus geöffnet werden soll, 1 bedeutet ja, Standard ist 0], PWD [Zeichenfolge, Benutzerpasswort] 2. Excel (Microsoft Excel-Treiber (*.xls)) DBQ[Excel97(=Pfad/xxx.xls), 5.0/7.0(=Pfad/xxx.xls), 4.0(=Pfad), 3.0(=Pfad)], Beschreibung, Treiber[odbcjt32.dll], Standardverzeichnis[Excel97(<>DBQ),5.0/7.0(<>DBQ),4.0(=DBQ),3.0(=DBQ)], DriverID[790(Excel97), 22(5.0/7.0), 278(4.0), 534(3.0)], FIL[Excel5.0;], ReadOnly, SafeTransaction, UID, Engines/Excel/ImplicitCommitSync, Engines/Excel/MaxScanRows[Anzahl, Anzahl der gescannten Zeilen, Standard ist 8], Engines/Excel/Threads、Engines/Excel/UserCommitSync、 Engines/Excel/FirstRowHasName[binär, ob die erste Zeile der Domänenname ist, 1 bedeutet ja, der Standardwert ist 1] Hinweis: DBQ von Excel97 und Excel7.0/5.0 entspricht einer XLS-Datei, während Excel4.0 und Excel3.0 einem Verzeichnis entsprechen; DefaultDir entspricht einem Verzeichnis, das dem Pfad entspricht, der DBQ in Excel97 und Excel7.0/5.0 entspricht. Es ist dasselbe wie DBQ unter Excel4.0 und Excel3.0; die DriverID jeder Version ist unterschiedlich. 3. dBase(Microsoft dBase-Treiber(*.dbf)) DefaultDir[Zeichenfolge, Verzeichnis, in dem sich die Datenbankdatei befindet], Beschreibung, Treiber[odbcjt32.dll], DriverID[277(IV), 533(5.0)], FIL[dbase III;], SafeTransaction, UID, Engines/Xbase/ImplicitCommitSync, Engines/Xbase/Collating[String, Sortierbasis, kann ASCII, International, Norwegisch-Dänisch sein, Schwedisch-Finnisch], Engines/Xbase/Deleted[binär, ob vorläufig gelöschte Datensätze nicht angezeigt werden sollen, 0 bedeutet Anzeige, Standard ist 1], Engines/Xbase/PageTimeout[Standard ist 600], Engines/Xbase/UserCommitSync, Engines/Xbase/Threads, Engines/Xbase/Statistics [binär, ob die ungefähre Anzahl von Zeilen verwendet werden soll, 1 bedeutet ja, Standard 0] Hinweis: (Die DriverId der beiden Versionen von dBaseIV und dBase5.0 ist unterschiedlich) 4. Foxpro (Microsoft Foxpro-Treiber (*.dbf)) DefaultDir[das Verzeichnis, in dem sich die Datenbankdatei befindet], Beschreibung, Driver[odbcjt32.dll], DriverID[536(2.6), 280(2.5)], FIL[Foxpro 2.0;], SafeTransaction, UID, Engines/Xbase/Collating[String, Sortierbasis, kann ASCII, International sein], Engines/Xbase/Deleted[binär, ob vorläufig gelöschte Datensätze nicht angezeigt werden sollen, 0 bedeutet Anzeige, Standard ist 1], Engines/Xbase/PageTimeout[Standard ist 600], Engines/Xbase/UserCommitSync, Engines/Xbase/Threads, Engines/Xbase/Statistics [binär, ob die ungefähre Anzahl von Zeilen verwendet werden soll, 1 bedeutet ja, Standard 0] Hinweis: (Die DriverId der Versionen Foxpro2.5 und Foxpro2.6 sind unterschiedlich) Machen Sie das obige Programm zu einem COM- oder ActiveX-Steuerelement, das in vielen höheren Programmiersprachen wie DELPHI, C++Buider, VB, VC und PB verwendet werden kann. |