PageRenderTime 58ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/EndTask/2008.04.16 ?????/Oracle Data Access Components(ODAC) v6/Source/Ora.pas

http://xinhaining-dianjianyiqi-tongxunchengxu.googlecode.com/
Pascal | 1895 lines | 1387 code | 344 blank | 164 comment | 0 complexity | 71b7f3352559866357afc8cf587bcc65 MD5 | raw file
Possible License(s): GPL-3.0

Large files files are truncated, but you can click here to view the full file

  1. //////////////////////////////////////////////////
  2. // Oracle Data Access Components
  3. // Copyright (c) 1998-2006 Core Lab. All right reserved.
  4. // Oracle DataSet
  5. // Created: 05.03.98
  6. // Last modified: 21.02.03
  7. //////////////////////////////////////////////////
  8. {$IFNDEF CLR}
  9. {$I Odac.inc}
  10. {$R-} // for ftBFile
  11. unit Ora;
  12. {$ENDIF}
  13. interface
  14. uses
  15. {$IFDEF CLR}
  16. Windows, SysUtils, Classes, Variants, System.IO, System.XML, System.Text,
  17. {$ENDIF}
  18. {$IFDEF WIN32}
  19. Windows, SysUtils, Classes, StdVcl, CLRClasses, CRXml,
  20. {$ENDIF}
  21. {$IFDEF LINUX}
  22. SysUtils, Classes, CLRClasses, CRXml,
  23. {$ENDIF}
  24. {$IFDEF NET}OraNet, {$ENDIF}
  25. {$IFDEF VER6P}SqlTimSt, {$ENDIF}
  26. MemUtils, DB, MemData, MemDS, CRAccess, DBAccess, CRConnectionPool, OraCall, OraClasses,
  27. OraError, OraObjects, OraConnectionPool;
  28. {$IFDEF NET}
  29. {$NOINCLUDE OraNet}
  30. {$ENDIF}
  31. {$I OdacVer.inc}
  32. const
  33. ftObject = ftADT;
  34. ftTable = ftDataSet;
  35. ftBFile = 100;
  36. ftLabel = 101;
  37. {$IFNDEF VER6P}
  38. ftTimeStamp = 102;
  39. {$ENDIF}
  40. ftIntervalYM = 103;
  41. ftIntervalDS = 104;
  42. ftTimeStampTZ = 105;
  43. ftTimeStampLTZ = 106;
  44. ftNumber = 107;
  45. ftXML = 108;
  46. ftFixedWideChar = 109;
  47. DEFAULT_TRACE_FILE_SIZE = 0;
  48. UNLIMITED_TRACE_FILE_SIZE = -1;
  49. type
  50. TOraSession = class;
  51. TOraDataSet = class;
  52. TOraSQL = class;
  53. TOraUpdateSQL = class;
  54. TOraParam = class;
  55. TOraParams = class;
  56. TSubFieldType = (stNone, stOraBlob, stOraClob);
  57. TCharLength = 0..6;
  58. { TOraSession }
  59. TConnectChangeEvent = procedure (Sender: TObject; Connected: boolean) of object;
  60. TFailoverState = (fsEnd, fsAbort, fsReauth, fsBegin, fsError);
  61. TFailoverType = (ftNone, ftSession, ftSelect, ftTransaction);
  62. TFailoverEvent = procedure (Sender: TObject; FailoverState: TFailoverState; FailoverType: TFailoverType; var Retry: boolean) of object;
  63. TOptimizerMode = (omDefault, omFirstRows1000, omFirstRows100, omFirstRows10, omFirstRows1, omFirstRows, omAllRows, omChoose, omRule);
  64. TOraSessionOptions = class (TDAConnectionOptions)
  65. private
  66. FUseOCI7: boolean;
  67. FDirect: boolean;
  68. FEnableIntegers: boolean;
  69. FIsDateLanguageStored: boolean;
  70. FIsDateFormatStored: boolean;
  71. FEnableNumbers: boolean;
  72. FCharLength: TCharLength;
  73. FCharset: string;
  74. FUseUnicode: boolean;
  75. FDateFormat: string;
  76. FDateLanguage: string;
  77. FOptimizerMode: TOptimizerMode;
  78. FConnectionTimeout: integer;
  79. FStatementCache: boolean;
  80. FStatementCacheSize: integer;
  81. FClientIdentifier: string;
  82. function GetCharLength: TCharLength;
  83. procedure SetCharLength(Value: TCharLength);
  84. procedure SetCharset(Value: string);
  85. procedure SetUseUnicode(Value: boolean);
  86. function GetDateLanguage: string;
  87. procedure SetDateLanguage(Value: string);
  88. function GetDateFormat: string;
  89. procedure SetDateFormat(Value: string);
  90. procedure SetEnableIntegers(Value: boolean);
  91. procedure SetEnableNumbers(Value: boolean);
  92. function GetConvertEOL: boolean;
  93. procedure SetConvertEOL(Value: boolean);
  94. procedure SetNeverConnect(Value: boolean);
  95. function GetNeverConnect: boolean;
  96. procedure SetUseOCI7(Value: boolean);
  97. function GetNet: boolean;
  98. procedure SetNet(Value: boolean);
  99. procedure SetDirect(Value: boolean);
  100. procedure SetOptimizerMode(Value: TOptimizerMode);
  101. procedure SetStatementCache(Value: boolean);
  102. procedure SetStatementCacheSize(Value: integer);
  103. procedure SetClientIdentifier(const Value: string);
  104. protected
  105. procedure AssignTo(Dest: TPersistent); override;
  106. procedure SetDisconnectedMode(Value: boolean); override;
  107. public
  108. constructor Create(Owner: TCustomDAConnection);
  109. {$IFNDEF NET}
  110. property Net: boolean read GetNet write SetNet default False; // obsolete
  111. property Direct: boolean read FDirect write SetDirect default False;
  112. {$ENDIF}
  113. published
  114. property CharLength: TCharLength read GetCharLength write SetCharLength default 1;
  115. property Charset: string read FCharset write SetCharset;
  116. property UseUnicode: boolean read FUseUnicode write SetUseUnicode default False;
  117. property ConvertEOL: boolean read GetConvertEOL write SetConvertEOL default False;
  118. property DateFormat: string read GetDateFormat write SetDateFormat stored FIsDateFormatStored;
  119. property DateLanguage: string read GetDateLanguage write SetDateLanguage stored FIsDateLanguageStored;
  120. property EnableIntegers: boolean read FEnableIntegers write SetEnableIntegers default True;
  121. property EnableNumbers: boolean read FEnableNumbers write SetEnableNumbers default False;
  122. property NeverConnect: boolean read GetNeverConnect write SetNeverConnect stored False default False;// obsolete
  123. property UseOCI7: boolean read FUseOCI7 write SetUseOCI7 default False;
  124. property DisconnectedMode;
  125. property KeepDesignConnected;
  126. property LocalFailover;
  127. property OptimizerMode: TOptimizerMode read FOptimizerMode write SetOptimizerMode default omDefault;
  128. property ConnectionTimeout: integer read FConnectionTimeout write FConnectionTimeout default 0;
  129. property StatementCache: boolean read FStatementCache write SetStatementCache default False;
  130. property StatementCacheSize: integer read FStatementCacheSize write SetStatementCacheSize default 20;
  131. property ClientIdentifier: string read FClientIdentifier write SetClientIdentifier;
  132. {$IFDEF NET}
  133. property Net: boolean read GetNet write SetNet stored False default False; // obsolete
  134. property Direct: boolean read FDirect write SetDirect default False;
  135. {$ENDIF}
  136. end;
  137. TOraPoolingOptions = class(TPoolingOptions)
  138. private
  139. FPoolingType: TOraPoolingType;
  140. FProxyUsername: string;
  141. FProxyPassword: string;
  142. procedure SetPoolingType(Value: TOraPoolingType);
  143. procedure SetProxyUsername(Value: string);
  144. procedure SetProxyPassword(Value: string);
  145. public
  146. constructor Create(Owner: TCustomDAConnection); override;
  147. published
  148. property PoolType: TOraPoolingType read FPoolingType write SetPoolingType default optLocal;
  149. property ProxyUsername: string read FProxyUsername write SetProxyUsername;
  150. property ProxyPassword: string read FProxyPassword write SetProxyPassword;
  151. end;
  152. { TOraTrace }
  153. {$IFNDEF STD}
  154. TSqlTraceMode = set of (smBasicStatistics, smTypicalStatistics, smAllStatistics,
  155. smBindVariables, smWaitEvents, smTimedStatistics);
  156. TPlSqlTraceMode = set of (pmAllCalls, pmEnabledCalls, pmAllExceptions, pmEnabledExceptions,
  157. pmAllSql, pmEnabledSql, pmAllLines, pmEnabledLines);
  158. TTraceState = set of (tsSqlTrace, tsPlSqlTrace);
  159. TOraTrace = class(TComponent)
  160. private
  161. FSession: TOraSession;
  162. FEnabled: boolean;
  163. FPlSqlTraceMode: TPlSqlTraceMode;
  164. FSqlTraceMode: TSqlTraceMode;
  165. FPlSqlTraceActive: boolean;
  166. FSqlTraceActive: boolean;
  167. FTraceFileIdentifier: string;
  168. FMaxTraceFileSize: integer;
  169. function GetState: TTraceState;
  170. procedure SetSession(Value: TOraSession);
  171. procedure SetEnabled(Value: boolean);
  172. procedure SetTraceFileIdentifier(const Value: string);
  173. procedure SetMaxTraceFileSize(Value: integer);
  174. procedure SetSqlTraceMode(Value: TSqlTraceMode);
  175. protected
  176. FDesignCreate: boolean;
  177. procedure Loaded; override;
  178. procedure InternalSetTraceFileIdentifier;
  179. procedure InternalSetMaxTraceFileSize;
  180. procedure InternalSetSqlTraceMode;
  181. procedure StartTrace;
  182. procedure StopTrace;
  183. public
  184. constructor Create(AOwner: TComponent); override;
  185. destructor Destroy; override;
  186. //DbmsTrace
  187. procedure PlSqlTraceStart;
  188. procedure PlSqlTraceStop;
  189. procedure PlSqlTracePause;
  190. procedure PlSqlTraceResume;
  191. procedure PlSqlTraceComment(const Comment: string);
  192. procedure PlSqlTraceLimit(Limit: integer = 8192);
  193. function PlSqlTraceRunNumber: integer;
  194. //SQLTrace
  195. procedure SqlTraceStart;
  196. procedure SqlTraceStop;
  197. function GetTraceFileName: string;
  198. function GetSessionPID: integer;
  199. property State: TTraceState read GetState;
  200. published
  201. property Session: TOraSession read FSession write SetSession;
  202. property Enabled: boolean read FEnabled write SetEnabled default True;
  203. property SqlTraceMode: TSqlTraceMode read FSqlTraceMode write SetSqlTraceMode
  204. default [smTypicalStatistics, smTimedStatistics];
  205. property PlSqlTraceMode: TPlSqlTraceMode read FPlSqlTraceMode write FPlSqlTraceMode default [];
  206. property TraceFileIdentifier: string read FTraceFileIdentifier write SetTraceFileIdentifier;
  207. property MaxTraceFileSize: integer read FMaxTraceFileSize write SetMaxTraceFileSize default DEFAULT_TRACE_FILE_SIZE;
  208. end;
  209. {$ENDIF}
  210. TOraSession = class (TCustomDAConnection)
  211. private
  212. FDebug: boolean;
  213. FOraSQL: TOraSQL;
  214. FOptions: TOraSessionOptions;
  215. FPoolingOptions: TOraPoolingOptions;
  216. FHomeName: string;
  217. FThreadSafety: boolean;
  218. FConnectMode: TConnectMode;
  219. FOCICallStyle: TOCICallStyle;
  220. FOnConnectChange: TConnectChangeEvent; // obsolete
  221. FInternalName: string;
  222. FFailoverEvent: TFailoverEvent;
  223. FSchema : string;
  224. FCachedSchema: string;
  225. FProxySession : TOraSession;
  226. {$IFNDEF STD}
  227. FTrace: TOraTrace;
  228. {$ENDIF}
  229. procedure SetThreadSafety(Value: boolean);
  230. function GetOracleVersion: string;
  231. function GetSQL: TOraSQL; virtual;
  232. procedure SetDebug(Value: boolean);
  233. function GetLDA: PLDA;
  234. function GetOCISvcCtx: pOCISvcCtx;
  235. procedure SetOCISvcCtx(Value: pOCISvcCtx);
  236. function GetOCICallStyle: TOCICallStyle;
  237. procedure SetOCICallStyle(Value: TOCICallStyle);
  238. procedure SetOptions(Value: TOraSessionOptions);
  239. procedure SetPoolingOptions(Value: TOraPoolingOptions);
  240. function GetLastError: integer;
  241. procedure SetLastError(Value: integer);
  242. procedure SetHomeName(Value: string);
  243. function GetHome: TOracleHome;
  244. procedure SetHome(Value: TOracleHome);
  245. function GetConnectPrompt: boolean;
  246. procedure SetConnectPrompt(Value: boolean);
  247. procedure SetConnectMode(Value: TConnectMode);
  248. function GetSchema : string;
  249. procedure SetSchema (Value : string);
  250. procedure SetCurrentSchema(SchemaName : string);
  251. function GetCurrentSchema : string;
  252. function GetDefaultSchema : string;
  253. function IsSchemaStored : boolean;
  254. function GetProxySession : TOraSession;
  255. procedure SetProxySession (Value : TOraSession);
  256. procedure SetInternalName(const AValue: string);
  257. procedure GetObjectList(List: TStrings; SQL: string);
  258. procedure CheckDirect;
  259. procedure SetClientIdentifier(const Value: string);
  260. {$IFNDEF STD}
  261. procedure SetTrace(Value: TOraTrace);
  262. {$ENDIF}
  263. protected
  264. FIConnection: TOCIConnection;
  265. {$IFDEF MSWINDOWS}
  266. FChangeNotifications: TDAList;
  267. {$ENDIF}
  268. procedure CreateIConnection; override;
  269. function GetIConnectionClass: TCRConnectionClass; override;
  270. function GetICommandClass: TCRCommandClass; override;
  271. function GetIRecordSetClass: TCRRecordSetClass; override;
  272. function GetOCIConnection: TOCIConnection;
  273. procedure SetIConnection(Value: TCRConnection); override;
  274. procedure DoConnect; override;
  275. procedure DoDisconnect; override;
  276. procedure AssignTo(Dest: TPersistent); override;
  277. function IsFatalError(E: EDAError): boolean; override;
  278. function IsKeyViolation(E: EDAError): boolean; override;
  279. function GetCompilationError(SQL: string): string;
  280. function SQLMonitorClass: TClass; override;
  281. function ConnectDialogClass: TConnectDialogClass; override;
  282. function CreateOptions: TDAConnectionOptions; override;
  283. function CreatePoolingOptions: TPoolingOptions; override;
  284. function GetTransactionID: string; override;
  285. function LocalTransactionId(CreateTransaction: boolean = False): string;
  286. function GetInTransaction: boolean; override;
  287. procedure SetConnected(Value: boolean); override;
  288. function GetConnectString: string; override;
  289. procedure SetConnectString(Value: string); override;
  290. procedure DoOnFailover(FailoverState: cardinal; FailoverType: cardinal; var Retry: boolean);
  291. function GetCachedSchema: string;
  292. procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  293. procedure SetOptimizerMode(Value: TOptimizerMode);
  294. {$IFNDEF STD}
  295. property Trace: TOraTrace read FTrace write SetTrace;
  296. {$ENDIF}
  297. public
  298. constructor Create(Owner: TComponent); override;
  299. destructor Destroy; override;
  300. { Transaction control }
  301. procedure StartTransaction; overload; override;
  302. procedure StartTransaction(IsolationLevel: TOraIsolationLevel; const RollbackSegment: string = ''; const Name: string = ''); reintroduce; overload;
  303. procedure Savepoint(const Savepoint: string);
  304. procedure RollbackToSavepoint(const Savepoint: string);
  305. function ParamByName(Name: string): TOraParam;
  306. function ExecSQL(Text: string; const Params: array of variant): variant; override;
  307. function ExecProc(Name: string; const Params: array of variant): variant;
  308. function ExecSQLEx(Text: string; const Params: array of variant): variant;
  309. function ExecProcEx(Name: string; const Params: array of variant): variant;
  310. procedure Ping;
  311. procedure ClearStatementCache;
  312. procedure AssignConnect(Source: TOraSession);
  313. function CreateDataSet: TCustomDADataSet; override;
  314. function CreateSQL: TCustomDASQL; override;
  315. procedure ChangePassword(NewPassword: string);
  316. procedure GetTableNames(List: TStrings); overload; override;
  317. procedure GetTableNames(List: TStrings; AllTables: boolean); reintroduce; overload;
  318. procedure GetStoredProcNames(List: TStrings); overload; override;
  319. procedure GetStoredProcNames(List: TStrings; AllProcs: boolean); reintroduce; overload;
  320. procedure GetSequenceNames(List: TStrings);
  321. property LDA: PLDA read GetLDA;
  322. property OCISvcCtx: pOCISvcCtx read GetOCISvcCtx write SetOCISvcCtx;
  323. property OCICallStyle: TOCICallStyle read GetOCICallStyle write SetOCICallStyle;
  324. property LastError: integer read GetLastError write SetLastError;
  325. property OracleVersion: string read GetOracleVersion;
  326. property SQL: TOraSQL read GetSQL;
  327. property OraSQL: TOraSQL read GetSQL; // for back compatibility
  328. property InternalName: string read FInternalName write SetInternalName;
  329. property ProxySession : TOraSession read GetProxySession write SetProxySession;
  330. published
  331. property Debug: boolean read FDebug write SetDebug default False;
  332. property ThreadSafety: boolean read FThreadSafety write SetThreadSafety default True;
  333. property ConnectPrompt: boolean read GetConnectPrompt write SetConnectPrompt stored False default True; //obsolette
  334. property ConnectMode: TConnectMode read FConnectMode write SetConnectMode default cmNORMAL;
  335. property Options: TOraSessionOptions read FOptions write SetOptions;
  336. property PoolingOptions: TOraPoolingOptions read FPoolingOptions write SetPoolingOptions;
  337. property Pooling;
  338. property Username;
  339. property Password;
  340. property Server;
  341. property ConnectString;
  342. property AutoCommit;
  343. property Connected stored IsConnectedStored;
  344. property ConnectDialog;
  345. property LoginPrompt;
  346. property AfterConnect;
  347. property BeforeConnect;
  348. property AfterDisconnect;
  349. property BeforeDisconnect;
  350. property OnLogin;
  351. property OnError;
  352. property OnConnectionLost;
  353. // obsolete
  354. property OnConnectChange: TConnectChangeEvent read FOnConnectChange write FOnConnectChange;
  355. property OnFailover: TFailoverEvent read FFailoverEvent write FFailoverEvent;
  356. property Home: TOracleHome read GetHome write SetHome stored False default ohDefault;
  357. property HomeName: string read FHomeName write SetHomeName;
  358. property Schema : string read GetSchema write SetSchema stored IsSchemaStored;
  359. end;
  360. { TSessionList }
  361. TSessionList = class (TThreadList)
  362. private
  363. function GetCount: integer;
  364. function GetSession(i: integer): TOraSession;
  365. public
  366. property Count: integer read GetCount;
  367. property Items[i: integer]: TOraSession read GetSession; default;
  368. end;
  369. { TOraParam }
  370. {$IFNDEF CLR}
  371. VariantPtr = ^variant;
  372. {$ENDIF}
  373. TOraParam = class (TDAParam)
  374. private
  375. FTable: boolean;
  376. FNational : boolean;
  377. FDataPtr: Variant;
  378. FParamDescRef: TOraParamDesc;
  379. {$IFNDEF CLR}
  380. function GetVarArrayPtr : VariantPtr;
  381. {$ENDIF}
  382. procedure CheckIndex(Index: integer);
  383. function GetTable: boolean;
  384. procedure SetTable(Value: boolean);
  385. function GetNational: boolean;
  386. procedure SetNational(Value: boolean);
  387. function GetTableLength: integer;
  388. procedure SetTableLength(Value: integer);
  389. function GetAsCursor: TOraCursor;
  390. procedure SetAsCursor(Value: TOraCursor);
  391. function GetAsOraBlob: TOraLob;
  392. procedure SetAsOraBlob(Value: TOraLob);
  393. function GetAsOraClob: TOraLob;
  394. procedure SetAsOraClob(Value: TOraLob);
  395. function GetAsBFile: TOraFile;
  396. procedure SetAsBFile(Value: TOraFile);
  397. function GetAsObject: TOraObject;
  398. procedure SetAsObject(Value: TOraObject);
  399. function GetAsXML: TOraXML;
  400. procedure SetAsXML(Value: TOraXML);
  401. function GetAsRef: TOraRef;
  402. procedure SetAsRef(Value: TOraRef);
  403. function GetAsArray: TOraArray;
  404. procedure SetAsArray(Value: TOraArray);
  405. function GetAsTable: TOraNestTable;
  406. procedure SetAsTable(Value: TOraNestTable);
  407. function GetAsTimeStamp: TOraTimeStamp;
  408. procedure SetAsTimeStamp(Value: TOraTimeStamp);
  409. function GetAsInterval: TOraInterval;
  410. procedure SetAsInterval(Value: TOraInterval);
  411. function GetAsNumber: TOraNumber;
  412. procedure SetAsNumber(Value: TOraNumber);
  413. function GetItemAsDateTime(Index: integer): TDateTime;
  414. procedure SetItemAsDateTime(Index: integer; Value: TDateTime);
  415. function GetItemAsFloat(Index: integer): double;
  416. procedure SetItemAsFloat(Index: integer; Value: double);
  417. function GetItemAsInteger(Index: integer): integer;
  418. procedure SetItemAsInteger(Index: integer; Value: integer);
  419. function GetItemAsString(Index: integer): string;
  420. procedure SetItemAsString(Index: integer; Value: string);
  421. function GetItemAsTimeStamp(Index: integer): TOraTimeStamp;
  422. procedure SetItemAsTimeStamp(Index: integer; Value: TOraTimeStamp);
  423. function GetItemAsInterval(Index: integer): TOraInterval;
  424. procedure SetItemAsInterval(Index: integer; Value: TOraInterval);
  425. function GetItemAsVariant(Index: integer): variant;
  426. procedure SetItemAsVariant(Index: integer; Value: variant);
  427. function GetItemAsObject(Index: integer): TSharedObject;
  428. procedure SetItemAsObject(Index: integer; Value: TSharedObject);
  429. function GetItemIsNull(Index: integer): boolean;
  430. procedure SetItemText(Index: integer; Value: string);
  431. protected
  432. function IsObjectDataType(DataType: TFieldType): boolean; overload; override;
  433. function IsObjectDataType: boolean; overload;
  434. function IsBlobDataType: boolean; override;
  435. {$IFNDEF CLR}
  436. function IsArray : boolean; virtual;
  437. {$ENDIF}
  438. procedure SetDataType(Value: TFieldType); override;
  439. function GetSize: integer; override;
  440. function GetAsString: string; override;
  441. procedure SetAsString(Value: string); override;
  442. function GetAsInteger: integer; override;
  443. procedure SetAsInteger(Value: integer); override;
  444. function GetAsFloat: double; override;
  445. procedure SetAsFloat(Value: double); override;
  446. function GetAsVariant: variant; override;
  447. procedure SetAsVariant(const Value: variant); override;
  448. {$IFDEF VER6P}
  449. function GetAsSQLTimeStamp: TSQLTimeStamp; override;
  450. procedure SetAsSQLTimeStamp(const Value: TSQLTimeStamp); override;
  451. {$ENDIF}
  452. function GetIsNull: boolean; override;
  453. procedure CreateObject; override;
  454. procedure DisconnectObject;
  455. procedure FreeItems;
  456. property ParamObject;
  457. public
  458. constructor Create(Collection: TCollection); override;
  459. destructor Destroy; override;
  460. procedure Clear; override;
  461. procedure ItemClear(Index: integer);
  462. procedure Assign(Source: TPersistent); override;
  463. procedure AssignFieldValue(Field: TField; const Value: Variant); override;
  464. procedure SetBlobData(Buffer: IntPtr; Size: integer);
  465. property AsCursor: TOraCursor read GetAsCursor write SetAsCursor;
  466. property AsOraBlob: TOraLob read GetAsOraBlob write SetAsOraBlob;
  467. property AsOraClob: TOraLob read GetAsOraClob write SetAsOraClob;
  468. property AsBFile: TOraFile read GetAsBFile write SetAsBFile;
  469. property AsObject: TOraObject read GetAsObject write SetAsObject;
  470. property AsXML: TOraXML read GetAsXML write SetAsXML;
  471. property AsRef: TOraRef read GetAsRef write SetAsRef;
  472. property AsArray: TOraArray read GetAsArray write SetAsArray;
  473. property AsTable: TOraNestTable read GetAsTable write SetAsTable;
  474. property AsTimeStamp: TOraTimeStamp read GetAsTimeStamp write SetAsTimeStamp;
  475. property AsInterval: TOraInterval read GetAsInterval write SetAsInterval;
  476. property AsNumber: TOraNumber read GetAsNumber write SetAsNumber;
  477. property ItemAsDateTime[Index: integer]: TDateTime read GetItemAsDateTime write SetItemAsDateTime;
  478. property ItemAsFloat[Index: integer]: double read GetItemAsFloat write SetItemAsFloat;
  479. property ItemAsInteger[Index: integer]: integer read GetItemAsInteger write SetItemAsInteger;
  480. property ItemAsString[Index: integer]: string read GetItemAsString write SetItemAsString;
  481. property ItemValue[Index: integer]: variant read GetItemAsVariant write SetItemAsVariant;
  482. property ItemIsNull[Index: integer]: boolean read GetItemIsNull;
  483. property ItemText[Index: integer]: string read GetItemAsString write SetItemText;
  484. property ItemAsTimeStamp[Index: integer]: TOraTimeStamp read GetItemAsTimeStamp write SetItemAsTimeStamp;
  485. property ItemAsInterval[Index: integer]: TOraInterval read GetItemAsInterval write SetItemAsInterval;
  486. // obsolette
  487. property AsBLOBLocator: TOraLob read GetAsOraBlob write SetAsOraBlob;
  488. property AsCLOBLocator: TOraLob read GetAsOraClob write SetAsOraClob;
  489. published
  490. property National : boolean read GetNational write SetNational default False;
  491. property Table: boolean read GetTable write SetTable default False;
  492. property Length: integer read GetTableLength write SetTableLength default 1;
  493. end;
  494. { TOraParams }
  495. TOraParams = class (TDAParams)
  496. private
  497. FOwner: TPersistent;
  498. procedure ReadBinaryData(Stream: TStream);
  499. function GetItem(Index: integer): TOraParam;
  500. procedure SetItem(Index: integer; Value: TOraParam);
  501. protected
  502. procedure Disconnect;
  503. procedure DefineProperties(Filer: TFiler); override;
  504. public
  505. constructor Create(Owner: TPersistent);
  506. function ParamByName(const Value: string): TOraParam;
  507. function FindParam(const Value: string): TOraParam;
  508. property Items[Index: integer]: TOraParam read GetItem write SetItem; default;
  509. end;
  510. { TCursorField }
  511. TCursorField = class (TField)
  512. private
  513. function GetAsCursor: TOraCursor;
  514. protected
  515. function GetValue(var Value: TOraCursor): boolean;
  516. public
  517. constructor Create(Owner: TComponent); override;
  518. property AsCursor: TOraCursor read GetAsCursor;
  519. end;
  520. { TBFileField }
  521. TBFileField = class (TBlobField)
  522. private
  523. FAutoRefresh: boolean;
  524. function GetAsFile: TOraFile;
  525. function GetBlobType: TBlobType;
  526. procedure SetBlobType(Value: TBlobType);
  527. function GetFileDir: string;
  528. procedure SetFileDir(Value: string);
  529. function GetFileName: string;
  530. procedure SetFileName(Value: string);
  531. function GetExists: boolean;
  532. protected
  533. function GetCanModify: boolean; override;
  534. function GetClassDesc: string; override;
  535. function GetValue(var Value: TOraFile): boolean;
  536. function GetIsNull: boolean; override;
  537. public
  538. constructor Create(Owner: TComponent); override;
  539. procedure Refresh;
  540. property FileDir: string read GetFileDir write SetFileDir;
  541. property FileName: string read GetFileName write SetFileName;
  542. property Exists: boolean read GetExists;
  543. property AsFile: TOraFile read GetAsFile;
  544. published
  545. property BlobType: TBlobType read GetBlobType write SetBlobType;
  546. property AutoRefresh: boolean read FAutoRefresh write FAutoRefresh default True;
  547. end;
  548. { TOraDataSetField }
  549. TOraDataSetField = class (TDataSetField)
  550. private
  551. FModified: boolean;
  552. protected
  553. procedure FreeBuffers; override;
  554. function GetAsString: string; override;
  555. public
  556. property Modified: boolean read FModified write FModified;
  557. end;
  558. { TOraReferenceField }
  559. TOraReferenceField = class (TReferenceField)
  560. private
  561. FModified: boolean;
  562. protected
  563. procedure FreeBuffers; override;
  564. function GetAsString: string; override;
  565. public
  566. property Modified: boolean read FModified write FModified;
  567. end;
  568. { TLabelField }
  569. TLabelField = class (TField)
  570. protected
  571. function GetAsVariant: variant; override;
  572. public
  573. constructor Create(Owner: TComponent); override;
  574. end;
  575. { TOraTimeStampField }
  576. TOraTimeStampField = class (TField)
  577. private
  578. FFormat: string;
  579. protected
  580. function GetAsDateTime: TDateTime; override;
  581. procedure SetAsDateTime(Value: TDateTime); override;
  582. function GetAsString: string; override;
  583. procedure SetAsString(const Value: string); override;
  584. function GetAsVariant: variant; override;
  585. procedure SetVarValue(const Value: Variant); override;
  586. {$IFDEF VER6P}
  587. function {$IFDEF CLR}GetAsSqlTimeStamp{$ELSE}GetAsSQLTimeStamp{$ENDIF}: TSQLTimeStamp; override; // anti hint
  588. procedure SetAsSQLTimeStamp(const Value: TSQLTimeStamp); override;
  589. {$ENDIF}
  590. function GetAsTimeStamp: TOraTimeStamp;
  591. procedure DefineProperties(Filer: TFiler); override;
  592. procedure ReadDataType(Reader: TReader);
  593. procedure WriteDataType(Writer: TWriter);
  594. function GetIsNull: Boolean; override;
  595. public
  596. constructor Create(Owner: TComponent); override;
  597. property AsTimeStamp: TOraTimeStamp read GetAsTimeStamp;
  598. procedure SetFieldType(Value: TFieldType); override;
  599. published
  600. property Format: string read FFormat write FFormat;
  601. end;
  602. { TOraIntervalField }
  603. TOraIntervalField = class (TField)
  604. private
  605. FLeadPrecision: integer;
  606. FFracPrecision: integer;
  607. protected
  608. function GetAsString: string; override;
  609. procedure SetAsString(const Value: string); override;
  610. function GetAsVariant: variant; override;
  611. procedure SetVarValue(const Value: Variant); override;
  612. function GetAsInterval: TOraInterval;
  613. procedure DefineProperties(Filer: TFiler); override;
  614. procedure ReadDataType(Reader: TReader);
  615. procedure WriteDataType(Writer: TWriter);
  616. function GetIsNull: Boolean; override;
  617. public
  618. constructor Create(Owner: TComponent); override;
  619. procedure SetFieldType(Value: TFieldType); override;
  620. property AsInterval: TOraInterval read GetAsInterval;
  621. published
  622. property LeadPrecision: integer read FLeadPrecision write FLeadPrecision default 2;
  623. property FracPrecision: integer read FFracPrecision write FFracPrecision default 6;
  624. end;
  625. { TOraNumberField }
  626. TOraNumberField = class (TNumericField)
  627. private
  628. function GetAsNumber: TOraNumber;
  629. protected
  630. function GetAsVariant: variant; override;
  631. procedure SetVarValue(const Value: Variant); override;
  632. function GetAsString: string; override;
  633. procedure SetAsString(const Value: string); override;
  634. function GetAsInteger: integer; override;
  635. procedure SetAsInteger(Value: integer); override;
  636. function GetAsLargeInt: LargeInt;
  637. procedure SetAsLargeInt(Value: LargeInt);
  638. function GetAsFloat: double; override;
  639. procedure SetAsFloat(Value: double); override;
  640. procedure DefineProperties(Filer: TFiler); override;
  641. procedure ReadDataType(Reader: TReader);
  642. procedure WriteDataType(Writer: TWriter);
  643. function GetIsNull: Boolean; override;
  644. public
  645. constructor Create(Owner: TComponent); override;
  646. function IsValidChar(InputChar: char): boolean; override;
  647. property AsNumber: TOraNumber read GetAsNumber;
  648. property AsLargeInt: LargeInt read GetAsLargeInt write SetAsLargeInt;
  649. end;
  650. { TOraXMLField }
  651. TOraXMLField = class (TField)
  652. protected
  653. function GetAsString: string; override;
  654. procedure SetAsString(const Value: string); override;
  655. function GetAsVariant: variant; override;
  656. function GetAsXML: TOraXML;
  657. procedure GetText(var Text: string; DisplayText: Boolean); override;
  658. procedure SetText(const Value: string); override;
  659. procedure DefineProperties(Filer: TFiler); override;
  660. procedure ReadDataType(Reader: TReader);
  661. procedure WriteDataType(Writer: TWriter);
  662. function GetIsNull: Boolean; override;
  663. function GetClassDesc: string; override;
  664. public
  665. constructor Create(Owner: TComponent); override;
  666. procedure Clear; override;
  667. class function IsBlob: Boolean; override;
  668. procedure SetFieldType(Value: TFieldType); override;
  669. property AsXML: TOraXML read GetAsXML;
  670. end;
  671. { TOraDataSet }
  672. TLockMode = (lmNone, lmLockImmediate, lmLockDelayed);
  673. TCheckMode = (cmNone, cmException, cmRefresh);
  674. TRefreshMode = (rmNone, rmAfterInsert, rmAfterUpdate, rmAlways); // obsolete
  675. // obsolete
  676. // new options should not be added to TOraDataSetOptionsDS
  677. TOraDataSetOptionsDS = class (TDADataSetOptions)
  678. private
  679. FAutoClose: boolean;
  680. FFieldsOrigin: boolean;
  681. FDefaultValues: boolean;
  682. FFieldsAsString: boolean;
  683. FDeferredLobRead: boolean;
  684. FCacheLobs: boolean;
  685. FScrollableCursor: boolean;
  686. FRawAsString: boolean;
  687. function GetKeepPrepared: Boolean;
  688. procedure SetKeepPrepared(Value: boolean);
  689. procedure SetAutoClose(Value: boolean);
  690. procedure SetFieldsAsString(Value: boolean);
  691. procedure SetDeferredLobRead(Value: boolean);
  692. procedure SetCacheLobs(Value: boolean);
  693. procedure SetScrollableCursor(Value: boolean);
  694. procedure SetRawAsString(Value: boolean);
  695. protected
  696. procedure AssignTo(Dest: TPersistent); override;
  697. public
  698. constructor Create(Owner: TCustomDADataSet);
  699. published
  700. property KeepPrepared: boolean read GetKeepPrepared write SetKeepPrepared stored False;
  701. property AutoClose: boolean read FAutoClose write SetAutoClose stored False default False;
  702. property FieldsOrigin: boolean read FFieldsOrigin write FFieldsOrigin stored False default False;
  703. property DefaultValues: boolean read FDefaultValues write FDefaultValues stored False default False;
  704. property FieldsAsString: boolean read FFieldsAsString write SetFieldsAsString stored False default False;
  705. property DeferredLobRead: boolean read FDeferredLobRead write SetDeferredLobRead stored False default False;
  706. property CacheLobs: boolean read FCacheLobs write SetCacheLobs stored False default True;
  707. property ScrollableCursor: boolean read FScrollableCursor write SetScrollableCursor stored False default False;
  708. property RawAsString: boolean read FRawAsString write SetRawAsString stored False default False;
  709. property RequiredFields stored False;
  710. property StrictUpdate stored False;
  711. property NumberRange stored False;
  712. property QueryRecCount stored False;
  713. property AutoPrepare stored False;
  714. property ReturnParams stored False;
  715. property TrimFixedChar stored False;
  716. property LongStrings stored False;
  717. property RemoveOnRefresh stored False;
  718. property FlatBuffers stored False;
  719. property DetailDelay stored False;
  720. end;
  721. TOraDataSetOptions = class(TOraDataSetOptionsDS)
  722. private
  723. FTemporaryLobUpdate: boolean;
  724. FExtenededFieldsInfo: boolean;
  725. FReflectChangeNotify: boolean;
  726. FStatementCache: boolean;
  727. procedure SetTemporaryLobUpdate(Value: boolean);
  728. procedure SetExtendedFieldsInfo(Value: boolean);
  729. procedure SetStatementCache(Value: boolean);
  730. protected
  731. procedure AssignTo(Dest: TPersistent); override;
  732. published
  733. property AutoClose stored True;
  734. property FieldsOrigin stored True;
  735. property DefaultValues stored True;
  736. property FieldsAsString stored True;
  737. property DeferredLobRead stored True;
  738. property CacheLobs stored True;
  739. property ScrollableCursor stored True;
  740. property RawAsString stored True;
  741. property RequiredFields stored True;
  742. property StrictUpdate stored True;
  743. property NumberRange stored True;
  744. property QueryRecCount stored True;
  745. property AutoPrepare stored True;
  746. property ReturnParams stored True;
  747. property TrimFixedChar stored True;
  748. property LongStrings stored True;
  749. property RemoveOnRefresh stored True;
  750. property FlatBuffers stored True;
  751. property DetailDelay stored True;
  752. property TemporaryLobUpdate: boolean read FTemporaryLobUpdate write SetTemporaryLobUpdate default False;
  753. property ExtendedFieldsInfo: boolean read FExtenededFieldsInfo write SetExtendedFieldsInfo default False;
  754. property ReflectChangeNotify: boolean read FReflectChangeNotify write FReflectChangeNotify default False;
  755. property StatementCache: boolean read FStatementCache write SetStatementCache default False;
  756. property SetFieldsReadOnly;
  757. property LocalMasterDetail;
  758. property CacheCalcFields;
  759. property FullRefresh;
  760. {$IFDEF HAVE_COMPRESS}
  761. property CompressBlobMode;
  762. {$ENDIF}
  763. property UpdateBatchSize;
  764. property UpdateAllFields;
  765. end;
  766. TSequenceMode = (smInsert, smPost);
  767. TFieldsInfoType = set of (ftFieldOrigin, ftDefaultValues);
  768. TOraSQLGenerator = class(TDASQLGenerator)
  769. private
  770. FSeqReturning: boolean;
  771. FSeqFieldDesc: TCRFieldDesc;
  772. protected
  773. FReturnSB,
  774. FIntoSB: StringBuilder;
  775. function IsBlobDataType(DataType: word): boolean; override;
  776. function FieldIsNull(FieldDesc: TCRFieldDesc; OldValue: boolean; Data: TData; OldRecBuf, NewRecBuf: IntPtr): boolean; override;
  777. function FieldModified(FieldDesc: TCRFieldDesc): boolean; override;
  778. function GenerateIndexName(Name: string): string; override;
  779. function IsSubstituteParamName: boolean; override;
  780. procedure AddParam(SB: StringBuilder; FieldDesc: TFieldDesc; const StatementType: TStatementType; Index: integer = -1; Old: boolean = False); override;
  781. procedure AddFieldToInsertSQL(FieldDesc: TCRFieldDesc; const Index: integer = -1); override;
  782. procedure AddFieldToUpdateSQL(FieldDesc: TCRFieldDesc;
  783. const ModifiedFieldsOnly: boolean;
  784. const Index: integer = -1); override;
  785. procedure GenerateInsertSQL(
  786. const KeyAndDataFields: TKeyAndDataFields;
  787. const ModifiedFieldsOnly: boolean;
  788. const Index: integer = -1); override;
  789. procedure GenerateUpdateSQL(
  790. const KeyAndDataFields: TKeyAndDataFields;
  791. const ModifiedFieldsOnly: boolean;
  792. const Index: integer = -1); override;
  793. procedure GenerateRefreshSQL(
  794. const KeyAndDataFields: TKeyAndDataFields;
  795. const ModifiedFieldsOnly: boolean); override;
  796. procedure GenerateLockSQL(
  797. const KeyAndDataFields: TKeyAndDataFields;
  798. const Index: integer = -1); override;
  799. public
  800. function GenerateSQL(const StatementType: TStatementType;
  801. const ModifiedFieldsOnly: boolean;
  802. Params: TDAParams;
  803. const Index: Integer = -1): string; override;
  804. end;
  805. {$IFNDEF STD}
  806. {$IFDEF MSWINDOWS}
  807. { TOraChangeNotification }
  808. TOraChangeNotificationEvent = procedure(Sender: TObject; NotifyType: TChangeNotifyEventType;
  809. TableChanges: TNotifyTableChanges) of object;
  810. TOraChangeNotification = class(TComponent)
  811. private
  812. FSession: TOraSession; // used to remove registration in destructor
  813. FEnabled: boolean;
  814. FPersistent: boolean;
  815. FTimeOut: integer;
  816. FOperations: TChangeNotifyDMLOperations;
  817. FDatasets: TDAList;
  818. FOnChange: TOraChangeNotificationEvent;
  819. procedure SetSession(Value: TOraSession);
  820. procedure SetEnabled(Value: boolean);
  821. procedure SetPersistent(Value: boolean);
  822. procedure SetTimeOut(Value: integer);
  823. procedure SetOperations(Value: TChangeNotifyDMLOperations);
  824. function GetActive: boolean;
  825. function GetPort: integer;
  826. procedure SetPort(Value: integer);
  827. protected
  828. FIChangeNotification: TOCIChangeNotification;
  829. function UsedConnection(Session: TOraSession): TOraSession;
  830. procedure BeginConnection(Session: TOraSession);
  831. procedure EndConnection(Session: TOraSession);
  832. procedure DoOnChange(NotifyType: TChangeNotifyEventType;
  833. TableChanges: TNotifyTableChanges);
  834. property Session: TOraSession read FSession write SetSession;
  835. public
  836. constructor Create(AOwner: TComponent); override;
  837. destructor Destroy; override;
  838. procedure RemoveRegistration(Session: TOraSession);
  839. property Active: boolean read GetActive;
  840. property Port: integer read GetPort write SetPort;
  841. published
  842. property Enabled: boolean read FEnabled write SetEnabled default True;
  843. property Persistent: boolean read FPersistent write SetPersistent default False;
  844. property TimeOut: integer read FTimeOut write SetTimeOut default 0;
  845. property Operations: TChangeNotifyDMLOperations read FOperations write SetOperations
  846. default [cnoInsert, cnoUpdate, cnoDelete];
  847. property OnChange: TOraChangeNotificationEvent read FOnChange write FOnChange;
  848. end;
  849. {$ENDIF}
  850. {$ENDIF}
  851. TOraDataSet = class (TCustomDADataSet)
  852. private
  853. FLockMode: TLockMode;
  854. FCheckMode: TCheckMode;
  855. FStreamedActive: boolean;
  856. FKeySequence: string;
  857. FKeyFields: string;
  858. FSequenceMode: TSequenceMode;
  859. FDMLRefresh: boolean;
  860. FIsUpdatingFields: boolean;
  861. {$IFNDEF STD}
  862. {$IFDEF MSWINDOWS}
  863. FChangeNotification: TOraChangeNotification;
  864. {$ENDIF}
  865. {$ENDIF}
  866. {$IFDEF WIN32}
  867. FProvIntf: IProvider;
  868. {$ENDIF}
  869. FFieldsInfoRequested: boolean; // Is needed to avoid second execution of GetFieldsInfo
  870. function GetSession: TOraSession;
  871. procedure SetSession(Value: TOraSession);
  872. function GetParams: TOraParams;
  873. procedure SetParams(Value: TOraParams);
  874. procedure SetNonBlocking(Value: boolean);
  875. function GetRowsProcessed: integer;
  876. function GetIsPLSQL: boolean;
  877. function GetSQLType: integer;
  878. function GetCursor: TOraCursor;
  879. function GetOptions: TOraDataSetOptions;
  880. procedure SetCursor(Value: TOraCursor);
  881. procedure SetOptions(Value: TOraDataSetOptions);
  882. procedure SetKeySequence(Value: string);
  883. procedure SetSequenceMode(const Value: TSequenceMode);
  884. {$IFNDEF STD}
  885. {$IFDEF MSWINDOWS}
  886. procedure SetChangeNotification(Value: TOraChangeNotification);
  887. {$ENDIF}
  888. {$ENDIF}
  889. // obsolete
  890. function GetStrictUpdate: boolean;
  891. procedure SetStrictUpdate(Value: boolean);
  892. function GetReturnParams: boolean;
  893. procedure SetReturnParams(Value: boolean);
  894. function GetRefreshMode: TRefreshMode;
  895. procedure SetRefreshMode(Value: TRefreshMode);
  896. function GetOptionsDS: TOraDataSetOptionsDS;
  897. procedure SetOptionsDS(Value: TOraDataSetOptionsDS);
  898. {$IFDEF WIN32}
  899. function GetProvider: IProvider;
  900. {$ENDIF}
  901. protected
  902. { IProviderSupport }
  903. function PreventPSKeyFields(var PSKeyFields: string): boolean; override;
  904. function PSGetKeyFields: string; override;
  905. function PSGetDefaultOrder: TIndexDef; override;
  906. procedure CheckInactive; override;
  907. protected
  908. FIRecordSet: TOCIRecordSet;
  909. FICommand: TOCICommand;
  910. FHideRowidField: boolean;
  911. // FRowIdField: TField;
  912. FKeyFieldArray: TFieldArray;
  913. procedure CreateIRecordSet; override;
  914. procedure SetIRecordSet(Value: TData{TRecordSet}); override;
  915. procedure CreateCommand; override;
  916. function CreateOptions: TDADataSetOptions; override;
  917. procedure Loaded; override;
  918. function UsedConnection: TCustomDAConnection; override;
  919. procedure Disconnect; override;
  920. { Open/Close }
  921. function IsNeedEditPreconnect: boolean; override;
  922. function IsNeedInsertPreconnect: boolean; override;
  923. function IsPreconnected : boolean; override;
  924. { TablesInfo }
  925. procedure DetectIdentityField; override;
  926. procedure OpenCursor(InfoQuery: boolean); override;
  927. procedure CloseCursor; override;
  928. procedure InternalExecute; override;
  929. function GetRecCount: longint; override;
  930. procedure GetFieldsInfo(FieldsInfoType: TFieldsInfoType); overload;
  931. procedure GetFieldsInfo(); overload;
  932. procedure CheckFieldCompatibility(Field: TField; FieldDef: TFieldDef); override;
  933. procedure DoAfterOpen; override;
  934. procedure DoAfterScroll; override;
  935. { Fields }
  936. function GetFieldClass(FieldType: TFieldType): TFieldClass; override;
  937. function GetFieldType(DataType: word): TFieldType; override;
  938. function IsKeyFields: boolean;
  939. function IsUpdatingFields: boolean;
  940. { Edit }
  941. procedure CreateSQLGenerator; override;
  942. procedure InitRecord(Buffer: TRecordBuffer); override;
  943. function PerformDelete: boolean; override;
  944. function PerformUpdate: boolean; override;
  945. procedure InternalLock; virtual;
  946. procedure CheckUpdateQuery(const StatementType: TStatementType); override;
  947. procedure UpdateExecute(const StatementTypes: TStatementTypes); override;
  948. procedure CheckUpdateSQL(const SQL: string; const StatementTypes: TStatementTypes; out ParamsInfo: TDAParamsInfo); override;
  949. function PerformSQL(const SQL: string; const StatementTypes: TStatementTypes): boolean; override;
  950. function PrepareBatch(SQL: string): string; override;
  951. function RefreshAfterInsertAllowed: boolean; override;
  952. function ShouldPrepareUpdateSQL: boolean; override;
  953. procedure SetDefaultExpressionValue(Field: TField); override;
  954. procedure AssignFieldValue(Param: TDAParam; Field: TField; Old: boolean); override;
  955. procedure GetIdentityField; override;
  956. function GetSavepointName: string;
  957. procedure AssignTo(Dest: TPersistent); override;
  958. procedure SetActive(Value: boolean); override;
  959. procedure SetKeyFields(Value: string); virtual;
  960. function UseAllFields(ForceUseAllKeyFields: boolean): boolean; virtual;
  961. procedure GetKeyAndDataFields(
  962. out KeyAndDataFields: TKeyAndDataFields;
  963. const ForceUseAllKeyFields: boolean); override;
  964. procedure FillKeyFieldArray(const Value: string);
  965. function NeedReturnParams: boolean; override;
  966. { Master/Detail}
  967. function NeedDetailRefresh(Param: TDAParam; FieldValue: TSharedObject): boolean; override;
  968. { Filter/Find/Locate }
  969. procedure CopyFieldValue(const Value: variant; out ValuePtr: IntPtr; out ValueType: integer; FieldDesc: TFieldDesc); override;
  970. { KeySequence }
  971. procedure InternalOpen; override;
  972. procedure InternalClose; override;
  973. procedure GetSequenceNextVal;
  974. procedure InternalInsert; override;
  975. procedure InternalCreateProcCall(Name: string; Overload: integer; NeedDescribe: boolean);
  976. { SQL modify }
  977. function SQLAddWhere(SQLText, Condition: string): string; override;
  978. function SQLDeleteWhere(SQLText: string): string; override;
  979. function SQLSetOrderBy(SQLText: string; Fields: string): string; override;
  980. function SQLGetOrderBy(SQLText: string): string; override;
  981. procedure SetModified(Value: Boolean);
  982. function GetActiveRecBuf(var RecBuf: TRecordBuffer): boolean;
  983. function GetData: TData;
  984. {$IFDEF MSWINDOWS}
  985. procedure ReflectChanges(TableChanges: TNotifyTableChanges);
  986. {$ENDIF}
  987. { XML }
  988. procedure WriteFieldXMLDataType(Field: TField; FieldDesc: TFieldDesc; const FieldAlias: string;
  989. XMLWriter: XMLTextWriter); override;
  990. function GetFieldXMLValue(Field: TField; FieldDesc: TFieldDesc): string; override;
  991. function GetUpdateObject: TOraUpdateSQL;
  992. procedure SetUpdateObject(Value: TOraUpdateSQL);
  993. property IdentityField;
  994. public
  995. constructor Create(Owner: TComponent); override;
  996. destructor Destroy; override;
  997. { Open/Close }
  998. procedure BreakExec;
  999. function Fetched: boolean; override;
  1000. function ErrorOffset: integer;
  1001. procedure GetErrorPos(var Row,Col: integer);
  1002. { Edit }
  1003. procedure Lock;
  1004. procedure Unlock;
  1005. procedure CreateProcCall(Name: string; Overload: integer = 0);
  1006. function GetKeyList(TableName: string; List: TStrings): string;
  1007. function FindParam(const Value: string): TOraParam;
  1008. function ParamByName(const Value: string): TOraParam;
  1009. function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override;
  1010. { Additional data types }
  1011. function GetLob(const FieldName: string): TOraLob;
  1012. function GetFile(const FieldName: string): TOraFile;
  1013. {$HPPEMIT '#ifdef GetObject'}
  1014. {$HPPEMIT '#undef GetObject'}
  1015. {$HPPEMIT '#endif'}
  1016. function GetObject(const FieldName: string): TOraObject;
  1017. function GetRef(const FieldName: string): TOraRef;
  1018. function GetArray(const FieldName: string): TOraArray;
  1019. function GetTable(const FieldName: string): TOraNestTable;
  1020. function GetTimeStamp(const FieldName: string): TOraTimeStamp;
  1021. function GetInterval(const FieldName: string): TOraInterval;
  1022. function GetNumber(const FieldName: string): TOraNumber;
  1023. function GetLobLocator(const FieldName: string): TOraLob; // obsolete
  1024. property Session: TOraSession read GetSession write SetSession;
  1025. property Params: TOraParams read GetParams write SetParams stored False;
  1026. property NonBlocking: boolean read FNonBlocking write SetNonBlocking default False;
  1027. property RowsProcessed: integer read GetRowsProcessed;
  1028. property IsQuery: boolean read GetIsQuery;
  1029. property IsPLSQL: boolean read GetIsPLSQL;
  1030. property SQLType: integer read GetSQLType;
  1031. property Cursor: TOraCursor read GetCursor write SetCursor;
  1032. property LockMode: TLockMode read FLockMode write FLockMode;
  1033. property CheckMode: TCheckMode read FCheckMode write FCheckMode;
  1034. property Options: TOraDataSetOptions read GetOptions write SetOptions;
  1035. property KeyFields: string read FKeyFields write SetKeyFields;
  1036. property KeySequence: string read FKeySequence write SetKeySequence;
  1037. property SequenceMode: TSequenceMode read FSequenceMode write SetSequenceMode default smPost;
  1038. {$IFNDEF STD}
  1039. {$IFDEF MSWINDOWS}
  1040. property ChangeNotification: TOraChangeNotification read FChangeNotification write SetChangeNotification;
  1041. {$ENDIF}
  1042. {$ENDIF}
  1043. // obsolete
  1044. property RefreshMode: TRefreshMode read GetRefreshMode write SetRefreshMode stored False;
  1045. property DMLRefresh: boolean read FDMLRefresh write FDMLRefresh default False;
  1046. property StrictUpdate: boolean read GetStrictUpdate write SetStrictUpdate stored False;
  1047. property LocalConstraints stored False;
  1048. property ReturnParams: boolean read GetReturnParams write SetReturnParams stored False;
  1049. property OptionsDS: TOraDataSetOptionsDS read GetOptionsDS write SetOptionsDS stored False; // is Options
  1050. property AutoCommit;
  1051. {$IFDEF WIN32}
  1052. property Provider: IProvider read GetProvider;
  1053. {$ENDIF}
  1054. property UpdateObject: TOraUpdateSQL read GetUpdateObject write SetUpdateObject;
  1055. end;
  1056. { TBFileStream }
  1057. TBFileStream = class(TBlobStream)
  1058. public
  1059. constructor Create(Field: TBlobField; Mode: TBlobStreamMode);
  1060. destructor Destroy; override;
  1061. end;
  1062. { TOraNestedTable }
  1063. TOraNestedTable = class (TMemDataSet)
  1064. private
  1065. function GetTable: TOraNestTable;
  1066. procedure SetTable(Value: TOraNestTable);
  1067. function GetRef: TOraRef;
  1068. procedure SetRef(Value: TOraRef);
  1069. protected
  1070. procedure CreateIRecordSet; override;
  1071. { Open/Close }
  1072. procedure OpenCursor(InfoQuery: boolean); override;
  1073. procedure CloseCursor; override;
  1074. procedure CreateFieldDefs; override;
  1075. procedure DoAfterPost; override;
  1076. procedure DoBeforeInsert; override;
  1077. procedure DoBeforeDelete; override;
  1078. function GetCanModify: boolean; override;
  1079. procedure SetDataSetField(const Value: TDataSetField); override;
  1080. {$IFDEF CLR}
  1081. procedure DataEvent(Event: TDataEvent; Info: TObject); override;
  1082. {$ELSE}
  1083. procedure DataEvent(Event: TDataEvent; Info: longint); override;
  1084. {$ENDIF}
  1085. { Fields }
  1086. function GetFieldClass(FieldType: TFieldType): TFieldClass; override;
  1087. function GetFieldType(DataType: word): TFieldType; override;
  1088. public
  1089. constructor Create(Owner: TComponent); override;
  1090. function GetObject(const FieldName: string): TOraObject;
  1091. property Table: TOraNestTable read GetTable write SetTable;
  1092. property Ref: TOraRef read GetRef write SetRef;
  1093. published
  1094. property DataSetField;
  1095. property Active;
  1096. property AutoCalcFields;
  1097. property Filtered;
  1098. property Filter;
  1099. property FilterOptions;
  1100. property IndexFieldNames;
  1101. property ObjectView default True;
  1102. property BeforeOpen;
  1103. property AfterOpen;
  1104. property BeforeClose;
  1105. property AfterClose;
  1106. property BeforeInsert;
  1107. property AfterInsert;
  1108. property BeforeEdit;
  1109. property AfterEdit;
  1110. property BeforePost;
  1111. property AfterPost;
  1112. property BeforeCancel;
  1113. property AfterCancel;
  1114. pro

Large files files are truncated, but you can click here to view the full file