2
0

tsamytable.pp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600
  1. Unit tsamytable;
  2. {$mode objfpc}{$H+}
  3. Interface
  4. Uses Classes, SysUtils, db, fieldmap, sqldb;
  5. Const
  6. IID_MyTypeSafeAccess = '{1258E169-56C8-4846-8BAF-928C06B89487}';
  7. // Field names
  8. FLD_MyTypeSafeAccess_MyString = 'MyString';
  9. FLD_MyTypeSafeAccess_MyFixedChar = 'MyFixedChar';
  10. FLD_MyTypeSafeAccess_MyWideString = 'MyWideString';
  11. FLD_MyTypeSafeAccess_MyDateTime = 'MyDateTime';
  12. FLD_MyTypeSafeAccess_MyUnicodeString = 'MyUnicodeString';
  13. FLD_MyTypeSafeAccess_MyUTF8String = 'MyUTF8String';
  14. FLD_MyTypeSafeAccess_MyFixedWideString = 'MyFixedWideString';
  15. FLD_MyTypeSafeAccess_MyInteger = 'MyInteger';
  16. FLD_MyTypeSafeAccess_MyByteInteger = 'MyByteInteger';
  17. FLD_MyTypeSafeAccess_MySmallintInteger = 'MySmallintInteger';
  18. FLD_MyTypeSafeAccess_MyShortIntInteger = 'MyShortIntInteger';
  19. FLD_MyTypeSafeAccess_MyCardinalInteger = 'MyCardinalInteger';
  20. FLD_MyTypeSafeAccess_MyFloat = 'MyFloat';
  21. FLD_MyTypeSafeAccess_MyWord = 'MyWord';
  22. FLD_MyTypeSafeAccess_MyBoolean = 'MyBoolean';
  23. FLD_MyTypeSafeAccess_MyInt64 = 'MyInt64';
  24. FLD_MyTypeSafeAccess_MyQWordLargeInt = 'MyQWordLargeInt';
  25. FLD_MyTypeSafeAccess_MyBlob = 'MyBlob';
  26. SQLMyTypeSafeAccess =
  27. 'SELECT' + sLineBreak +
  28. 'MyString' + sLineBreak +
  29. ', MyFixedChar' + sLineBreak +
  30. ', MyWideString' + sLineBreak +
  31. ', MyDateTime' + sLineBreak +
  32. ', MyUnicodeString' + sLineBreak +
  33. ', MyUTF8String' + sLineBreak +
  34. ', MyFixedWideString' + sLineBreak +
  35. ', MyInteger' + sLineBreak +
  36. ', MyByteInteger' + sLineBreak +
  37. ', MySmallintInteger' + sLineBreak +
  38. ', MyShortIntInteger' + sLineBreak +
  39. ', MyCardinalInteger' + sLineBreak +
  40. ', MyFloat' + sLineBreak +
  41. ', MyWord' + sLineBreak +
  42. ', MyBoolean' + sLineBreak +
  43. ', MyInt64' + sLineBreak +
  44. ', MyQWordLargeInt' + sLineBreak +
  45. ', MyBlob' + sLineBreak +
  46. 'FROM MyTable';
  47. Type
  48. {$INLINE ON}
  49. { IMyTypeSafeAccess }
  50. IMyTypeSafeAccess = Interface(ITypeSafeDatasetAccess) [IID_MyTypeSafeAccess]
  51. Function GetMyString : AnsiString;
  52. Procedure SetMyString (aValue : AnsiString);
  53. Function GetMyFixedChar : AnsiString;
  54. Procedure SetMyFixedChar (aValue : AnsiString);
  55. Function GetMyWideString : WideString;
  56. Procedure SetMyWideString (aValue : WideString);
  57. Function GetMyDateTime : TDateTime;
  58. Procedure SetMyDateTime (aValue : TDateTime);
  59. Function GetMyUnicodeString : UnicodeString;
  60. Procedure SetMyUnicodeString (aValue : UnicodeString);
  61. Function GetMyUTF8String : Utf8String;
  62. Procedure SetMyUTF8String (aValue : Utf8String);
  63. Function GetMyFixedWideString : WideString;
  64. Procedure SetMyFixedWideString (aValue : WideString);
  65. Function GetMyInteger : Longint;
  66. Procedure SetMyInteger (aValue : Longint);
  67. Function GetMyByteInteger : Byte;
  68. Procedure SetMyByteInteger (aValue : Byte);
  69. Function GetMySmallintInteger : SmallInt;
  70. Procedure SetMySmallintInteger (aValue : SmallInt);
  71. Function GetMyShortIntInteger : ShortInt;
  72. Procedure SetMyShortIntInteger (aValue : ShortInt);
  73. Function GetMyCardinalInteger : Cardinal;
  74. Procedure SetMyCardinalInteger (aValue : Cardinal);
  75. Function GetMyFloat : Double;
  76. Procedure SetMyFloat (aValue : Double);
  77. Function GetMyWord : Word;
  78. Procedure SetMyWord (aValue : Word);
  79. Function GetMyBoolean : Boolean;
  80. Procedure SetMyBoolean (aValue : Boolean);
  81. Function GetMyInt64 : Int64;
  82. Procedure SetMyInt64 (aValue : Int64);
  83. Function GetMyQWordLargeInt : QWord;
  84. Procedure SetMyQWordLargeInt (aValue : QWord);
  85. Function GetMyBlob : TStream;
  86. Property MyString : AnsiString Read GetMyString Write SetMyString;
  87. Property MyFixedChar : AnsiString Read GetMyFixedChar Write SetMyFixedChar;
  88. Property MyWideString : WideString Read GetMyWideString Write SetMyWideString;
  89. Property MyDateTime : TDateTime Read GetMyDateTime Write SetMyDateTime;
  90. Property MyUnicodeString : UnicodeString Read GetMyUnicodeString Write SetMyUnicodeString;
  91. Property MyUTF8String : Utf8String Read GetMyUTF8String Write SetMyUTF8String;
  92. Property MyFixedWideString : WideString Read GetMyFixedWideString Write SetMyFixedWideString;
  93. Property MyInteger : Longint Read GetMyInteger Write SetMyInteger;
  94. Property MyByteInteger : Byte Read GetMyByteInteger Write SetMyByteInteger;
  95. Property MySmallintInteger : SmallInt Read GetMySmallintInteger Write SetMySmallintInteger;
  96. Property MyShortIntInteger : ShortInt Read GetMyShortIntInteger Write SetMyShortIntInteger;
  97. Property MyCardinalInteger : Cardinal Read GetMyCardinalInteger Write SetMyCardinalInteger;
  98. Property MyFloat : Double Read GetMyFloat Write SetMyFloat;
  99. Property MyWord : Word Read GetMyWord Write SetMyWord;
  100. Property MyBoolean : Boolean Read GetMyBoolean Write SetMyBoolean;
  101. Property MyInt64 : Int64 Read GetMyInt64 Write SetMyInt64;
  102. Property MyQWordLargeInt : QWord Read GetMyQWordLargeInt Write SetMyQWordLargeInt;
  103. Property MyBlob : TStream Read GetMyBlob;
  104. end;
  105. { TMyTypeSafeAccess }
  106. TMyTypeSafeAccess = Class(TTypeSafeDatasetAccess,IMyTypeSafeAccess)
  107. Private
  108. FBlobMyBlob : TBlobProxyStream;
  109. Procedure DoMyBlobChanged(Sender : TObject);
  110. Private
  111. Function GetMyString : AnsiString;
  112. Procedure SetMyString (AValue : AnsiString);
  113. Function GetMyFixedChar : AnsiString;
  114. Procedure SetMyFixedChar (AValue : AnsiString);
  115. Function GetMyWideString : WideString;
  116. Procedure SetMyWideString (AValue : WideString);
  117. Function GetMyDateTime : TDateTime;
  118. Procedure SetMyDateTime (AValue : TDateTime);
  119. Function GetMyUnicodeString : UnicodeString;
  120. Procedure SetMyUnicodeString (AValue : UnicodeString);
  121. Function GetMyUTF8String : Utf8String;
  122. Procedure SetMyUTF8String (AValue : Utf8String);
  123. Function GetMyFixedWideString : WideString;
  124. Procedure SetMyFixedWideString (AValue : WideString);
  125. Function GetMyInteger : Longint;
  126. Procedure SetMyInteger (AValue : Longint);
  127. Function GetMyByteInteger : Byte;
  128. Procedure SetMyByteInteger (AValue : Byte);
  129. Function GetMySmallintInteger : SmallInt;
  130. Procedure SetMySmallintInteger (AValue : SmallInt);
  131. Function GetMyShortIntInteger : ShortInt;
  132. Procedure SetMyShortIntInteger (AValue : ShortInt);
  133. Function GetMyCardinalInteger : Cardinal;
  134. Procedure SetMyCardinalInteger (AValue : Cardinal);
  135. Function GetMyFloat : Double;
  136. Procedure SetMyFloat (AValue : Double);
  137. Function GetMyWord : Word;
  138. Procedure SetMyWord (AValue : Word);
  139. Function GetMyBoolean : Boolean;
  140. Procedure SetMyBoolean (AValue : Boolean);
  141. Function GetMyInt64 : Int64;
  142. Procedure SetMyInt64 (AValue : Int64);
  143. Function GetMyQWordLargeInt : QWord;
  144. Procedure SetMyQWordLargeInt (AValue : QWord);
  145. Function GetMyBlob : TStream;
  146. Protected
  147. Class Function FieldMapClass : TFieldMapClass; override;
  148. Public
  149. Destructor Destroy; Override;
  150. Procedure ApplyUpdates; override;
  151. Class Function CreateQuery(aSQL : String; aConnection : TSQLConnection; aTransaction : TSQLTransaction) : TMyTypeSafeAccess; overload;
  152. Class Function CreateQuery(aConnection : TSQLConnection; aTransaction : TSQLTransaction) : TMyTypeSafeAccess; overload;
  153. Class Function GetQuery(aSQL : String; aConnection : TSQLConnection; aTransaction : TSQLTransaction) : IMyTypeSafeAccess; overload;
  154. Class Function GetQuery(aConnection : TSQLConnection; aTransaction : TSQLTransaction) : IMyTypeSafeAccess; overload;
  155. Published
  156. Property MyString : AnsiString Read GetMyString Write SetMyString;
  157. Property MyFixedChar : AnsiString Read GetMyFixedChar Write SetMyFixedChar;
  158. Property MyWideString : WideString Read GetMyWideString Write SetMyWideString;
  159. Property MyDateTime : TDateTime Read GetMyDateTime Write SetMyDateTime;
  160. Property MyUnicodeString : UnicodeString Read GetMyUnicodeString Write SetMyUnicodeString;
  161. Property MyUTF8String : Utf8String Read GetMyUTF8String Write SetMyUTF8String;
  162. Property MyFixedWideString : WideString Read GetMyFixedWideString Write SetMyFixedWideString;
  163. Property MyInteger : Longint Read GetMyInteger Write SetMyInteger;
  164. Property MyByteInteger : Byte Read GetMyByteInteger Write SetMyByteInteger;
  165. Property MySmallintInteger : SmallInt Read GetMySmallintInteger Write SetMySmallintInteger;
  166. Property MyShortIntInteger : ShortInt Read GetMyShortIntInteger Write SetMyShortIntInteger;
  167. Property MyCardinalInteger : Cardinal Read GetMyCardinalInteger Write SetMyCardinalInteger;
  168. Property MyFloat : Double Read GetMyFloat Write SetMyFloat;
  169. Property MyWord : Word Read GetMyWord Write SetMyWord;
  170. Property MyBoolean : Boolean Read GetMyBoolean Write SetMyBoolean;
  171. Property MyInt64 : Int64 Read GetMyInt64 Write SetMyInt64;
  172. Property MyQWordLargeInt : QWord Read GetMyQWordLargeInt Write SetMyQWordLargeInt;
  173. Property MyBlob : TStream Read GetMyBlob;
  174. end;
  175. Implementation
  176. Type
  177. { TMyFieldMap }
  178. TMyFieldMap = Class(TFieldMap)
  179. Private
  180. FMyString : TField;
  181. FMyFixedChar : TField;
  182. FMyWideString : TField;
  183. FMyDateTime : TField;
  184. FMyUnicodeString : TField;
  185. FMyUTF8String : TField;
  186. FMyFixedWideString : TField;
  187. FMyInteger : TField;
  188. FMyByteInteger : TField;
  189. FMySmallintInteger : TField;
  190. FMyShortIntInteger : TField;
  191. FMyCardinalInteger : TField;
  192. FMyFloat : TField;
  193. FMyWord : TField;
  194. FMyBoolean : TField;
  195. FMyInt64 : TField;
  196. FMyQWordLargeInt : TField;
  197. FMyBlob : TField;
  198. Public
  199. Procedure InitFields; Override;
  200. Property MyString : TField read FMyString;
  201. Property MyFixedChar : TField read FMyFixedChar;
  202. Property MyWideString : TField read FMyWideString;
  203. Property MyDateTime : TField read FMyDateTime;
  204. Property MyUnicodeString : TField read FMyUnicodeString;
  205. Property MyUTF8String : TField read FMyUTF8String;
  206. Property MyFixedWideString : TField read FMyFixedWideString;
  207. Property MyInteger : TField read FMyInteger;
  208. Property MyByteInteger : TField read FMyByteInteger;
  209. Property MySmallintInteger : TField read FMySmallintInteger;
  210. Property MyShortIntInteger : TField read FMyShortIntInteger;
  211. Property MyCardinalInteger : TField read FMyCardinalInteger;
  212. Property MyFloat : TField read FMyFloat;
  213. Property MyWord : TField read FMyWord;
  214. Property MyBoolean : TField read FMyBoolean;
  215. Property MyInt64 : TField read FMyInt64;
  216. Property MyQWordLargeInt : TField read FMyQWordLargeInt;
  217. Property MyBlob : TField read FMyBlob;
  218. end;
  219. { TMyTypeSafeAccess }
  220. { Constructor and destructor }
  221. Destructor TMyTypeSafeAccess.Destroy;
  222. begin
  223. FreeAndNil(FBlobMyBlob);
  224. Inherited;
  225. end;
  226. { Property Getters }
  227. Function TMyTypeSafeAccess.GetMyString : AnsiString;
  228. begin
  229. Result:=TMyFieldMap(FieldMap).MyString.AsAnsiString;
  230. end;
  231. Function TMyTypeSafeAccess.GetMyFixedChar : AnsiString;
  232. begin
  233. Result:=TMyFieldMap(FieldMap).MyFixedChar.AsAnsiString;
  234. end;
  235. Function TMyTypeSafeAccess.GetMyWideString : WideString;
  236. begin
  237. Result:=TMyFieldMap(FieldMap).MyWideString.AsWideString;
  238. end;
  239. Function TMyTypeSafeAccess.GetMyDateTime : TDateTime;
  240. begin
  241. Result:=TMyFieldMap(FieldMap).MyDateTime.AsDateTime;
  242. end;
  243. Function TMyTypeSafeAccess.GetMyUnicodeString : UnicodeString;
  244. begin
  245. Result:=TMyFieldMap(FieldMap).MyUnicodeString.AsUnicodeString;
  246. end;
  247. Function TMyTypeSafeAccess.GetMyUTF8String : Utf8String;
  248. begin
  249. Result:=TMyFieldMap(FieldMap).MyUTF8String.AsUtf8String;
  250. end;
  251. Function TMyTypeSafeAccess.GetMyFixedWideString : WideString;
  252. begin
  253. Result:=TMyFieldMap(FieldMap).MyFixedWideString.AsWideString;
  254. end;
  255. Function TMyTypeSafeAccess.GetMyInteger : Longint;
  256. begin
  257. Result:=TMyFieldMap(FieldMap).MyInteger.AsInteger;
  258. end;
  259. Function TMyTypeSafeAccess.GetMyByteInteger : Byte;
  260. begin
  261. Result:=TMyFieldMap(FieldMap).MyByteInteger.AsInteger;
  262. end;
  263. Function TMyTypeSafeAccess.GetMySmallintInteger : SmallInt;
  264. begin
  265. Result:=TMyFieldMap(FieldMap).MySmallintInteger.AsInteger;
  266. end;
  267. Function TMyTypeSafeAccess.GetMyShortIntInteger : ShortInt;
  268. begin
  269. Result:=TMyFieldMap(FieldMap).MyShortIntInteger.AsInteger;
  270. end;
  271. Function TMyTypeSafeAccess.GetMyCardinalInteger : Cardinal;
  272. begin
  273. Result:=TMyFieldMap(FieldMap).MyCardinalInteger.AsInteger;
  274. end;
  275. Function TMyTypeSafeAccess.GetMyFloat : Double;
  276. begin
  277. Result:=TMyFieldMap(FieldMap).MyFloat.AsFLoat;
  278. end;
  279. Function TMyTypeSafeAccess.GetMyWord : Word;
  280. begin
  281. Result:=TMyFieldMap(FieldMap).MyWord.AsInteger;
  282. end;
  283. Function TMyTypeSafeAccess.GetMyBoolean : Boolean;
  284. begin
  285. Result:=TMyFieldMap(FieldMap).MyBoolean.AsBoolean;
  286. end;
  287. Function TMyTypeSafeAccess.GetMyInt64 : Int64;
  288. begin
  289. Result:=TMyFieldMap(FieldMap).MyInt64.AsLargeInt;
  290. end;
  291. Function TMyTypeSafeAccess.GetMyQWordLargeInt : QWord;
  292. begin
  293. Result:=TMyFieldMap(FieldMap).MyQWordLargeInt.AsLargeInt;
  294. end;
  295. Procedure TMyTypeSafeAccess.DoMyBlobChanged(Sender : TObject);
  296. begin
  297. If Dataset.State in dsEditModes then
  298. TBlobField(TMyFieldMap(FieldMap).MyBlob).LoadFromStream(TStream(Sender));
  299. end;
  300. Function TMyTypeSafeAccess.GetMyBlob : TStream;
  301. begin
  302. if not Assigned(FBlobMyBlob) then
  303. begin
  304. FBlobMyBlob:=TBlobProxyStream.Create;
  305. FBlobMyBlob.OnChange:=@DoMyBlobChanged;
  306. end;
  307. FBlobMyBlob.Size:=0;
  308. FBlobMyBlob.Position:=0;
  309. if not FBlobMyBlob.Updating then
  310. begin
  311. TBlobField(TMyFieldMap(FieldMap).MyBlob).SaveToStream(FBlobMyBlob);
  312. FBlobMyBlob.Position:=0;
  313. end;
  314. Result:=FBlobMyBlob;
  315. end;
  316. { Property Setters }
  317. Procedure TMyTypeSafeAccess.SetMyString (AValue : AnsiString);
  318. begin
  319. TMyFieldMap(FieldMap).MyString.AsAnsiString:=aValue;
  320. end;
  321. Procedure TMyTypeSafeAccess.SetMyFixedChar (AValue : AnsiString);
  322. begin
  323. TMyFieldMap(FieldMap).MyFixedChar.AsAnsiString:=aValue;
  324. end;
  325. Procedure TMyTypeSafeAccess.SetMyWideString (AValue : WideString);
  326. begin
  327. TMyFieldMap(FieldMap).MyWideString.AsWideString:=aValue;
  328. end;
  329. Procedure TMyTypeSafeAccess.SetMyDateTime (AValue : TDateTime);
  330. begin
  331. TMyFieldMap(FieldMap).MyDateTime.AsDateTime:=aValue;
  332. end;
  333. Procedure TMyTypeSafeAccess.SetMyUnicodeString (AValue : UnicodeString);
  334. begin
  335. TMyFieldMap(FieldMap).MyUnicodeString.AsUnicodeString:=aValue;
  336. end;
  337. Procedure TMyTypeSafeAccess.SetMyUTF8String (AValue : Utf8String);
  338. begin
  339. TMyFieldMap(FieldMap).MyUTF8String.AsUtf8String:=aValue;
  340. end;
  341. Procedure TMyTypeSafeAccess.SetMyFixedWideString (AValue : WideString);
  342. begin
  343. TMyFieldMap(FieldMap).MyFixedWideString.AsWideString:=aValue;
  344. end;
  345. Procedure TMyTypeSafeAccess.SetMyInteger (AValue : Longint);
  346. begin
  347. TMyFieldMap(FieldMap).MyInteger.AsInteger:=aValue;
  348. end;
  349. Procedure TMyTypeSafeAccess.SetMyByteInteger (AValue : Byte);
  350. begin
  351. TMyFieldMap(FieldMap).MyByteInteger.AsInteger:=aValue;
  352. end;
  353. Procedure TMyTypeSafeAccess.SetMySmallintInteger (AValue : SmallInt);
  354. begin
  355. TMyFieldMap(FieldMap).MySmallintInteger.AsInteger:=aValue;
  356. end;
  357. Procedure TMyTypeSafeAccess.SetMyShortIntInteger (AValue : ShortInt);
  358. begin
  359. TMyFieldMap(FieldMap).MyShortIntInteger.AsInteger:=aValue;
  360. end;
  361. Procedure TMyTypeSafeAccess.SetMyCardinalInteger (AValue : Cardinal);
  362. begin
  363. TMyFieldMap(FieldMap).MyCardinalInteger.AsInteger:=aValue;
  364. end;
  365. Procedure TMyTypeSafeAccess.SetMyFloat (AValue : Double);
  366. begin
  367. TMyFieldMap(FieldMap).MyFloat.AsFLoat:=aValue;
  368. end;
  369. Procedure TMyTypeSafeAccess.SetMyWord (AValue : Word);
  370. begin
  371. TMyFieldMap(FieldMap).MyWord.AsInteger:=aValue;
  372. end;
  373. Procedure TMyTypeSafeAccess.SetMyBoolean (AValue : Boolean);
  374. begin
  375. TMyFieldMap(FieldMap).MyBoolean.AsBoolean:=aValue;
  376. end;
  377. Procedure TMyTypeSafeAccess.SetMyInt64 (AValue : Int64);
  378. begin
  379. TMyFieldMap(FieldMap).MyInt64.AsLargeInt:=aValue;
  380. end;
  381. Procedure TMyTypeSafeAccess.SetMyQWordLargeInt (AValue : QWord);
  382. begin
  383. TMyFieldMap(FieldMap).MyQWordLargeInt.AsLargeInt:=aValue;
  384. end;
  385. Class Function TMyTypeSafeAccess.FieldMapClass : TFieldMapClass;
  386. begin
  387. Result:=TMyFieldMap;
  388. end;
  389. { TMyFieldMap }
  390. Procedure TMyFieldMap.InitFields;
  391. begin
  392. FMyString:=FieldByName('MyString');
  393. FMyFixedChar:=FieldByName('MyFixedChar');
  394. FMyWideString:=FieldByName('MyWideString');
  395. FMyDateTime:=FieldByName('MyDateTime');
  396. FMyUnicodeString:=FieldByName('MyUnicodeString');
  397. FMyUTF8String:=FieldByName('MyUTF8String');
  398. FMyFixedWideString:=FieldByName('MyFixedWideString');
  399. FMyInteger:=FieldByName('MyInteger');
  400. FMyByteInteger:=FieldByName('MyByteInteger');
  401. FMySmallintInteger:=FieldByName('MySmallintInteger');
  402. FMyShortIntInteger:=FieldByName('MyShortIntInteger');
  403. FMyCardinalInteger:=FieldByName('MyCardinalInteger');
  404. FMyFloat:=FieldByName('MyFloat');
  405. FMyWord:=FieldByName('MyWord');
  406. FMyBoolean:=FieldByName('MyBoolean');
  407. FMyInt64:=FieldByName('MyInt64');
  408. FMyQWordLargeInt:=FieldByName('MyQWordLargeInt');
  409. FMyBlob:=FieldByName('MyBlob');
  410. end;
  411. Class Function TMyTypeSafeAccess.CreateQuery(aConnection : TSQLConnection; aTransaction : TSQLTransaction) : TMyTypeSafeAccess;
  412. begin
  413. Result:=CreateQuery(SQLMyTypeSafeAccess,aConnection,aTransaction);
  414. end;
  415. Class Function TMyTypeSafeAccess.CreateQuery(aSQL : String; aConnection : TSQLConnection; aTransaction : TSQLTransaction) : TMyTypeSafeAccess;
  416. Var
  417. Q : TSQLQuery;
  418. MySQL : String;
  419. begin
  420. If aSQL='' then
  421. MySQL:=SQLMyTypeSafeAccess
  422. else
  423. MySQL:=aSQL;
  424. Q:=TSQLQuery.Create(aConnection);
  425. If aTransaction<>Nil then
  426. Q.Transaction:=aTransaction;
  427. Q.Database:=aConnection;
  428. Q.SQL.Text:=MySQL;
  429. Result:=TMyTypeSafeAccess.Create(Q,True);
  430. end;
  431. Class Function TMyTypeSafeAccess.GetQuery(aConnection : TSQLConnection; aTransaction : TSQLTransaction) : IMyTypeSafeAccess;
  432. begin
  433. Result:=CreateQuery(aConnection,aTransaction);
  434. end;
  435. Class Function TMyTypeSafeAccess.GetQuery(aSQL : String; aConnection : TSQLConnection; aTransaction : TSQLTransaction) : IMyTypeSafeAccess;
  436. begin
  437. Result:=CreateQuery(aSQL,aConnection,aTransaction);
  438. end;
  439. Procedure TMyTypeSafeAccess.ApplyUpdates;
  440. begin
  441. If Dataset is TSQLQuery then
  442. (Dataset as TSQLQuery).ApplyUpdates;
  443. end;
  444. end.