ASP 愛好家として、私は ASP ページで ADO オブジェクトを使用して ODBC データベースを操作することがよくありますが、ASP を使用して WEB アプリケーション システムを作成するのは非常に便利だと感じています。筆者はプログラミングのキャリアの中でBorlandシリーズの製品を好み、Microsoft製品には少し抵抗があるのですが、ASPだけは例外です。ある日、ADO オブジェクトは標準の OLE オブジェクトであり、DELPHI アプリケーションでデータベースを操作するために使用できたらいいのに、と思いつきました。特に DELPHI をネットワーク データベース アプリケーションとして使用する場合、WEB サイトが WINNT サイトで ASP ページをサポートしている場合、そのような大規模な BDE をサイトにアップロードせずに ADO オブジェクトを使用して ODBC データベースにアクセスできるため、Web サイトを完全に使用できます。より優れた ISAPI/NSAPI/CGI を作成するための DELPHI と ASP のプログラミングの利点。
----プログラミングとテストが完了すると、ADO オブジェクトを使用して DELPHI の ODBC データベースにアクセスできるようになります。次に、ODBC データベースにアクセスする別の方法を説明します。
---- 32 ビット DELPHI では、バリアント変数 (AVariant など) を宣言し、CreateOleObject を通じて OLE オブジェクト (AVariant:=CreateOleObject('ADODB.Connection') など) を作成して、データベース接続オブジェクトを作成すると、オブジェクトのメソッドとプロパティを使用して ODBC データベースを操作できます。
----以下は、ODBC データベースへのアクセスに使用される ADO オブジェクトとそのメソッドとプロパティの簡単な紹介です。
---- 1.データベース接続オブジェクト (ADODB.Connection)
---- このオブジェクトは ODBC データベースとの接続を確立するために使用され、データベースに対するすべての操作はこの接続を通じて実行されます。
---- データベース接続オブジェクト ADODB.Connection は、Delphi の TDatabase オブジェクトのように機能します。
---- 接続オブジェクトを確立するメソッドは次のとおりです (AConnection は Variant 型変数です)。
---- AConnection:=CreateOleObject('ADODB.Connection')
---- 接続を確立するために使用されるメソッドは Open で、使用構文は次のとおりです (オブジェクト AConnection を例にします)。
---- AConnection.Open(ConnectionString, UserId, PassWord)
----3 つのパラメータはすべて文字列タイプで、UserId と Password はアクセスに使用されるユーザー名とパスワードです。
---- データベースで使用する場合は、ConnectionString にユーザー名とユーザーパスワードも指定できるため省略できます。 ConnectionString は、ODBC データ ソース情報を記述するために使用される文字列です。その形式は次のとおりです。
'PROvider=プロバイダー名;DSN=DSN名;DRIVER=サーバー;UID=パスワード;
- - で:
---- プロバイダー: データプロバイダー、デフォルトは MSDASQL、Microsoft OLEDB、通常は省略されます
---- DSN: 開くデータベースに対応する OBDC システム データ ソース (DSN)。これはオプションのパラメータです。
---- DRIVER: アクセス対応など、データベースを開くために使用されるドライバー名
----Microsoft Access Driver(*.mdb)はオプションのパラメータです。
---- SERVER: 開くデータベースが存在するサーバーの名前。このマシン (ローカル) で使用でき、オプションのパラメーターです。
---- DATABASE: 開くデータベースの名前 (オプションのパラメータ)
---- UID: データベースへのアクセスに使用されるユーザー名はオプションのパラメータです
----PWD: データベースへのアクセスに使用されるユーザー パスワードはオプションのパラメータです。
---- 上記のパラメータはすべてオプションのパラメータですが、システム データ ソースを説明するには十分な情報を提供する必要があります。
---- MyDsn という名前の ODBC システム DSN が定義されている場合は、次のステートメントを使用してデータベース接続を確立できます。
----
AConnection.Open('DSN=MyDsn');
---- DSN が存在しない場合、またはその設定が他の人によって変更された場合にアプリケーション実行エラーを防ぐために、ADODB.Connection を使用して一時的な ODBC データ ソースを作成できます。これにより、システム DSN のパラメータ設定が確実に行われます。私たちが使っているのは正しいです。次のステートメントは、ACCESS データベースに対応する一時的な ODBC システム DSN を作成できます。パスは次のとおりです。
C:Inetpubwwwrootest.mdb AConnection.open('Driver={Microsoft Access Driver (*.mdb)};DBQ=C:inetpubwwwrootest.mdb')
---- ADODB.Connection の確立後、操作結果 (削除、変更、更新など) を返す必要がない場合は、データベースに対して通常の SQL 操作を実行できます。この時点では、別の SQL 操作を使用できます。 ADODB.Connection のメソッドを実行します。使用構文は次のとおりです。
AConnection.Execute( strSQL );
---- このうち、strSQL は操作を実行する SQL ステートメントです。たとえば、wfjcommu から削除する場合は、AConnection.Close を使用してデータベース接続を閉じます。
---- 2.データセットオブジェクト(ADODB.RecordSet)
---- クエリ操作を実行してクエリ結果を返したい場合、またはデータ テーブルをより便利に操作したい場合は、データ セット オブジェクトを使用する必要があります。
---- データ セット オブジェクト ADODB.RecordSet は、Delphi の TTable または TQuery オブジェクトのように機能します。
---- データセットオブジェクトを作成するメソッドは次のとおりです (ARecordSet は Variant 型変数です)。
----
ARecordSet:=CreateOleObject('ADODB.RecordSet')
---- データテーブルからデータを取得する方法は Open メソッドです。 具体的な使用方法は次のとおりです。
ARecordSet.Open( strCommand,ActiveConnection,intCursorType,intLockType,intCommandType);
---- その中には次のものがあります: strCommand: 文字列。これは、テーブル名、SQL ステートメント、またはサーバー上のストアド プロシージャ (StoredProc) 名です。 特定のパラメータ intCommandType を指定する必要があります。
---- ActiveConnection: 使用されるデータベース接続は ADODB.Connection オブジェクトです。
---- intCursorType:long integer、データセットのカーソルタイプ、オプションのパラメータ、プログラム内のコメントを参照してください。
---- intLockType:long integer、データテーブルのロックタイプ、オプションのパラメータはプログラム内のコメントを参照してください。
---- intCommandType: コマンド パラメーターの型である長整数。strCommand の役割を示すために使用されます。strCommand は、コマンド (SQL ステートメントなど)、データ テーブル (TTable)、またはストアド プロシージャ (StoredProc) として指定できます。オプションのパラメータについては、プログラム内のコメントを参照してください。
---- SQL クエリを実行する場合は、次のステートメントを使用できます。
ARecordSet.Open('wfjcommu から * を選択',adOpenStatic,adLockOptimistic,adCmdText);
---- TTable および TQuery と比較した他の一般的なプロパティとメソッドは次のとおりです (詳細については、ASP ヘルプ ファイルを参照してください)。
eof、bof: eof、bof。 MoveFirst、MoveLast: First、LastMovePrevious、MoveNext: Prior、NextMove: MoveByAddNew: appendUpdate: PostClose: close
---- 削除と更新: 削除。データ テーブルへのすべての変更は、操作を有効にするために更新を使用する必要があります。これは Delphi とは異なります。
フィールド[フィールド番号]:フィールド[フィールド番号]フィールド['フィールド名']:フィールドByName('フィールド名')
----3.その他の一般的なオブジェクト (Delphi に対応するオブジェクト):
----
ADODB.Field: TFieldADODB.Parameter: TParaADODB.Error: EDBEngineErrorADODB.Command: なし ADODB.Property: なし
---- 応用例を見てみましょう。実際の例を自分で見るよりも、他の人の意見を聞いたほうがよいでしょう。この例では、ADO オブジェクトを使用して、データ テーブルのクエリ、レコードの追加、レコードの変更、およびレコードの削除を行う方法を示します。具体的な使用法については、プログラム内のコメントを参照してください。Delphi データベース プログラミングの経験があれば、理解するのは難しくないと思います。
---- この例では、使用されるデータベースは Test.MDB です。wfjcommu というデータ テーブルには、名前、携帯電話番号、電話番号を表す AName、Portable、Tel、BP、PostAddress の 5 つのフィールドがあります。 、およびポケベル番号と通信アドレス。
----
プロシージャ TForm1.Button1Click(Sender: TObject);{*************************************** *****************
---- ADO を使用して ODBC データベースを操作します。このプログラムでは、MsAccess データベースを指す一時的な ODBC システム データ ソースが作成され、その中のデータ テーブルが表示、追加、変更、削除、クエリされます。注: [Uses] をクリックしてください。ステートメントには 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; //変更する場合は、単一のレコードに従ってロックします。 3;//変更後の更新時に単一レコードでロックする adLockBatchOptimistic = 4;//バッチで更新するときにレコードをロックする var AConnection, ARecordSet:variant; strTemp: integer;begin {一時ファイルを作成するODBC データ ソース。MsAccess データベースを指し、この DSN を使用してデータベース接続を確立します。} AConnection := CreateOleObject('ADODB.Connection'); AConnection.Open('Driver={Microsoft Access Driver (*.mdb)};DBQ=C:inetpubwwwrootest'); {データ セット オブジェクトを作成し、データ テーブルからデータを抽出します。 := CreateOleObject('ADODB.RecordSet'); ARecordSet.open( 'wfjcommu',AConnection, adOpenStatic,adLockOptimistic,adCmdTable ); memo1.lines.clear; memo1.lines.add('********データテーブルの元の内容は次のとおりです********');各フィールドのドメイン名を表示} strTemp := '; for intIndex := 0 ~ ARecordSet.Fields.count - 1 do strTemp := strTemp + ARecordSet.Fields[intIndex].name+';'; memo1.lines.add( strTemp ); ARecordSet.eof では intIndex := 0 を開始しません。 . count - 1 do strTemp := strTemp + ARecordSet.Fields [intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext;//次の行に移動、次の end; ARecordSet.AddNew;//追加、追加 ARecordSet.Fields [ 'AName'] := '1' // FieldByName を使用して ARecordSet.Fields['Portable'] にアクセスします := '2'; ARecordSet.Fields(2) := '3'; //Fields[index] の形式で ARecordSet.Fields(3) := '4' にアクセスします。 ; ARecordSet.Update;//更新、Post ARecordSet.MoveFirst;//最初の項目に移動、First memo1.lines.add('********レコード追加後のデータテーブルの内容は以下の通り********') 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; // 次のレコードに移動します。 'ポータブル'] := '22'; ARecordSet.Fields(2) := '33'; //ARecordSet.Fields(3) に Fields[index] := '44'; ARecordSet.Fields(4) := '55'; ARecordSet.Update;//Update, Post ARecordSet.MoveFirst;// に移動します。 first item, First memo1.lines.add('********最終レコード変更後のデータテーブルの内容は以下の通り************');各フィールドの内容 } ではありませんが、 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.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.value+';';memo1.lines.add( strTemp ); /次のバーに移動、次の終了 ARecordSet.Close;{データ セットを閉じる} {SQL ステートメントを使用してクエリを実行し、「Zhang San」という名前のレコードをクエリします} {SQL ステートメントでは、文字列を一重引用符で囲む必要があることに注意してください} ARecordSet.open( 'select * from wfjcommu where AName = 'Zhang San' ', AConnection,adOpenStatic,adLockOptimistic, adCmdText ); memo1.lines.add('********張三氏の内容は以下の通り********'); + IntToStr ( ARecordSet.RecordCount ) + '一致するレコード' ); {各フィールドの内容を表示} ただし、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;// 次のバーに移動します。 {データ セットとデータベース接続を閉じます} ARecordSet.close;end;