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 des vom ODBC-Verwaltungsprogramm festgelegten DSN liegt in der Registrierung. Wenn Sie es nicht glauben, können Sie zu HKEY_LOCAL_MACHINESoftwareODBC 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_MACHINESoftwareODBC
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.INIODBC 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.INIDriverName (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üsselnamens Treiber ist im Allgemeinen „C:WINDOWSSYSTEMFileName.DLL“.
Schauen Sie sich dann die Registrierungsinformationen des System-DSN an. In HKEY_LOCAL_MACHINESoftwareODBCODBC.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:InetpubwwwrootTest.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 den Datenquellen HKEY_LOCAL_MACHINESoftwareODBCODBC.INIODBC 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_MACHINESoftwareODBCODBC.INI, das heißt, erstellen
Erstellen Sie einen Schlüssel als HKEY_LOCAL_MACHINESoftwareODBCODBC.INIMyAccess 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:InetpubwwwrootTest.mdb [String, der den Datenbankpfad angibt]
Beschreibung=Mein ZUGRIFF [Zeichenfolge, die die Datenbankbeschreibung darstellt]
Driver=C:PWIN98Systemodbcjt32.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_MACHINESoftwareODBCODBC.INIMyAccess,
Erstellen Sie dann einen Jet-Unterschlüssel (SubKey) darunter, dh erstellen Sie einen Schlüssel als
HKEY_LOCAL_MACHINESoftwareODBCODBC.INIMyAccessEnginesJet und erstellen Sie dann 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:Inetpubwwwroot est.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
//SoftwareODBCODBC.INIODBC-Datenquellen finden
wenn OpenKey('SoftwareODBCODBC.INIODBC 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 SoftwareODBCODBC.INIMyAccess und schreiben Sie DSN-Konfigurationsinformationen
wenn OpenKey('SoftwareODBCODBC.INIMyAccess',True) dann
beginnen
WriteString( 'DBQ', 'C:inetpubwwwroot est.mdb' );//Datenbankverzeichnis
WriteString( 'Description', 'My new data source' );//Beschreibung der Datenquelle
WriteString( 'Driver', 'C:PWIN98SYSTEModbcjt32.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;
//SoftwareODBCODBC.INIMyAccessEnginesJet suchen oder erstellen
//Konfigurationsinformationen für die DSN-Datenbank-Engine schreiben
wenn OpenKey('SoftwareODBCODBC.INIMyAccessEnginesJet',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],
EnginesJetImplicitCommitSync[Standard ist Ja], EnginesJetMaxBufferSize[Standard 512],
EnginesJetPageTimeout[Standard ist 512], EnginesJetThreads[Standard ist 3],
EnginesJetUserCommitSync [Standard 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(=pathxxx.xls), 5.0/7.0(=pathxxx.xls), 4.0(=path), 3.0(=path)],
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,
EnginesExcelImplicitCommitSync, EnginesExcelMaxScanRows[Anzahl, Anzahl der gescannten Zeilen, Standard ist 8],
EnginesExcelThreads, EnginesExcelUserCommitSync,
EnginesExcelFirstRowHasName[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,
EnginesXbaseImplicitCommitSync,
EnginesXbaseCollating[String, Sortierbasis, kann ASCII, International, Norwegisch-Dänisch sein,
Schwedisch-Finnisch],
EnginesXbaseDeleted[binär, ob vorläufig gelöschte Datensätze nicht angezeigt werden sollen, 0 bedeutet Anzeige, Standard ist 1],
EnginesXbasePageTimeout[Standard ist 600], EnginesXbaseUserCommitSync,
EnginesXbaseThreads, EnginesXbaseStatistics [binär, ob die ungefähre Anzahl von Zeilen verwendet werden soll, 1 ist 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,
EnginesXbaseCollating[String, Sortierbasis, kann ASCII, International sein],
EnginesXbaseDeleted[binär, ob vorläufig gelöschte Datensätze nicht angezeigt werden sollen, 0 bedeutet Anzeige, Standard ist 1],
EnginesXbasePageTimeout[Standard ist 600], EnginesXbaseUserCommitSync,
EnginesXbaseThreads, EnginesXbaseStatistics [binär, ob die ungefähre Anzahl von Zeilen verwendet werden soll, 1 ist 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.