В приложении базы данных DELPHI у нас обычно есть два способа доступа к базе данных. Один из них — поиск в базе данных BDE. движок, то есть с использованием драйвера базы данных, поставляемого с DELPHI. Преимущество этого метода в том, что он быстрый, но область его применения ограничена. Когда версия базы данных обновляется, возможно, она не сможет работать с новой базой данных. Другой метод — через ODBC, который имеет свои преимущества; Дело в том, что он может поставляться вместе с операционной системой (например, WINDOWS) и может быть адаптирован к различным базам данных в качестве стандартного интерфейса. Недостаток — медленный. В стадии подготовки В процессе мы можем выбрать один из методов в соответствии с нашими потребностями. При использовании ODBC для доступа к базе данных обычным методом является настройка системного источника данных ODBC на панели управления ODBC. (Системный DSN), а затем установите псевдоним базы данных (Псевдоним) в DBD или в программе, чтобы он соответствовал DSN, чтобы можно было использовать Базой данных можно легко управлять. Я считаю, что программисты, которые использовали DELPHI для создания приложений баз данных, уже хорошо знакомы с этим аспектом, а я знаю не многих. Сказал. В практических приложениях автор столкнулся с такой ситуацией. Наше приложение базы данных опирается на системный источник данных ODBC. Прикладная программа, которая осуществляет доступ к базе данных и управляет ею, работала хорошо, пока однажды человек, знакомый с системой WINDOWS, но не знакомый с ней, Слишком сообразительные пользователи случайно изменяют или удаляют наш предустановленный системный DSN... Поэтому автор начал изучать, как динамически задавать в программе содержимое системного DSN ODBC, чтобы я мог увеличить свою собственную программу. Заказ солидный. После целого дня исследования реестра WINDOWS я наконец нашел секрет настройки DSN с помощью менеджера ODBC. («Есть справедливость на небе и на земле, и вы всегда будете вознаграждены за свои усилия!» Это не реклама!) Пишу, чтобы поделиться со всеми, а также прошу совета у специалистов. Секрет установки DSN программой управления ODBC кроется в реестре. Если не верите, можете зайти в HKEY_LOCAL_MACHINE/Software/ODBC. Посмотрите, это обязательно заставит вас почувствовать, что вы уже на полпути к успеху. Для начала давайте взглянем на драйвер базы данных ODBC, установленный в системе. В HKEY_LOCAL_MACHINE/Программное обеспечение/ODBC/ ODBCInst.INI хранит информацию об установленном драйвере базы данных ODBC. Здесь вы можете проверить установленный номер ODBC. Такая информация, как файл DLL, соответствующий драйверу базы данных. В каждом значении ключа драйверов ODBCInst.INI/ODBC именем ключа является драйвер. Имя (например, Драйвер доступа Microsoft (*.mdb)) и значение ключа «Установлен», что указывает на то, что драйвер установлен. существовать ODBCInst.INI/DriverName (DriverName — это имя драйвера, например Microsoft Access Driver (*.mdb)) , есть подробная информация о драйвере. В основном отсюда мы получаем путь и имя файла DLL, соответствующего драйверу ODBC. Ключевое значение имени ключа Driver обычно имеет вид «C:/WINDOWS/SYSTEM/FileName.DLL». Затем посмотрите регистрационную информацию системного DSN. В HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI хранится система. Регистрационная информация DSN, параметры DSN, которые мы установили в панели управления ODBC, находятся здесь. Давайте рассмотрим шаги по созданию системного DSN ODBC. То есть после завершения настройки параметров в панели управления ODBC происходит управление ODBC. Как программа регистрирует информацию DSN в реестре? В качестве примера возьмем создание системного DSN типа Ms Access97 с именем MyAccess. Параметры, которые мы указываем, в основном включают тип базы данных (Microsoft Access Driver (*.mdb)), имя источника данных (MyAccess), Описание источника данных (My ACCESS), путь к базе данных (C:/Inetpub/wwwroot/Test.mdb), другие параметры, такие как имя пользователя, Пароль пользователя, эксклюзивный, только для чтения, системная база данных, каталог по умолчанию, размер буфера, количество строк сканирования, тайм-аут страницы и т. д. использовать систему Параметры по умолчанию. На данный момент система регистрации DSN обычно должна включать следующие этапы: 1. Добавьте строковый ключ в HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/ODBC Data Sources. Значением является MyAccess = Microsoft Access Driver(*.mdb), где — имя источника данных и тип базы данных соответственно. Это необходимо для регистрации системного имени DSN в реестре. 2. Создайте подраздел (SubKey) MyAccess в HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI, то есть создайте Создайте ключ HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess, а затем создайте несколько Значение ключа, подробно описывающее информацию о конфигурации системного DSN. Основная информация (содержимое в [] — комментарий автора): DBQ=C:/Inetpub/wwwroot/Test.mdb [строка, указывающая путь к базе данных] Описание=Мой ДОСТУП [строка, представляющая описание базы данных] Driver=C:/PWIN98/System/odbcjt32.dll [строка, указывающая драйвер, видимый ODBCINST.INI] DriverId=0x00000019(25) [Число, обозначающее идентификацию водителя, изменить нельзя] FIL=Ms Access; [строка, может быть связана с фильтром] SafeTransaction=0x00000000 [Число, может указывать количество поддерживаемых транзакционных операций] UID="" [Строка, указывающая имя пользователя, здесь пустая строка] 3. Создайте подраздел (SubKey) Engines в HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess, Затем создайте под ним подраздел (SubKey)Jet, то есть создайте ключ как HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess/Engines/Jet и создайте его под ним. Значение ключа, которое подробно описывает информацию о конфигурации ядра базы данных системного DSN. Основная информация следующая (содержимое в [] является аннотацией автора): ImplicitCommitSync=Да [Строка, может указывать, будут ли изменения данных отражаться немедленно] MaxBufferSize=0x00000200(512) [число, обозначающее размер буфера] PageTimeout=0x00000005(5) [число, обозначающее тайм-аут страницы] Threads=0x00000003(3) [число, возможно, указывающее максимальное количество поддерживаемых потоков] UserCommitSync=Да [Строка, может указывать, будут ли изменения данных немедленно отражаться пользователю] Выше приведена основная информация для установки системного DSN (здесь также задается другая информация, такая как параметры или дополнительные параметры, но поскольку по умолчанию информация, не указанная в реестре), мы работаем с реестром согласно описанным выше шагам программы, а также можем добавить системный DSN или изменить его конфигурацию. В следующем примере программы системный DSN будет создан в соответствии с вышеуказанными шагами. Обратите внимание на комментарии в программе. {************************************************ * *** В ходе этой процедуры будет создан системный источник данных ODBC (DSN). Имя источника данных: MyAccess Описание источника данных: Мой новый источник данных Тип базы данных:ACCESS97 Соответствующая база данных: C:/Inetpub/wwwroot/test.mdb. ************************************************* * *****} {Обратите внимание, что реестр должен быть включен в заявление USES} PROcedure TForm1.Button1Click(Отправитель: TObject); вар регистрТемп: TRegistry; bData: массив [0..0] байтов; начинать RegisterTemp := TRegistry.Create //Создаем экземпляр реестра; с помощью RegisterTemp сделать начинать RootKey:=HKEY_LOCAL_MACHINE;//Установим значение корневого ключа HKEY_LOCAL_MACHINE //Найти программное обеспечение/ODBC/ODBC.INI/источники данных ODBC если OpenKey('Источники данных Software/ODBC/ODBC.INI/ODBC',True), то начать //Регистрируем имя DSN WriteString('MyAccess', 'Драйвер Microsoft Access (*.mdb)' ); конец еще начало//Не удалось создать значение ключа memo1.lines.add('Не удалось добавить источник данных ODBC'); Выход; конец; ЗакрытьКлюч; //Находим или создаем Software/ODBC/ODBC.INI/MyAccess и записываем информацию о конфигурации DSN если OpenKey('Software/ODBC/ODBC.INI/MyAccess',True), то начинать WriteString('DBQ', 'C:/inetpub/wwwroot/test.mdb');//каталог базы данных WriteString( 'Описание', 'Мой новый источник данных');//Описание источника данных WriteString('Driver', 'C:/PWIN98/SYSTEM/odbcjt32.dll');//DLL-файл драйвера WriteInteger('DriverId', 25);//Идентификатор драйвера WriteString( 'FIL', 'Ms Access;' );//Фильтрация на основе WriteInteger( 'SafeTransaction', 0 );//Количество поддерживаемых транзакционных операций WriteString( 'UID', '' );//Имя пользователя бДанные[0] := 0; WriteBinaryData( 'Exclusive', bData, 1 );//Неэксклюзивный режим WriteBinaryData( 'ReadOnly', bData, 1 );//Режим не только для чтения конец else//Не удалось создать значение ключа начинать memo1.lines.add('Не удалось добавить источник данных ODBC'); Выход; конец; ЗакрытьКлюч; //Найти или создать Software/ODBC/ODBC.INI/MyAccess/Engines/Jet //Запись информации о конфигурации ядра базы данных DSN если OpenKey('Software/ODBC/ODBC.INI/MyAccess/Engines/Jet',True), то начинать WriteString('ImplicitCommitSync', 'Да'); WriteInteger('MaxBufferSize', 512);//Размер буфера WriteInteger('PageTimeout', 10); //Тайм-аут страницы WriteInteger('Threads', 3);//Количество поддерживаемых потоков WriteString('UserCommitSync', 'Да'); конец else//Не удалось создать значение ключа начинать memo1.lines.add('Не удалось добавить источник данных ODBC'); Выход; конец; ЗакрытьКлюч; memo1.lines.add('Успешно добавлен новый источник данных ODBC'); Бесплатно; конец; конец; Вышеуказанная программа была отлажена и передана под PWIN98+DELPHI3.0. Ниже приведена информация, которую необходимо задать для создания DSN общих типов баз данных ([] — содержимое комментария, за исключением специальных комментариев, каждый параметр можно увидеть в предыдущем описании): 1. Доступ (драйвер Microsoft Access (*.mdb)) DBQ, Описание, Драйвер[odbcjt32.dll], DriverID[25], FIL[Ms Access;], SafeTransaction[по умолчанию — 0], UID[по умолчанию пусто], Engines/Jet/ImplicitCommitSync[по умолчанию — Да], Engines/Jet/MaxBufferSize[по умолчанию 512], Engines/Jet/PageTimeout[по умолчанию — 512], Engines/Jet/Threads[по умолчанию — 3], Engines/Jet/UserCommitSync [по умолчанию — Да] Дополнительные настройки: SystemDb[строка, путь к системной базе данных], ReadOnly[двоичный, открывать ли в режиме только для чтения, 1 означает да, по умолчанию 0], Эксклюзивный[двоичный файл, открывать ли в эксклюзивном режиме, 1 означает да, по умолчанию 0], PWD [строка, пароль пользователя] 2. Excel (драйвер Microsoft Excel (*.xls)) DBQ[Excel97(=путь/xxx.xls), 5.0/7.0(=путь/xxx.xls), 4.0(=путь), 3.0(=путь)], Описание, Драйвер[odbcjt32.dll], DefaultDir[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[число, количество сканируемых строк, по умолчанию — 8], Движки/Excel/Потоки、Двигатели/Excel/UserCommitSync、 Engines/Excel/FirstRowHasName[двоичный файл, является ли первая строка именем домена, 1 означает «да», значение по умолчанию — 1] Примечание. DBQ Excel97 и Excel7.0/5.0 соответствует файлу XLS, а Excel4.0 и Excel3.0 соответствуют каталогу; DefaultDir соответствует каталогу, который является путем, соответствующим DBQ в Excel97 и Excel7.0/5.0. Это то же самое, что и DBQ в Excel4.0 и Excel3.0. DriverID каждой версии различен; 3. dBase (драйвер Microsoft dBase (*.dbf)) DefaultDir[строка, каталог, в котором находится файл базы данных], Описание, Драйвер[odbcjt32.dll], DriverID[277(IV), 533(5.0)], FIL[dbase III;], SafeTransaction, UID, Движки/Xbase/ImplicitCommitSync, Engines/Xbase/Collating[Строка, базис сортировки, может быть ASCII, международный, норвежско-датский, шведско-финский], Engines/Xbase/Deleted[двоичный файл, не отображать ли обратимо удаленные записи, 0 означает отображение, по умолчанию — 1], Engines/Xbase/PageTimeout[по умолчанию 600], Engines/Xbase/UserCommitSync, Engines/Xbase/Threads, Engines/Xbase/Statistics [двоичный файл, использовать ли приблизительное количество строк, 1 означает да, по умолчанию 0] Примечание. (DriverId двух версий dBaseIV и dBase5.0 различен) 4. Foxpro (драйвер Microsoft Foxpro (*.dbf)) DefaultDir[каталог, в котором находится файл базы данных], Описание, Драйвер[odbcjt32.dll], DriverID[536(2.6), 280(2.5)], FIL[Foxpro 2.0;], SafeTransaction, UID, Engines/Xbase/Collating[Строка, базис сортировки, может быть ASCII, международный], Engines/Xbase/Deleted[двоичный файл, не отображать ли обратимо удаленные записи, 0 означает отображение, по умолчанию — 1], Engines/Xbase/PageTimeout[по умолчанию 600], Engines/Xbase/UserCommitSync, Engines/Xbase/Threads, Engines/Xbase/Statistics [двоичный файл, использовать ли приблизительное количество строк, 1 означает да, по умолчанию 0] Примечание. (Идентификаторы драйверов Foxpro2.5 и Foxpro2.6 различаются) Превратите приведенную выше программу в элемент управления COM или ActiveX, который можно использовать во многих языках программирования высокого уровня, таких как DELPHI, C++Buider, VB, VC и PB. |