ASP 매니아로서 저는 ASP 페이지에서 ADO 개체를 사용하여 ODBC 데이터베이스를 운영하는 경우가 많습니다. ASP를 사용하여 WEB 응용 프로그램 시스템을 만드는 것이 매우 편리하다고 생각합니다. 내 프로그래밍 경력에서 저자는 Borland 시리즈 제품을 선호하고 Microsoft 제품에 대해 약간 혐오감을 느끼지만 ASP에 대해서는 예외입니다. 어느 날, ADO 개체는 표준 OLE 개체인데, ADO를 사용하여 DELPHI 응용 프로그램에서 데이터베이스를 운영할 수 있으면 좋겠다는 생각이 들었습니다. 특히 DELPHI를 네트워크 데이터베이스 애플리케이션으로 사용하는 경우 WEB 사이트가 WINNT 사이트이고 ASP 페이지를 지원하는 경우 ADO 개체를 사용하면 이러한 대규모 BDE를 사이트에 업로드하지 않고도 ODBC 데이터베이스에 액세스할 수 있으므로 더 나은 ISAPI/NSAPI/CGI를 만들기 위한 DELPHI 및 ASP의 프로그래밍 이점.
----프로그래밍 및 테스트 후에는 ADO 개체를 사용하여 DELPHI의 ODBC 데이터베이스에 액세스할 수 있습니다. 이제 경험을 기록하고 ODBC 데이터베이스에 액세스하는 다른 방법을 알려드리겠습니다.
---- 32비트 DELPHI에서는 변형 변수(예: AVariant)를 선언한 다음 AVariant:=CreateOleObject('ADODB.Connection')와 같은 CreateOleObject를 통해 OLE 객체를 생성하여 데이터베이스 연결 개체, 그런 다음 개체의 메서드와 속성을 사용하여 ODBC 데이터베이스를 작동할 수 있습니다.
----다음은 ODBC 데이터베이스에 액세스하는 데 사용되는 ADO 개체와 해당 메서드 및 속성에 대한 간략한 소개입니다.
---- 1. 데이터베이스 연결 개체(ADODB.Connection)
---- 이 개체는 ODBC 데이터베이스와 연결을 설정하는 데 사용되며 데이터베이스에 대한 모든 작업은 이 연결을 통해 수행됩니다.
---- 데이터베이스 연결 개체 ADODB.Connection은 Delphi의 TDatabase 개체처럼 작동합니다.
---- 연결 개체를 설정하는 방법은 다음과 같습니다(AConnection은 Variant 유형 변수입니다).
---- AConnection:=CreateOleObject('ADODB.Connection')
---- 연결을 설정하는 데 사용되는 방법은 Open이며 사용 구문은 다음과 같습니다(예: AConnection 개체 사용).
---- AConnection.Open(ConnectionString, UserId, PassWord)
----세 매개변수는 모두 문자열 유형입니다. 여기서 UserId 및 Password는 액세스에 사용되는 사용자 이름 및 비밀번호입니다.
---- 데이터베이스에서 사용되며, ConnectionString에도 사용자 이름과 사용자 비밀번호를 지정할 수 있으므로 생략 가능합니다. ConnectionString은 ODBC 데이터 소스 정보를 설명하는 데 사용되는 문자열입니다. 형식은 다음과 같습니다.
'PROvider=공급자 이름;DSN=DSNName;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('드라이버={Microsoft Access Driver(*.mdb)};DBQ=C:inetpubwwwrootest.mdb')
---- ADODB.Connection을 구축한 후 작업 결과(삭제, 수정, 업데이트 등)를 반환할 필요가 없으면 이때 데이터베이스에 대한 일반적인 SQL 작업을 수행할 수 있습니다. ADODB.Connection 메소드 실행 사용법 구문은 다음과 같습니다.
AConnection.Execute( strSQL );
---- 그 중 strSQL은 작업을 수행하는 SQL 문입니다. 예를 들어 삭제 작업은 wfjcommu에서 삭제를 사용하여 데이터베이스 연결을 닫습니다.
---- 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: 긴 정수, 데이터 세트의 커서 유형, 선택적 매개변수, 프로그램의 설명을 참조하세요.
---- intLockType: 긴 정수, 데이터 테이블의 잠금 유형, 선택적 매개변수, 프로그램의 설명을 참조하십시오.
---- intCommandType: strCommand의 역할을 나타내는 데 사용되는 긴 정수, 명령(예: SQL 문), 데이터 테이블(TTable) 또는 저장 프로시저(StoredProc)로 지정할 수 있습니다. 선택적 매개변수에 대해서는 프로그램의 설명을 참조하세요.
---- SQL 쿼리를 실행하는 경우 다음 문을 사용할 수 있습니다.
ARecordSet.Open('wfjcommu에서 * 선택',adOpenStatic,adLockOptimistic,adCmdText);
---- TTable 및 TQuery와 비교한 기타 일반적인 속성 및 메서드는 다음과 같습니다(자세한 내용은 ASP 도움말 파일 참조).
eof,bof: eof,bof. MoveFirst, MoveLast: 첫 번째, LastMovePrevious, MoveNext: 이전, NextMove: MoveByAddNew: AppendUpdate: PostClose: 닫기
---- 삭제 + 업데이트: 삭제, 데이터 테이블에 대한 모든 수정은 작업을 효과적으로 수행하기 위해 업데이트를 사용해야 합니다. 이는 Delphi와 다릅니다.
필드[필드번호]:필드[필드번호]필드['필드이름']:FieldByName('필드이름')
---- 3. 기타 일반적인 개체(Delphi에 해당하는 개체):
----
ADODB.Field: TFieldADODB.매개 변수: TParaADODB.Error: EDBEngineErrorADODB.Command: 없음 ADODB.Property: 없음
---- 응용 사례를 살펴보겠습니다. 실제 사례를 직접 보는 것보다 다른 사람의 말을 듣는 것이 좋습니다. 이 예에서는 ADO 개체를 사용하여 데이터 테이블에서 레코드를 쿼리, 추가, 수정 및 삭제하는 방법을 보여줍니다. 구체적인 사용법은 프로그램 내 설명을 참조하시기 바랍니다. 델파이 데이터베이스 프로그래밍 경험이 있다면 이해하기 어렵지 않을 것입니다.
---- 이 예에서는 이름, 휴대폰 번호, 전화 번호를 나타내는 AName, Portable, Tel, BP 및 PostAddress의 5개 필드가 있는 wfjcommu라는 데이터 테이블이 사용되었습니다. 및 호출기 번호입니다.
----
절차 TForm1.Button1Click(Sender: TObject);{**************************************** *** ******************
---- ADO를 사용하여 ODBC 데이터베이스를 작동합니다. 이 프로그램에서는 MsAccess 데이터베이스를 가리키는 임시 ODBC 시스템 데이터 원본이 생성되고 그 안의 데이터 테이블이 표시, 추가, 수정, 삭제 및 쿼리됩니다. 참고: 사용을 클릭하십시오. 명령문에는 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;//수정 후 업데이트 시 단일 레코드로 잠금;//일괄 업데이트 시 레코드 잠금 var AConnection, ARecordSet: longintTemp: strTemp: intIndex: string; MsAccess 데이터베이스를 가리키고 이 DSN을 사용하여 데이터베이스 연결을 설정하는 ODBC 데이터 소스} 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 ); ARecordSet.eof가 아닌 경우 strTemp를 시작합니다:= 0 to ARecordSet.Fields . count - 1 do strTemp := strTemp + ARecordSet.Fields [intIndex].value+';';memo1.lines.add( strTemp );//다음 줄로 이동, 다음 end; ARecordSet.AddNew;//Add, Append ARecordSet.Fields [ 'AName'] := '1'; //FieldByName을 사용하여 ARecordSet.Fields['Portable']에 액세스합니다. '2'; ARecordSet.Fields(2) := '3'; //ARecordSet.Fields(3)에 액세스 := '4'; ARecordSet.Fields(4) := '5' 필드[색인] ; ARecordSet.Update;//업데이트, 게시 ARecordSet.MoveFirst;//첫 번째 항목으로 이동, First memo1.lines.add('********레코드 추가 후 데이터 테이블의 내용은 다음과 같습니다********') {ARecordSet이 아닌 동안 각 필드의 내용을 표시합니다. .eof do start strTemp := ';for intIndex := 0에서 ARecordSet.Fields.count - 1 do strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext; //다음 레코드로 이동 {마지막 레코드 수정} ARecordSet.Fields['AName'] := '11'; '휴대용'] := '22'; ARecordSet.Fields(2) := '33'; //Fields[index]로 ARecordSet.Fields(3)에 액세스:= '44'; ARecordSet.Fields(4) := '55';//업데이트, ARecordSet.MoveFirst;// 첫 번째 항목, 첫 번째 memo1.lines.add('********마지막 레코드를 수정한 후 데이터 테이블의 내용은 다음과 같습니다**********') {내용을 표시합니다. 각 필드의 } ARecordSet.eof do start 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;//업데이트, 델파이에서는 필요 없음 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( 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 start strTemp := '; for intIndex := 0 to ARecordSet.Fields.count - 1 do strTemp: = strTemp + ARecordSet.Fields [intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext;//다음 막대로 이동, 다음 끝; {데이터 세트 및 데이터베이스 연결 닫기} AConnection.close;end;