[delphi] ODAC

2020-06-18

ODAC

Oracle Data Access Components (ODAC) 라이브러리는 Borland Delphi, C++ Builder and Kylix를 위해 약간의 비시각적 컴포넌트들을 제공합니다. Oracle RDBMS를 엑세스하기위해 제공됩니다. ODAC는 Borland Database Engine(BDE)에서 일반적으로 처리할 데이터 방법을 선택할 수 있습니다.

ODAC는 Oracle Call Interface (OCI)를 직접 사용합니다. Oracle Call 인터페이스는 application programming interface (API)입니다.Application programming interface(API)인 Oracle Call Interface는 3세대 언어의 원시 프로시져를 어플리케이션 개발자들이 사용하도록 도와줍니다. 그리고 Oracle 데이터베이스에 접근하기 위해 함수를 호출하고 SQL문을 실행의 모든 상태를 컨트롤 합니다.OCI는 보편적인 데이터베이스 라이브러리의 접근을 제공하며 동적 런타임 라이브러리의 폼안에서 복구 함수를 제공합니다.

ORA*.DLL는 어플리케이션안에서 링크할 수 있습니다.
또한 ODAC의 Net 옵션에서 Oracle 클라이언트 소프트웨어를 설치하지 않고 ODAC에 접속할 수 이도록 허용합니다. 작은 데이터베이스 어플리케이션을 실질적으로 만들기위해 ODAC는 단지 TCP/IP 프로토콜만을 필요로 합니다.

Oracle 지원 클라이언트/서버 어플리케이션 안에 있는 BDE의 사용은 약간의 결함을 가지고 있습니다.
BDE 커뮤니티의 결과에 따르면 서버의 특정기능을 사용할 수 없으며, 더많은 리소스를 사용하고, 데이터 처리의 속도를 저하시키며, 어플리케이션 배포를 방해합니다.

컴포넌트

ODAC는 다음의 컴포넌트들을 포함합니다.

TOraSession - 서버 커넥션을 제어

TOraQuery - 쿼리실행, 레코드셋 사용, 데이터베이스 테이블들의 유연성있는 업데이트

TSmartQuery - 쉬운 사용과 TOraQuery사용, INSERT, DELETE, UPDATE 쿼리 자동생성, 자동 잠금과 레코드 리프레싱

TOraSQL - SQL문 실행, PL/SQL 블록, 저장 프로시져

TOraTable - SQL문을 작성하지 않고 데이터 싱글 테이블의 업데이트 및 가져오기

TOraStoredProc - 저장 프로시져 와 함수의 실행, 파라미터로 되돌아온 커서 데이터를 수정허용

TOraNestedTable - nested 테이블의 데이터 제어

TOraProvider - 클라이언트 데이터셋으로부터 데이터 제공과 업데이트 적용

TOraScript - SQL과 PL/SQL문의 연속실행

TOraAlerter - 세션을 통해 메시지 전송 허용

TOraLoader - Oracle 데이터베이스에 빠른 데이터 로딩 제공

TOraSQLMonitor - ODAC에 기반한 어플리케이션에서 동적 SQL 실행 모니터링 허용

TOraErrorHandler - 에러메세지 설명

TBDESession - BDE에 기반한 어플리케이션 안에서 ODAC 컴포넌트들을 통합가능

TConnectDialog - 사용자이름,패스워드와 서버이름 입력 제공

TVirtualTable - 메모리안에서 데이터셋에 데이터 저장

활용법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
type
TOdacManager = class
private
Fcon: TOraSession;
FQry: TOraQuery;

procedure InitDBConnection();
procedure DeinitDBConnection();

public
constructor Create;
destructor Destroy; override;

procedure StartTransaction;
function InTransaction: Boolean;

procedure Commit;
procedure Rollback;

procedure KeepDBConnection;

property Qry: TOraQuery read FQry;
end;

procedure TOdacManager.Commit;
begin
FCon.Commit;
end;

constructor TOdacManager.Create;
begin
InitDBConnection;
end;

procedure TOdacManager.DeinitDBConnection;
begin
if Assigned(FQry) then
begin
FQry.Close;
FreeAndNil(FQry);
end;

if Assigned(FCon) then
begin
FCon.Close;
FreeAndNil(FCon);
end;
end;

destructor TOdacManager.Destory;
begin
DeinitDBConnection;

inherited;
end;

procedure TOdacManager.InitDBConnection;
var
sConnectString: String;
begin
FCon := TOraSession.Create(nil);
sConnectString := 'Direct=True;Host=10.2.220.43;Service Name=DEVGREEN;User ID=GREEN;Password=1234567890;Login Prompt=False';
Fcon.ConnectString = sConnectString;

FQry := TOraQuery.Create(nil);
FQry.Connection = FCon;

end;

procedure TOdacManager.InTransaction: Boolean;
begin
Result := FCon.InTransaction;
end;

procedure TOdacManager.KeepDBConnection;
begin
if not FCon.connected then
FCon.connected := True;
end;

procedure TOdacManager.Rollback;
begin
FCon.Rollback;
end;

procedure TOdacManager.StartTransaction;
begin
FCon.StartTransaction;
end;