В приложении базы данных DELPHI у нас обычно есть два способа доступа к базе данных. Один из них — поиск в базе данных BDE.
движок, то есть с использованием драйвера базы данных, поставляемого с DELPHI. Преимущество этого метода в том, что он быстрый, но область его применения ограничена.
Когда версия базы данных обновляется, возможно, она не сможет работать с новой базой данных. Другой метод — через ODBC, который имеет свои преимущества;
Дело в том, что он может поставляться вместе с операционной системой (например, WINDOWS) и может быть адаптирован к различным базам данных в качестве стандартного интерфейса. Недостатком является то, что он медленный. В стадии подготовки
В ходе процесса мы можем выбрать один из методов в соответствии с нашими потребностями.
При использовании ODBC для доступа к базе данных обычным методом является настройка системного источника данных ODBC на панели управления ODBC.
(Системный DSN), а затем установите псевдоним базы данных (Псевдоним) в DBD или в программе, чтобы он соответствовал DSN, чтобы можно было использовать
База данных может работать безопасно. Я считаю, что программисты, которые использовали DELPHI для создания приложений баз данных, уже знакомы с этим аспектом, а я знаю не многих.
Сказал. В практических приложениях автор столкнулся с такой ситуацией. Наше приложение базы данных опирается на системный источник данных ODBC.
Прикладная программа, которая осуществляет доступ к базе данных и управляет ею, работала хорошо, пока однажды человек, знакомый с системой WINDOWS, но не знакомый с ней,
Слишком сообразительные пользователи случайно изменяют или удаляют наш предустановленный системный DSN...
Поэтому автор начал изучать, как динамически задавать в программе содержимое системного DSN ODBC, чтобы я мог увеличить свою собственную программу.
Заказ солидный. После целого дня исследования реестра WINDOWS я наконец нашел секрет настройки DSN с помощью менеджера ODBC.
(«Есть справедливость на небе и на земле, и вы всегда будете вознаграждены за свои усилия!» Это не реклама!) Пишу, чтобы поделиться со всеми, а также прошу совета у специалистов.
Секрет DSN, установленного программой управления ODBC, находится в реестре. Если не верите, можете зайти в HKEY_LOCAL_MACHINESoftwareODBC.
Посмотрите, это обязательно заставит вас почувствовать, что вы уже на полпути к успеху.
Для начала давайте взглянем на драйвер базы данных ODBC, установленный в системе. в HKEY_LOCAL_MACHINEПрограммное обеспечениеODBC
ODBCInst.INI хранит информацию об установленном драйвере базы данных ODBC. Здесь вы можете проверить установленный номер ODBC.
Такая информация, как файл DLL, соответствующий драйверу базы данных. В каждом значении ключа драйверов ODBCInst.INIODBC именем ключа является драйвер.
Имя (например, Драйвер доступа Microsoft (*.mdb)) и значение ключа «Установлен», что указывает на то, что драйвер установлен. существовать
ODBCInst.INIDriverName (DriverName — это имя драйвера, например Microsoft Access Driver (*.mdb))
, есть подробная информация о драйвере. В основном отсюда мы получаем путь и имя файла DLL, соответствующего драйверу ODBC.
Ключевое значение имени ключа Driver обычно имеет вид «C:WINDOWSSYSTEMFileName.DLL».
Затем посмотрите регистрационную информацию системного DSN. В HKEY_LOCAL_MACHINESoftwareODBCODBC.INI хранится система.
Регистрационная информация DSN, параметры DSN, которые мы установили в панели управления ODBC, находятся здесь.
Давайте рассмотрим шаги по созданию системного DSN ODBC. То есть после того, как мы завершили настройку параметров в панели управления ODBC, управление ODBC.
Как программа регистрирует информацию DSN в реестре? В качестве примера возьмем создание системного DSN типа Ms Access97 с именем MyAccess.
Параметры, которые мы указываем, в основном включают тип базы данных (Microsoft Access Driver (*.mdb)), имя источника данных (MyAccess),
Описание источника данных (My ACCESS), путь к базе данных (C:InetpubwwwrootTest.mdb), другие параметры, такие как имя пользователя,
Пароль пользователя, эксклюзивный, только для чтения, системная база данных, каталог по умолчанию, размер буфера, количество строк сканирования, тайм-аут страницы и т. д. использовать систему
Параметры по умолчанию. На данный момент система регистрации DSN обычно должна включать следующие этапы:
1. Добавьте строковый ключ в источники данных HKEY_LOCAL_MACHINESoftwareODBCODBC.INIODBC.
Значением является MyAccess = Microsoft Access Driver(*.mdb), где — имя источника данных и тип базы данных соответственно.
Это необходимо для регистрации системного имени DSN в реестре.
2. Создайте подраздел (SubKey) MyAccess в HKEY_LOCAL_MACHINESoftwareODBCODBC.INI, то есть создайте
Создайте ключ HKEY_LOCAL_MACHINESoftwareODBCODBC.INIMyAccess, а затем создайте несколько
Значение ключа, подробное описание информации о конфигурации системного DSN. Основная информация (содержимое в [] — комментарий автора):
DBQ=C:InetpubwwwrootTest.mdb [строка, указывающая путь к базе данных]
Описание=Мой ДОСТУП [строка, представляющая описание базы данных]
Driver=C:PWIN98Systemodbcjt32.dll [строка, указывающая драйвер, видимый ODBCINST.INI]
DriverId=0x00000019(25) [Число, обозначающее идентификацию водителя, изменить нельзя]
FIL=Ms Access; [строка, может быть связана с фильтром]
SafeTransaction=0x00000000 [Число, может указывать количество поддерживаемых транзакционных операций]
UID="" [Строка, указывающая имя пользователя, здесь пустая строка]
3. Создайте подраздел (SubKey)Engines в HKEY_LOCAL_MACHINESoftwareODBCODBC.INIMyAccess,
Затем создайте под ним подраздел (SubKey) Jet, то есть создайте ключ как
HKEY_LOCAL_MACHINESoftwareODBCODBC.INIMyAccessEnginesJet, а затем создайте под ним
Значение ключа, которое подробно описывает информацию о конфигурации ядра базы данных системного DSN. Основная информация следующая (содержимое в [] является аннотацией автора):
ImplicitCommitSync=Да [Строка, может указывать, будут ли изменения данных отражаться немедленно]
MaxBufferSize=0x00000200(512) [число, обозначающее размер буфера]
PageTimeout=0x00000005(5) [число, обозначающее тайм-аут страницы]
Threads=0x00000003(3) [число, возможно, указывающее максимальное количество поддерживаемых потоков]
UserCommitSync=Да [Строка, может указывать, будут ли изменения данных немедленно отражаться пользователю]
Выше приведена основная информация для установки системного DSN (здесь также задается другая информация, такая как параметры или дополнительные параметры, но поскольку по умолчанию
информация, не указанная в реестре), мы работаем с реестром в соответствии с вышеуказанными шагами в программе, а также можем добавить системный DSN или изменить его конфигурацию.
В следующем примере программы системный DSN будет создан в соответствии с вышеуказанными шагами. Обратите внимание на комментарии в программе.
{************************************************ ***** ****
В ходе этой процедуры будет создан системный источник данных ODBC (DSN).
Имя источника данных: MyAccess Описание источника данных: Мой новый источник данных
Тип базы данных:ACCESS97
Соответствующая база данных: C:Inetpubwwwroot est.mdb.
**************************************************** * *****}
{Обратите внимание, что реестр должен быть включен в заявление USES}
PROcedure TForm1.Button1Click(Отправитель: TObject);
вар
регистрТемп: TRegistry;
bData: массив [0..0] байтов;
начинать
RegisterTemp := TRegistry.Create //Создаем экземпляр реестра;
с помощью RegisterTemp сделать
начинать
RootKey:=HKEY_LOCAL_MACHINE;//Установим значение корневого ключа HKEY_LOCAL_MACHINE
//Находим источники данных SoftwareODBCODBC.INIODBC
если OpenKey('SoftwareODBCODBC.INIODBC Data Sources',True), то
начать //Регистрируем имя DSN
WriteString('MyAccess', 'Драйвер Microsoft Access (*.mdb)' );
конец
еще
начало//Не удалось создать значение ключа
memo1.lines.add('Не удалось добавить источник данных ODBC');
Выход;
конец;
ЗакрытьКлюч;
//Находим или создаем SoftwareODBCODBC.INIMyAccess и записываем информацию о конфигурации DSN
если OpenKey('SoftwareODBCODBC.INIMyAccess',True), то
начинать
WriteString('DBQ', 'C:inetpubwwwroot est.mdb');//Каталог базы данных
WriteString( 'Описание', 'Мой новый источник данных');//Описание источника данных
WriteString('Driver', 'C:PWIN98SYSTEModbcjt32.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');
Выход;
конец;
ЗакрытьКлюч;
//Находим или создаем SoftwareODBCODBC.INIMyAccessEnginesJet
//Запись информации о конфигурации ядра базы данных DSN
если OpenKey('SoftwareODBCODBC.INIMyAccessEnginesJet',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[по умолчанию пусто],
EnginesJetImplicitCommitSync[по умолчанию — Да], EnginesJetMaxBufferSize[по умолчанию 512],
EnginesJetPageTimeout[по умолчанию — 512], EnginesJetThreads[по умолчанию — 3],
EnginesJetUserCommitSync [по умолчанию Да]
Дополнительные настройки: SystemDb[строка, путь к системной базе данных],
ReadOnly[двоичный, открывать ли в режиме только для чтения, 1 означает да, по умолчанию 0],
Эксклюзивный[двоичный файл, открывать ли в эксклюзивном режиме, 1 означает да, по умолчанию 0],
PWD [строка, пароль пользователя]
2. Excel (драйвер Microsoft Excel (*.xls))
DBQ[Excel97(=pathxxx.xls), 5.0/7.0(=pathxxx.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,
EnginesExcelImplicitCommitSync, EnginesExcelMaxScanRows[число, количество сканируемых строк, по умолчанию — 8],
EnginesExcelThreads, EnginesExcelUserCommitSync,
EnginesExcelFirstRowHasName[двоичный файл, является ли первая строка именем домена, 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,
EnginesXbaseImplicitCommitSync,
EnginesXbaseCollating[Строка, базис сортировки, может быть ASCII, международный, норвежско-датский,
шведско-финский],
EnginesXbaseDeleted[двоичный код, следует ли не отображать обратимо удаленные записи, 0 означает отображение, по умолчанию — 1],
EnginesXbasePageTimeout [по умолчанию 600], EnginesXbaseUserCommitSync,
EnginesXbaseThreads, EnginesXbaseStatistics [двоичный, использовать ли приблизительное количество строк, 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,
EnginesXbaseCollating[Строка, базис сортировки, может быть ASCII, международный],
EnginesXbaseDeleted[двоичный код, следует ли не отображать обратимо удаленные записи, 0 означает отображение, по умолчанию — 1],
EnginesXbasePageTimeout [по умолчанию 600], EnginesXbaseUserCommitSync,
EnginesXbaseThreads, EnginesXbaseStatistics [двоичный, использовать ли приблизительное количество строк, 1 — да, по умолчанию 0]
Примечание: (DriverId версий Foxpro2.5 и Foxpro2.6 различаются)
Превратите приведенную выше программу в элемент управления COM или ActiveX, который можно использовать во многих языках программирования высокого уровня, таких как DELPHI, C++Buider, VB, VC и PB.