Как энтузиаст ASP, я часто использую объекты ADO на страницах ASP для работы с базами данных ODBC. Я считаю, что ASP очень удобно использовать для создания систем веб-приложений. Хотя в моей карьере программиста автор отдает предпочтение продуктам серии Borland и немного отталкивает продукты Microsoft, исключением является ASP. Однажды мне пришла в голову идея. Объект ADO — это стандартный объект OLE. Было бы здорово, если бы ADO можно было использовать для управления базой данных в приложении DELPHI. Особенно при использовании DELPHI в качестве приложения сетевой базы данных, если WEB-сайт является сайтом WINNT и поддерживает страницы ASP, вы можете использовать объекты ADO для доступа к базе данных ODBC, не загружая на сайт такой большой BDE, чтобы вы могли полностью использовать преимущества программирования DELPHI и ASP для улучшения ISAPI/NSAPI/CGI.
----После программирования и тестирования вы можете успешно использовать объекты ADO для доступа к базе данных ODBC в DELPHI. Теперь я запишу свой опыт и поделюсь им с вами. Давайте рассмотрим другой способ доступа к базе данных ODBC.
---- В 32-битном DELPHI вы можете объявить вариантную переменную (например, AVariant), а затем создать объект OLE с помощью CreateOleObject, например AVariant:=CreateOleObject('ADODB.Connection'), чтобы получить экземпляр объект подключения к базе данных. Затем вы можете использовать методы и свойства объекта для работы с базой данных ODBC.
---- Ниже приводится краткое введение в объекты ADO, используемые для доступа к базам данных ODBC, а также их методы и свойства.
---- 1. Объект подключения к базе данных (ADODB.Connection)
---- Этот объект используется для установления соединения с базой данных ODBC, и все операции с базой данных выполняются через это соединение.
---- Объект подключения к базе данных ADODB.Connection функционирует аналогично объекту TDatabase в Delphi.
---- Метод установления объекта соединения (AConnection — переменная типа Variant):
---- AConnection:=CreateOleObject('ADODB.Connection')
---- Для установления соединения используется метод Open, синтаксис использования следующий (в качестве примера возьмем объект AConnection):
---- AConnection.Open(ConnectionString, UserId, PassWord)
----Все три параметра имеют строковый тип, где UserId и Password — это имя пользователя и пароль, используемые для доступа.
---- Используется в базе данных, его можно опустить, поскольку имя пользователя и пароль пользователя также могут быть указаны в ConnectionString. ConnectionString — это строка, используемая для описания информации об источнике данных ODBC. Ее формат:
'PRovider=Имя_провайдера;DSN=DSNName;DRIVER=драйвер; БАЗА ДАННЫХ=база данных; PWD=пароль'
---- в:
---- Поставщик: поставщик данных, по умолчанию — MSDASQL, Microsoft OLEDB, обычно опускается.
---- DSN: системный источник данных OBDC (DSN), соответствующий открываемой базе данных, который является необязательным параметром.
---- ДРАЙВЕР: Имя драйвера, используемое для открываемой базы данных, например, соответствующий доступ.
----Microsoft Access Driver(*.mdb) — необязательный параметр.
---- СЕРВЕР: Имя сервера, на котором расположена открываемая база данных. Оно доступно на этом компьютере (локальном) и является необязательным параметром.
---- БАЗА ДАННЫХ: имя открываемой базы данных, необязательный параметр.
---- UID: Имя пользователя, используемое для доступа к базе данных, является необязательным параметром.
----PWD: пароль пользователя, используемый для доступа к базе данных, является необязательным параметром.
---- Все приведенные выше параметры являются необязательными, однако необходимо предоставить достаточную информацию для описания системного источника данных.
---- Если определен системный DSN ODBC с именем MyDsn, то для установки соединения с базой данных можно использовать следующий оператор:
----
AConnection.Open('DSN=MyDsn');---- Чтобы предотвратить ошибки запуска приложения, когда DSN не существует или его настройки изменены другими, вы можете использовать ADODB.Connection для создания временного источника данных ODBC. Это может гарантировать, что настройки параметров системного DSN. мы используем правильные. Следующий оператор может создать временный системный DSN ODBC, соответствующий базе данных ACCESS, путь:
C:Inetpubwwwrootest.mdb AConnection.open('Driver={Microsoft Access Driver (*.mdb)};DBQ=C:inetpubwwwrootest.mdb')---- После установления соединения ADODB.Connection, если вам не нужно возвращать результаты операций (например, удаление, изменение, обновление и т. д.), вы можете выполнять обычные операции SQL с базой данных. В это время используйте другое. метод Выполнение ADODB.Connection Синтаксис использования:
AConnection.Execute(strSQL);
---- Среди них strSQL — это оператор SQL для выполнения операции. Например, операция удаления может быть следующей: удалить из wfjcommu. Используйте AConnection.Close, чтобы закрыть соединение с базой данных.
---- 2. Объект набора данных (ADODB.RecordSet)
---- Если вы хотите выполнять операции запроса и возвращать результаты запроса или хотите более удобно работать с таблицей данных, вам необходимо использовать объект набора данных.
---- Объект набора данных ADODB.RecordSet функционирует как объект TTable или TQuery в Delphi.
---- Метод создания объекта набора данных (ARecordSet — переменная типа Variant):
----
ARecordSet:=CreateOleObject('ADODB.RecordSet')---- Метод получения данных из таблицы данных — открытый метод. Конкретный метод использования:
ARecordSet.Open( strCommand, ActiveConnection, intCursorType, intLockType, intCommandType);
---- Среди них: strCommand: строка, которая является параметром команды. Это может быть имя таблицы, инструкция SQL или имя хранимой процедуры (StoredProc) на сервере. Необходимо указать конкретный параметр intCommandType.
---- ActiveConnection: используемое соединение с базой данных представляет собой объект ADODB.Connection.
---- intCursorType: длинное целое число, тип курсора набора данных, необязательные параметры, смотрите комментарии в программе.
---- intLockType: длинное целое число, тип блокировки таблицы данных, необязательные параметры, смотрите комментарии в программе.
---- intCommandType: длинное целое число, тип параметра команды, используемый для указания роли strCommand. Вы можете указать strCommand как команду (например, инструкцию SQL), таблицу данных (TTable) или хранимую процедуру (StoredProc). Дополнительные параметры см. в комментариях к программе.
---- Если вы выполняете SQL-запрос, вы можете использовать следующий оператор:
ARecordSet.Open('Выберите * из wfjcommu',adOpenStatic,adLockOptimistic,adCmdText);---- Другие общие свойства и методы по сравнению с TTable и TQuery следующие (подробности см. в файле справки ASP):
эоф,боф: эоф,боф. MoveFirst, MoveLast: First, LastMovePrevious, MoveNext: Prior, NextMove: MoveByAddNew: AppendUpdate: PostClose: закрыть
---- Удалить плюс обновление: удалить, все изменения в таблице данных должны использовать обновление, чтобы сделать операцию эффективной, в отличие от Delphi.
Поля[FieldNo]: Поля[FieldNo]Поля['FieldName']: FieldByName('FieldName')---- 3. Другие общие объекты (объекты, соответствующие Delphi):
----
ADODB.Поле: TFieldADODB.Параметр: TParaADODB.Ошибка: EDBEngineErrorADODB.Команда: Нет ADODB.Свойство: Нет
---- Давайте рассмотрим пример приложения. Лучше услышать, что говорят другие, чем увидеть реальный пример самостоятельно. В этом примере мы продемонстрируем, как использовать объекты ADO для запроса, добавления записей, изменения записей и удаления записей в таблице данных. Пожалуйста, обратитесь к комментариям к программе для конкретного использования. Если у вас есть некоторый опыт программирования баз данных Delphi, я думаю, это нетрудно понять.
---- В нашем примере используется база данных Test.MDB. Существует таблица данных wfjcommu, которая имеет пять полей: AName, Portable, Tel, BP и PostAddress, которые представляют имя, номер мобильного телефона и номер телефона. и номер пейджера соответственно и адрес для корреспонденции.
----
процедура TForm1.Button1Click(Отправитель: TObject);{*************************************** *** ****************---- Используйте ADO для работы с базой данных ODBC. В этой программе будет создан временный системный источник данных ODBC, указывающий на базу данных MsAccess, а затем таблицы данных в нем будут отображаться, добавляться, изменяться, удаляться и запрашиваться. Примечание. Нажмите «Использует». Оператор содержит модуль ComObj.
**************************************************** * ***}const{ Некоторые объявления констант, подробности см. на adovbs.inc }{ ---- Описание константы CommandType ---- } adCmdUnknown = 0008;//Неизвестно, должно оцениваться системой, медленно , значение по умолчанию adCmdText = 0001; //Командный оператор, например оператор SQL adCmdTable = 0002;//Имя таблицы данных adCmdStoredProc = 0004;//Имя хранимой процедуры {---- Постоянное описание CursorType---- } adOpenForwardOnly = 0;//Доступ возможен только в одном направлении спереди назад, то есть значение по умолчанию adOpenKeyset = 1 //Изменения данных, внесенные другими пользователями, видны, но добавления и удаления, внесенные другими пользователями, не видны adOpenDynamic = 2;//Добавление, изменение и удаление данных другими пользователями видно adOpenStatic = 3;//Добавление, изменение и удаление данных другими пользователями не видно {---- Постоянное описание LockType---} adLockReadOnly = 1; //Только чтение, значение по умолчанию adLockPessimistic = 2 //При изменении блокировка по одной записи adLockOptimistic =; 3;//Блокировать одной записью при обновлении после модификации adLockBatchOptimistic = 4;//Блокировать запись при пакетном обновлении var AConnection, ARecordSet: вариант; longintTemp: целое число; strTemp: string; intIndex: целое число; начать {Создать временный файл Источник данных ODBC, указывающий на базу данных MsAccess и использующий этот DSN для установления соединения с базой данных} AConnection := CreateOleObject('ADODB.Connection'); AConnection.Open('Driver={Microsoft Access Driver (*.mdb)};DBQ=C:inetpubwwwrootest'); {Создайте объект набора данных и извлеките данные из таблицы данных} ARecordSet := CreateOleObject('ADODB.RecordSet'); ARecordSet.open('wfjcommu',AConnection, adOpenStatic,adLockOptimistic,adCmdTable ); memo1.lines.clear; memo1.lines.add('********Исходное содержимое таблицы данных следующее********'); Отображение имени домена каждого поля} strTemp := '; for intIndex := 0 to ARecordSet.Fields.count - 1 do strTemp := strTemp + ARecordSet.Fields[intIndex].name+';'; memo1.lines.add( strTemp ); while not ARecordSet.eof do Begin strTemp := '; for intIndex := 0 to ARecordSet.Fields . count - 1 do strTemp := strTemp + ARecordSet.Fields [intIndex].value+';';memo1.lines.add( strTemp ); //Перейти к следующей строке, Next end; {Добавить запись} ARecordSet.AddNew;//Добавить, добавить ARecordSet.Fields [ 'AName'] := '1'; //Доступ к ARecordSet.Fields['Portable'] с помощью FieldByName := '2'; ARecordSet.Fields(2) := '3'; //Доступ к ARecordSet.Fields(3) := '4'; ARecordSet.Fields(4) := '5' в форме Fields[index] ; ARecordSet.Update;//Обновить, отправить ARecordSet.MoveFirst;//Перейти к первому элементу, First memo1.lines.add('********Содержимое таблицы данных после добавления записи выглядит следующим образом********'); {отобразить содержимое каждого поля}, пока не ARecordSet. .eof do Begin strTemp := ';for intIndex := 0 до ARecordSet. Fields.count - 1 do strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext; //Перейти к следующей записи, Next end; {Изменить последнюю запись} ARecordSet.Fields['AName'] := '11'; //Доступ к ARecordSet с помощью FieldByName Fields[. 'Портативный'] := '22'; ARecordSet.Fields(2) := '33'; //Доступ к ARecordSet.Fields(3) как Fields[index] := '44'; ARecordSet.Fields(4) := '55'; ARecordSet.Update;//Обновить, опубликовать ARecordSet.MoveFirst;// Перейти к первый элемент, First memo1.lines.add('********Содержимое таблицы данных после изменения последней записи выглядит следующим образом************'); содержимое каждого поля } пока не ARecordSet.eof do Begin strTemp := ';for intIndex := 0 до ARecordSet.Fields.count - 1 do strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext;//Перейти к следующей записи, Next end {Удалить последнюю запись} ARecordSet.MoveLast;//Перейти на последнюю строку, Last ARecordSet.delete;//Удалить, удалить ARecordSet.Update;//Обновить, в Delphi не требуется ARecordSet.MoveFirst;//Перейти на первую строку, First memo1.lines .add('********Содержимое таблицы данных после удаления последней записи выглядит следующим образом********' {Отобразить содержимое каждого поля}, пока не ARecordSet.eof. начинай strTemp := '; for intIndex := 0 to ARecordSet.Fields.count - 1 do strTemp := strTemp + ARecordSet. Fields[intIndex].value+';';memo1.lines.add( ARecordSet.MoveNext;/ /Перейти к следующему бару, Next end ARecordSet.Close;{Закрыть набор данных}; {Используйте оператор SQL для запроса, запросите записи с именем "Чжан Сан"} {Обратите внимание, что в операторе SQL строка должна быть заключена в одинарные кавычки} ARecordSet.open( 'select * from wfjcommu где AName = 'Чжан Сан' ', AConnection,adOpenStatic,adLockOptimistic, adCmdText ); memo1.lines.add('********Содержимое Чжан Сан выглядит следующим образом********'); memo1.lines.add( 'Итого '); + IntToStr ( ARecordSet.RecordCount ) + 'соответствующие записи' ); {отображать содержимое каждого поля} while not ARecordSet.eof do Begin strTemp := '; for intIndex := 0 to ARecordSet.Fields.count - 1 do strTemp : = strTemp + ARecordSet.Fields [intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext;//Перейти к следующему бару, Next end {Закрыть набор данных и соединение с базой данных} ARecordSet.close;end;