odbcsql.inc 69 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792
  1. {$ifdef fpc}
  2. {$mode objfpc}
  3. {$macro on}
  4. {$endif}
  5. {$h+}
  6. {$ifdef fpc}
  7. // define ODBC version 3.52 by default for Windows and MAC and 3.51 for Linux/Unix
  8. {$if defined(WINDOWS) or defined(DARWIN)}
  9. {$define ODBCVER:=$0352}
  10. {$else}
  11. {$define ODBCVER:=$0351}
  12. {$endif}
  13. {$else fpc}
  14. {$define ODBCVER:=$0352}
  15. {$endif fpc}
  16. {$if ODBCVER >= $0300}
  17. {$define ODBCVER3}
  18. {$endif}
  19. {$if ODBCVER >= $0350}
  20. {$define ODBCVER35}
  21. {$endif}
  22. {$if ODBCVER >= $0352}
  23. {$define ODBCVER352}
  24. {$endif}
  25. {$ifndef DYNLOADINGODBC}
  26. {$IFDEF WINDOWS}
  27. { $linklib odbc32}
  28. {$ELSE}
  29. {$linklib odbc}
  30. {$ENDIF}
  31. {$endif}
  32. interface
  33. uses
  34. Dynlibs,
  35. ctypes,
  36. sysutils;
  37. {$IFDEF Unix}
  38. {$DEFINE extdecl:=cdecl}
  39. const
  40. odbclib = 'libodbc.'+sharedsuffix;
  41. {$ENDIF}
  42. {$IFDEF Windows}
  43. {$DEFINE extdecl:=stdcall}
  44. const
  45. odbclib = 'odbc32.dll';
  46. {$ENDIF}
  47. (* DATA TYPES CORRESPONDENCE
  48. BDE fields ODBC types
  49. ---------- ------------------
  50. ftBlob SQL_BINARY
  51. ftBoolean SQL_BIT
  52. ftDate SQL_TYPE_DATE
  53. ftTime SQL_TYPE_TIME
  54. ftDateTime SQL_TYPE_TIMESTAMP
  55. ftInteger SQL_INTEGER
  56. ftSmallint SQL_SMALLINT
  57. ftFloat SQL_DOUBLE
  58. ftString SQL_CHAR
  59. ftMemo SQL_BINARY // SQL_VARCHAR
  60. *)
  61. type
  62. SQLCHAR = cuchar;
  63. SQLSCHAR = cschar;
  64. SQLSMALLINT = csshort;
  65. SQLUSMALLINT = cushort;
  66. SQLINTEGER = clong;
  67. SQLUINTEGER = culong;
  68. SQLLEN = {$IFDEF ODBCVER352}PtrInt{$ELSE}SQLINTEGER{$ENDIF};
  69. SQLULEN = {$IFDEF ODBCVER352}PtrUInt{$ELSE}SQLUINTEGER{$ENDIF};
  70. SQLREAL = cfloat;
  71. SQLDOUBLE = cdouble;
  72. SQLFLOAT = cdouble;
  73. SQLRETURN = SQLSMALLINT;
  74. SQLPOINTER = pointer;
  75. SQLHANDLE = pointer;
  76. SQLHENV = SQLHANDLE;
  77. SQLHDBC = SQLHANDLE;
  78. SQLHSTMT = SQLHANDLE;
  79. SQLHDESC = SQLHANDLE;
  80. SQLHWND = pointer;
  81. SQLSETPOSIROW= {$IF DEFINED(CPU64) AND DEFINED(ODBCVER352)}cuint64{$ELSE}SQLUSMALLINT{$ENDIF};
  82. PSQLCHAR = PChar;
  83. PSQLSMALLINT = ^SQLSMALLINT;
  84. PSQLUSMALLINT = ^SQLUSMALLINT;
  85. PSQLINTEGER = ^SQLINTEGER;
  86. PSQLUINTEGER = ^SQLUINTEGER;
  87. PSQLLEN = ^SQLLEN;
  88. PSQLULEN = ^SQLULEN;
  89. PSQLREAL = ^SQLREAL;
  90. PSQLDOUBLE = ^SQLDOUBLE;
  91. PSQLFLOAT = ^SQLFLOAT;
  92. PSQLHANDLE = ^SQLHANDLE;
  93. const
  94. { SQL data type codes }
  95. SQL_UNKNOWN_TYPE = 0;
  96. SQL_LONGVARCHAR =(-1);
  97. SQL_BINARY =(-2);
  98. SQL_VARBINARY =(-3);
  99. SQL_LONGVARBINARY =(-4);
  100. SQL_BIGINT =(-5);
  101. SQL_TINYINT =(-6);
  102. SQL_BIT =(-7);
  103. SQL_WCHAR =(-8);
  104. SQL_WVARCHAR =(-9);
  105. SQL_WLONGVARCHAR =(-10);
  106. SQL_CHAR = 1;
  107. SQL_NUMERIC = 2;
  108. SQL_DECIMAL = 3;
  109. SQL_INTEGER = 4;
  110. SQL_SMALLINT = 5;
  111. SQL_FLOAT = 6;
  112. SQL_REAL = 7;
  113. SQL_DOUBLE = 8;
  114. {$ifdef ODBCVER3}
  115. SQL_DATETIME = 9;
  116. {$endif}
  117. SQL_VARCHAR = 12;
  118. {$ifdef ODBCVER3}
  119. SQL_TYPE_DATE = 91;
  120. SQL_TYPE_TIME = 92;
  121. SQL_TYPE_TIMESTAMP= 93;
  122. // Microsoft has -150 thru -199 reserved for Microsoft SQL Server Native Client driver usage.
  123. SQL_SS_VARIANT = -150;
  124. SQL_SS_UDT = -151;
  125. SQL_SS_XML = -152;
  126. SQL_SS_TABLE = -153;
  127. SQL_SS_TIME2 = -154;
  128. SQL_SS_TIMESTAMPOFFSET = -155;
  129. {$endif}
  130. SQL_DATE = 9;
  131. SQL_TIME = 10;
  132. SQL_TIMESTAMP = 11;
  133. {$if ODBCVER >= $0300}
  134. SQL_INTERVAL = 10;
  135. {$endif}
  136. {$if ODBCVER >= $0350}
  137. SQL_GUID = -11;
  138. {$endif}
  139. { interval codes}
  140. {$ifdef ODBCVER3}
  141. SQL_CODE_YEAR = 1;
  142. SQL_CODE_MONTH = 2;
  143. SQL_CODE_DAY = 3;
  144. SQL_CODE_HOUR = 4;
  145. SQL_CODE_MINUTE = 5;
  146. SQL_CODE_SECOND = 6;
  147. SQL_CODE_YEAR_TO_MONTH = 7;
  148. SQL_CODE_DAY_TO_HOUR = 8;
  149. SQL_CODE_DAY_TO_MINUTE = 9;
  150. SQL_CODE_DAY_TO_SECOND = 10;
  151. SQL_CODE_HOUR_TO_MINUTE = 11;
  152. SQL_CODE_HOUR_TO_SECOND = 12;
  153. SQL_CODE_MINUTE_TO_SECOND = 13;
  154. SQL_INTERVAL_YEAR = 100 + SQL_CODE_YEAR;
  155. SQL_INTERVAL_MONTH = 100 + SQL_CODE_MONTH;
  156. SQL_INTERVAL_DAY = 100 + SQL_CODE_DAY;
  157. SQL_INTERVAL_HOUR = 100 + SQL_CODE_HOUR;
  158. SQL_INTERVAL_MINUTE = 100 + SQL_CODE_MINUTE;
  159. SQL_INTERVAL_SECOND = 100 + SQL_CODE_SECOND;
  160. SQL_INTERVAL_YEAR_TO_MONTH = 100 + SQL_CODE_YEAR_TO_MONTH;
  161. SQL_INTERVAL_DAY_TO_HOUR = 100 + SQL_CODE_DAY_TO_HOUR;
  162. SQL_INTERVAL_DAY_TO_MINUTE = 100 + SQL_CODE_DAY_TO_MINUTE;
  163. SQL_INTERVAL_DAY_TO_SECOND = 100 + SQL_CODE_DAY_TO_SECOND;
  164. SQL_INTERVAL_HOUR_TO_MINUTE = 100 + SQL_CODE_HOUR_TO_MINUTE;
  165. SQL_INTERVAL_HOUR_TO_SECOND = 100 + SQL_CODE_HOUR_TO_SECOND;
  166. SQL_INTERVAL_MINUTE_TO_SECOND = 100 + SQL_CODE_MINUTE_TO_SECOND;
  167. {$else}
  168. SQL_INTERVAL_YEAR = -80;
  169. SQL_INTERVAL_MONTH = -81;
  170. SQL_INTERVAL_YEAR_TO_MONTH = -82;
  171. SQL_INTERVAL_DAY = -83;
  172. SQL_INTERVAL_HOUR = -84;
  173. SQL_INTERVAL_MINUTE = -85;
  174. SQL_INTERVAL_SECOND = -86;
  175. SQL_INTERVAL_DAY_TO_HOUR = -87;
  176. SQL_INTERVAL_DAY_TO_MINUTE = -88;
  177. SQL_INTERVAL_DAY_TO_SECOND = -89;
  178. SQL_INTERVAL_HOUR_TO_MINUTE = -90;
  179. SQL_INTERVAL_HOUR_TO_SECOND = -91;
  180. SQL_INTERVAL_MINUTE_TO_SECOND = -92;
  181. {$endif}
  182. { Unicode data type codes }
  183. {$ifndef ODBCVER3}
  184. SQL_UNICODE = -95;
  185. SQL_UNICODE_VARCHAR = -96;
  186. SQL_UNICODE_LONGVARCHAR = -97;
  187. SQL_UNICODE_CHAR = SQL_UNICODE;
  188. {$else}
  189. { The previous definitions for SQL_UNICODE_ are historical and obsolete }
  190. SQL_UNICODE = SQL_WCHAR;
  191. SQL_UNICODE_VARCHAR = SQL_WVARCHAR;
  192. SQL_UNICODE_LONGVARCHAR = SQL_WLONGVARCHAR;
  193. SQL_UNICODE_CHAR = SQL_WCHAR;
  194. {$endif}
  195. { C datatype to SQL datatype mapping }
  196. SQL_C_CHAR = SQL_CHAR;
  197. SQL_C_WCHAR = SQL_WCHAR;
  198. SQL_C_LONG = SQL_INTEGER;
  199. SQL_C_SHORT = SQL_SMALLINT;
  200. SQL_C_FLOAT = SQL_REAL;
  201. SQL_C_DOUBLE = SQL_DOUBLE;
  202. {$ifdef ODBCVER3}
  203. SQL_C_NUMERIC = SQL_NUMERIC;
  204. {$endif}
  205. SQL_C_DEFAULT = 99;
  206. SQL_SIGNED_OFFSET = -20;
  207. SQL_UNSIGNED_OFFSET = -22;
  208. SQL_C_DATE = SQL_DATE;
  209. SQL_C_TIME = SQL_TIME;
  210. SQL_C_TIMESTAMP = SQL_TIMESTAMP;
  211. {$ifdef ODBCVER3}
  212. SQL_C_TYPE_DATE = SQL_TYPE_DATE;
  213. SQL_C_TYPE_TIME = SQL_TYPE_TIME;
  214. SQL_C_TYPE_TIMESTAMP = SQL_TYPE_TIMESTAMP;
  215. SQL_C_INTERVAL_YEAR = SQL_INTERVAL_YEAR;
  216. SQL_C_INTERVAL_MONTH = SQL_INTERVAL_MONTH;
  217. SQL_C_INTERVAL_DAY = SQL_INTERVAL_DAY;
  218. SQL_C_INTERVAL_HOUR = SQL_INTERVAL_HOUR;
  219. SQL_C_INTERVAL_MINUTE = SQL_INTERVAL_MINUTE;
  220. SQL_C_INTERVAL_SECOND = SQL_INTERVAL_SECOND;
  221. SQL_C_INTERVAL_YEAR_TO_MONTH = SQL_INTERVAL_YEAR_TO_MONTH;
  222. SQL_C_INTERVAL_DAY_TO_HOUR = SQL_INTERVAL_DAY_TO_HOUR;
  223. SQL_C_INTERVAL_DAY_TO_MINUTE = SQL_INTERVAL_DAY_TO_MINUTE;
  224. SQL_C_INTERVAL_DAY_TO_SECOND = SQL_INTERVAL_DAY_TO_SECOND;
  225. SQL_C_INTERVAL_HOUR_TO_MINUTE = SQL_INTERVAL_HOUR_TO_MINUTE;
  226. SQL_C_INTERVAL_HOUR_TO_SECOND = SQL_INTERVAL_HOUR_TO_SECOND;
  227. SQL_C_INTERVAL_MINUTE_TO_SECOND = SQL_INTERVAL_MINUTE_TO_SECOND;
  228. {$endif}
  229. SQL_C_BINARY = SQL_BINARY;
  230. SQL_C_BIT = SQL_BIT;
  231. {$ifdef ODBCVER3}
  232. SQL_C_SBIGINT = SQL_BIGINT+SQL_SIGNED_OFFSET; // SIGNED BIGINT
  233. SQL_C_UBIGINT = SQL_BIGINT+SQL_UNSIGNED_OFFSET; // UNSIGNED BIGINT
  234. {$endif}
  235. SQL_C_TINYINT = SQL_TINYINT;
  236. SQL_C_SLONG = SQL_C_LONG +SQL_SIGNED_OFFSET; // SIGNED INTEGER
  237. SQL_C_SSHORT = SQL_C_SHORT+SQL_SIGNED_OFFSET; // SIGNED SMALLINT
  238. SQL_C_STINYINT = SQL_TINYINT+SQL_SIGNED_OFFSET; // SIGNED TINYINT
  239. SQL_C_ULONG = SQL_C_LONG +SQL_UNSIGNED_OFFSET; // UNSIGNED INTEGER
  240. SQL_C_USHORT = SQL_C_SHORT+SQL_UNSIGNED_OFFSET; // UNSIGNED SMALLINT
  241. SQL_C_UTINYINT = SQL_TINYINT+SQL_UNSIGNED_OFFSET; // UNSIGNED TINYINT
  242. SQL_C_BOOKMARK = {$if defined(CPU64) and defined(ODBCVER352)}SQL_C_UBIGINT{$else}SQL_C_ULONG{$endif}; // BOOKMARK
  243. {$ifdef ODBCVER35}
  244. SQL_C_GUID = SQL_GUID;
  245. {$endif}
  246. SQL_TYPE_NULL = 0;
  247. {$ifndef ODBCVER3}
  248. SQL_TYPE_MIN = SQL_BIT;
  249. SQL_TYPE_MAX = SQL_VARCHAR;
  250. {$endif}
  251. {$ifdef ODBCVER3}
  252. SQL_C_VARBOOKMARK = SQL_C_BINARY;
  253. {$endif}
  254. SQL_API_SQLDESCRIBEPARAM=58;
  255. SQL_NO_TOTAL = -4;
  256. type
  257. SQL_DATE_STRUCT = packed record
  258. Year : SQLSMALLINT;
  259. Month : SQLUSMALLINT;
  260. Day : SQLUSMALLINT;
  261. end;
  262. PSQL_DATE_STRUCT = ^SQL_DATE_STRUCT;
  263. SQL_TIME_STRUCT = packed record
  264. Hour : SQLUSMALLINT;
  265. Minute : SQLUSMALLINT;
  266. Second : SQLUSMALLINT;
  267. end;
  268. PSQL_TIME_STRUCT = ^SQL_TIME_STRUCT;
  269. SQL_TIMESTAMP_STRUCT = packed record
  270. Year : SQLUSMALLINT;
  271. Month : SQLUSMALLINT;
  272. Day : SQLUSMALLINT;
  273. Hour : SQLUSMALLINT;
  274. Minute : SQLUSMALLINT;
  275. Second : SQLUSMALLINT;
  276. Fraction : SQLUINTEGER;
  277. end;
  278. PSQL_TIMESTAMP_STRUCT = ^SQL_TIMESTAMP_STRUCT;
  279. SQL_NUMERIC_STRUCT = packed record
  280. precision: SQLCHAR;
  281. scale : SQLSCHAR;
  282. sign : SQLCHAR; // 1 if positive, 0 if negative
  283. val : array[0..15] of SQLCHAR;
  284. end;
  285. const
  286. SQL_NAME_LEN = 128;
  287. SQL_OV_ODBC3 = 3;
  288. SQL_OV_ODBC2 = 2;
  289. SQL_ATTR_ODBC_VERSION = 200;
  290. { Options for SQLDriverConnect }
  291. SQL_DRIVER_NOPROMPT = 0;
  292. SQL_DRIVER_COMPLETE = 1;
  293. SQL_DRIVER_PROMPT = 2;
  294. SQL_DRIVER_COMPLETE_REQUIRED = 3;
  295. { whether an attribute is a pointer or not }
  296. SQL_IS_POINTER = (-4);
  297. SQL_IS_UINTEGER = (-5);
  298. SQL_IS_INTEGER = (-6);
  299. SQL_IS_USMALLINT = (-7);
  300. SQL_IS_SMALLINT = (-8);
  301. { SQLExtendedFetch "fFetchType" values }
  302. SQL_FETCH_BOOKMARK = 8;
  303. SQL_SCROLL_OPTIONS = 44;
  304. { SQL_USE_BOOKMARKS options }
  305. SQL_UB_OFF = 0;
  306. SQL_UB_ON = 1;
  307. SQL_UB_DEFAULT = SQL_UB_OFF;
  308. SQL_UB_FIXED = SQL_UB_ON;
  309. SQL_UB_VARIABLE = 2;
  310. { SQL_SCROLL_OPTIONS masks }
  311. SQL_SO_FORWARD_ONLY = $01;
  312. SQL_SO_KEYSET_DRIVEN = $02;
  313. SQL_SO_DYNAMIC = $04;
  314. SQL_SO_MIXED = $08;
  315. SQL_SO_STATIC = $10;
  316. SQL_BOOKMARK_PERSISTENCE = 82;
  317. SQL_STATIC_SENSITIVITY = 83;
  318. { SQL_BOOKMARK_PERSISTENCE values }
  319. SQL_BP_CLOSE = $01;
  320. SQL_BP_DELETE = $02;
  321. SQL_BP_DROP = $04;
  322. SQL_BP_TRANSACTION = $08;
  323. SQL_BP_UPDATE = $10;
  324. SQL_BP_OTHER_HSTMT = $20;
  325. SQL_BP_SCROLL = $40;
  326. SQL_DYNAMIC_CURSOR_ATTRIBUTES1 = 144;
  327. SQL_DYNAMIC_CURSOR_ATTRIBUTES2 = 145;
  328. SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 = 146;
  329. SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 = 147;
  330. SQL_INDEX_KEYWORDS = 148;
  331. SQL_INFO_SCHEMA_VIEWS = 149;
  332. SQL_KEYSET_CURSOR_ATTRIBUTES1 = 150;
  333. SQL_KEYSET_CURSOR_ATTRIBUTES2 = 151;
  334. SQL_STATIC_CURSOR_ATTRIBUTES1 = 167;
  335. SQL_STATIC_CURSOR_ATTRIBUTES2 = 168;
  336. { supported SQLFetchScroll FetchOrientation's }
  337. SQL_CA1_NEXT = 1;
  338. SQL_CA1_ABSOLUTE = 2;
  339. SQL_CA1_RELATIVE = 4;
  340. SQL_CA1_BOOKMARK = 8;
  341. { supported SQLSetPos LockType's }
  342. SQL_CA1_LOCK_NO_CHANGE= $40;
  343. SQL_CA1_LOCK_EXCLUSIVE= $80;
  344. SQL_CA1_LOCK_UNLOCK =$100;
  345. { supported SQLSetPos Operations }
  346. SQL_CA1_POS_POSITION = $200;
  347. SQL_CA1_POS_UPDATE = $400;
  348. SQL_CA1_POS_DELETE = $800;
  349. SQL_CA1_POS_REFRESH =$1000;
  350. { positioned updates and deletes }
  351. SQL_CA1_POSITIONED_UPDATE=$2000;
  352. SQL_CA1_POSITIONED_DELETE=$4000;
  353. SQL_CA1_SELECT_FOR_UPDATE=$8000;
  354. { supported SQLBulkOperations operations }
  355. SQL_CA1_BULK_ADD =$10000;
  356. SQL_CA1_BULK_UPDATE_BY_BOOKMARK =$20000;
  357. SQL_CA1_BULK_DELETE_BY_BOOKMARK =$40000;
  358. SQL_CA1_BULK_FETCH_BY_BOOKMARK =$80000;
  359. { supported values for SQL_ATTR_SCROLL_CONCURRENCY }
  360. SQL_CA2_READ_ONLY_CONCURRENCY = 1;
  361. SQL_CA2_LOCK_CONCURRENCY = 2;
  362. SQL_CA2_OPT_ROWVER_CONCURRENCY= 4;
  363. SQL_CA2_OPT_VALUES_CONCURRENCY= 8;
  364. { sensitivity of the cursor to its own inserts, deletes, and updates }
  365. SQL_CA2_SENSITIVITY_ADDITIONS =$10;
  366. SQL_CA2_SENSITIVITY_DELETIONS =$20;
  367. SQL_CA2_SENSITIVITY_UPDATES =$40;
  368. { semantics of SQL_ATTR_MAX_ROWS }
  369. SQL_CA2_MAX_ROWS_SELECT = $80;
  370. SQL_CA2_MAX_ROWS_INSERT =$100;
  371. SQL_CA2_MAX_ROWS_DELETE =$200;
  372. SQL_CA2_MAX_ROWS_UPDATE =$400;
  373. SQL_CA2_MAX_ROWS_CATALOG =$800;
  374. SQL_CA2_MAX_ROWS_AFFECTS_ALL =(SQL_CA2_MAX_ROWS_SELECT or
  375. SQL_CA2_MAX_ROWS_INSERT or SQL_CA2_MAX_ROWS_DELETE or
  376. SQL_CA2_MAX_ROWS_UPDATE or SQL_CA2_MAX_ROWS_CATALOG);
  377. { semantics of SQL_DIAG_CURSOR_ROW_COUNT }
  378. SQL_CA2_CRC_EXACT = $1000;
  379. SQL_CA2_CRC_APPROXIMATE = $2000;
  380. { the kinds of positioned statements that can be simulated }
  381. SQL_CA2_SIMULATE_NON_UNIQUE = $4000;
  382. SQL_CA2_SIMULATE_TRY_UNIQUE = $8000;
  383. SQL_CA2_SIMULATE_UNIQUE =$10000;
  384. { Operations in SQLBulkOperations }
  385. SQL_ADD = 4;
  386. SQL_SETPOS_MAX_OPTION_VALUE = SQL_ADD;
  387. SQL_UPDATE_BY_BOOKMARK = 5;
  388. SQL_DELETE_BY_BOOKMARK = 6;
  389. SQL_FETCH_BY_BOOKMARK = 7;
  390. { Operations in SQLSetPos }
  391. SQL_POSITION = 0;
  392. SQL_REFRESH = 1;
  393. SQL_UPDATE = 2;
  394. SQL_DELETE = 3;
  395. { Lock options in SQLSetPos }
  396. SQL_LOCK_NO_CHANGE = 0;
  397. SQL_LOCK_EXCLUSIVE = 1;
  398. SQL_LOCK_UNLOCK = 2;
  399. { SQLExtendedFetch "rgfRowStatus" element values }
  400. SQL_ROW_SUCCESS = 0;
  401. SQL_ROW_DELETED = 1;
  402. SQL_ROW_UPDATED = 2;
  403. SQL_ROW_NOROW = 3;
  404. SQL_ROW_ADDED = 4;
  405. SQL_ROW_ERROR = 5;
  406. SQL_ROW_SUCCESS_WITH_INFO = 6;
  407. SQL_ROW_PROCEED = 0;
  408. SQL_ROW_IGNORE = 1;
  409. SQL_MAX_DSN_LENGTH = 32; { maximum data source name size }
  410. SQL_MAX_OPTION_STRING_LENGTH = 256;
  411. { SQL_ODBC_CURSORS options }
  412. SQL_CUR_USE_IF_NEEDED = 0;
  413. SQL_CUR_USE_ODBC = 1;
  414. SQL_CUR_USE_DRIVER = 2;
  415. SQL_CUR_DEFAULT = SQL_CUR_USE_DRIVER;
  416. SQL_PARAM_TYPE_UNKNOWN = 0;
  417. SQL_PARAM_INPUT = 1;
  418. SQL_PARAM_INPUT_OUTPUT = 2;
  419. SQL_RESULT_COL = 3;
  420. SQL_PARAM_OUTPUT = 4;
  421. SQL_RETURN_VALUE = 5;
  422. { special length/indicator values }
  423. SQL_NULL_DATA = (-1);
  424. SQL_DATA_AT_EXEC = (-2);
  425. SQL_SUCCESS = 0;
  426. SQL_SUCCESS_WITH_INFO = 1;
  427. SQL_NO_DATA = 100;
  428. SQL_ERROR = (-1);
  429. SQL_INVALID_HANDLE = (-2);
  430. SQL_STILL_EXECUTING = 2;
  431. SQL_NEED_DATA = 99;
  432. { flags for null-terminated string }
  433. SQL_NTS = (-3);
  434. { maximum message length }
  435. SQL_MAX_MESSAGE_LENGTH = 512;
  436. { date/time length constants }
  437. {$ifdef ODBCVER3}
  438. SQL_DATE_LEN = 10;
  439. SQL_TIME_LEN = 8; { add P+1 if precision is nonzero }
  440. SQL_TIMESTAMP_LEN = 19; { add P+1 if precision is nonzero }
  441. {$endif}
  442. { handle type identifiers }
  443. SQL_HANDLE_ENV = 1;
  444. SQL_HANDLE_DBC = 2;
  445. SQL_HANDLE_STMT = 3;
  446. SQL_HANDLE_DESC = 4;
  447. {$ifdef ODBCVER3}
  448. { environment attribute }
  449. SQL_ATTR_OUTPUT_NTS = 10001;
  450. { connection attributes }
  451. SQL_ATTR_AUTO_IPD = 10001;
  452. SQL_ATTR_METADATA_ID = 10014;
  453. {$endif} { ODBCVER >= 0x0300 }
  454. { statement attributes }
  455. SQL_ATTR_APP_ROW_DESC = 10010;
  456. SQL_ATTR_APP_PARAM_DESC = 10011;
  457. SQL_ATTR_IMP_ROW_DESC = 10012;
  458. SQL_ATTR_IMP_PARAM_DESC = 10013;
  459. SQL_ATTR_CURSOR_SCROLLABLE = (-1);
  460. SQL_ATTR_CURSOR_SENSITIVITY = (-2);
  461. SQL_QUERY_TIMEOUT =0;
  462. SQL_MAX_ROWS =1;
  463. SQL_NOSCAN =2;
  464. SQL_MAX_LENGTH =3;
  465. SQL_ASYNC_ENABLE =4; // same as SQL_ATTR_ASYNC_ENABLE */
  466. SQL_BIND_TYPE =5;
  467. SQL_CURSOR_TYPE = 6;
  468. SQL_CONCURRENCY = 7;
  469. SQL_KEYSET_SIZE =8;
  470. SQL_ROWSET_SIZE =9;
  471. SQL_SIMULATE_CURSOR =10;
  472. SQL_RETRIEVE_DATA =11;
  473. SQL_USE_BOOKMARKS =12;
  474. SQL_GET_BOOKMARK =13; // GetStmtOption Only */
  475. SQL_ROW_NUMBER =14 ; // GetStmtOption Only */
  476. SQL_ATTR_CURSOR_TYPE = SQL_CURSOR_TYPE;
  477. SQL_ATTR_CONCURRENCY = SQL_CONCURRENCY;
  478. SQL_ATTR_FETCH_BOOKMARK_PTR = 16;
  479. SQL_ATTR_ROW_STATUS_PTR = 25;
  480. SQL_ATTR_ROWS_FETCHED_PTR = 26;
  481. SQL_ATTR_ROW_NUMBER = SQL_ROW_NUMBER;
  482. SQL_ATTR_MAX_ROWS = SQL_MAX_ROWS;
  483. SQL_ATTR_USE_BOOKMARKS = SQL_USE_BOOKMARKS;
  484. //* connection attributes */
  485. SQL_ACCESS_MODE =101;
  486. SQL_AUTOCOMMIT =102;
  487. SQL_LOGIN_TIMEOUT =103;
  488. SQL_OPT_TRACE =104;
  489. SQL_OPT_TRACEFILE =105;
  490. SQL_TRANSLATE_DLL =106;
  491. SQL_TRANSLATE_OPTION =107;
  492. SQL_TXN_ISOLATION =108;
  493. SQL_CURRENT_QUALIFIER =109;
  494. SQL_ODBC_CURSORS =110;
  495. SQL_QUIET_MODE =111;
  496. SQL_PACKET_SIZE =112;
  497. //* connection attributes with new names */
  498. SQL_ATTR_ACCESS_MODE =SQL_ACCESS_MODE;
  499. SQL_ATTR_AUTOCOMMIT =SQL_AUTOCOMMIT;
  500. SQL_ATTR_CONNECTION_DEAD =1209; //* GetConnectAttr only */
  501. SQL_ATTR_CONNECTION_TIMEOUT =113;
  502. SQL_ATTR_CURRENT_CATALOG =SQL_CURRENT_QUALIFIER;
  503. SQL_ATTR_DISCONNECT_BEHAVIOR=114;
  504. SQL_ATTR_ENLIST_IN_DTC =1207;
  505. SQL_ATTR_ENLIST_IN_XA =1208;
  506. SQL_ATTR_LOGIN_TIMEOUT =SQL_LOGIN_TIMEOUT;
  507. SQL_ATTR_ODBC_CURSORS =SQL_ODBC_CURSORS;
  508. SQL_ATTR_PACKET_SIZE =SQL_PACKET_SIZE;
  509. SQL_ATTR_QUIET_MODE =SQL_QUIET_MODE;
  510. SQL_ATTR_TRACE =SQL_OPT_TRACE;
  511. SQL_ATTR_TRACEFILE =SQL_OPT_TRACEFILE;
  512. SQL_ATTR_TRANSLATE_LIB =SQL_TRANSLATE_DLL;
  513. SQL_ATTR_TRANSLATE_OPTION =SQL_TRANSLATE_OPTION;
  514. SQL_ATTR_TXN_ISOLATION =SQL_TXN_ISOLATION;
  515. //* SQL_ACCESS_MODE options */
  516. SQL_MODE_READ_WRITE =0;
  517. SQL_MODE_READ_ONLY =1;
  518. SQL_MODE_DEFAULT =SQL_MODE_READ_WRITE;
  519. //* SQL_AUTOCOMMIT options */
  520. SQL_AUTOCOMMIT_OFF = 0;
  521. SQL_AUTOCOMMIT_ON = 1;
  522. SQL_AUTOCOMMIT_DEFAULT = SQL_AUTOCOMMIT_ON;
  523. { SQL_ATTR_CURSOR_SCROLLABLE values }
  524. SQL_NONSCROLLABLE = 0;
  525. SQL_SCROLLABLE = 1;
  526. { SQL_CURSOR_TYPE options }
  527. SQL_CURSOR_FORWARD_ONLY = 0;
  528. SQL_CURSOR_KEYSET_DRIVEN = 1;
  529. SQL_CURSOR_DYNAMIC = 2;
  530. SQL_CURSOR_STATIC = 3;
  531. SQL_CURSOR_TYPE_DEFAULT = SQL_CURSOR_FORWARD_ONLY;{ Default value }
  532. { SQL_CONCURRENCY options }
  533. SQL_CONCUR_READ_ONLY = 1;
  534. SQL_CONCUR_LOCK = 2;
  535. SQL_CONCUR_ROWVER = 3;
  536. SQL_CONCUR_VALUES = 4;
  537. SQL_CONCUR_DEFAULT = SQL_CONCUR_READ_ONLY; { Default value }
  538. { identifiers of fields in the SQL descriptor }
  539. {$ifdef ODBCVER3}
  540. SQL_DESC_COUNT = 1001;
  541. SQL_DESC_TYPE = 1002;
  542. SQL_DESC_LENGTH = 1003;
  543. SQL_DESC_OCTET_LENGTH_PTR = 1004;
  544. SQL_DESC_PRECISION = 1005;
  545. SQL_DESC_SCALE = 1006;
  546. SQL_DESC_DATETIME_INTERVAL_CODE = 1007;
  547. SQL_DESC_NULLABLE = 1008;
  548. SQL_DESC_INDICATOR_PTR = 1009;
  549. SQL_DESC_DATA_PTR = 1010;
  550. SQL_DESC_NAME = 1011;
  551. SQL_DESC_UNNAMED = 1012;
  552. SQL_DESC_OCTET_LENGTH = 1013;
  553. SQL_DESC_ALLOC_TYPE = 1099;
  554. {$endif}
  555. { identifiers of fields in the diagnostics area }
  556. {$ifdef ODBCVER3}
  557. SQL_DIAG_RETURNCODE = 1;
  558. SQL_DIAG_NUMBER = 2;
  559. SQL_DIAG_ROW_COUNT = 3;
  560. SQL_DIAG_SQLSTATE = 4;
  561. SQL_DIAG_NATIVE = 5;
  562. SQL_DIAG_MESSAGE_TEXT = 6;
  563. SQL_DIAG_DYNAMIC_FUNCTION = 7;
  564. SQL_DIAG_CLASS_ORIGIN = 8;
  565. SQL_DIAG_SUBCLASS_ORIGIN = 9;
  566. SQL_DIAG_CONNECTION_NAME = 10;
  567. SQL_DIAG_SERVER_NAME = 11;
  568. SQL_DIAG_DYNAMIC_FUNCTION_CODE = 12;
  569. {$endif}
  570. { dynamic function codes }
  571. {$ifdef ODBCVER3}
  572. SQL_DIAG_ALTER_TABLE = 4;
  573. SQL_DIAG_CREATE_INDEX = (-1);
  574. SQL_DIAG_CREATE_TABLE = 77;
  575. SQL_DIAG_CREATE_VIEW = 84;
  576. SQL_DIAG_DELETE_WHERE = 19;
  577. SQL_DIAG_DROP_INDEX = (-2);
  578. SQL_DIAG_DROP_TABLE = 32;
  579. SQL_DIAG_DROP_VIEW = 36;
  580. SQL_DIAG_DYNAMIC_DELETE_CURSOR = 38;
  581. SQL_DIAG_DYNAMIC_UPDATE_CURSOR = 81;
  582. SQL_DIAG_GRANT = 48;
  583. SQL_DIAG_INSERT = 50;
  584. SQL_DIAG_REVOKE = 59;
  585. SQL_DIAG_SELECT_CURSOR = 85;
  586. SQL_DIAG_UNKNOWN_STATEMENT = 0;
  587. SQL_DIAG_UPDATE_WHERE = 82;
  588. {$endif} { ODBCVER >= 0x0300 }
  589. { Statement attribute values for cursor sensitivity }
  590. {$ifdef ODBCVER3}
  591. SQL_UNSPECIFIED = 0;
  592. SQL_INSENSITIVE = 1;
  593. SQL_SENSITIVE = 2;
  594. {$endif}
  595. { GetTypeInfo() request for all data types }
  596. SQL_ALL_TYPES = 0;
  597. { Default conversion code for SQLBindCol(), SQLBindParam() and SQLGetData() }
  598. {$ifdef ODBCVER3}
  599. SQL_DEFAULT = 99;
  600. {$endif}
  601. { SQLGetData() code indicating that the application row descriptor
  602. specifies the data type }
  603. {$ifdef ODBCVER3}
  604. SQL_ARD_TYPE = (-99);
  605. {$endif}
  606. { SQL date/time type subcodes }
  607. {$ifdef ODBCVER3}
  608. SQL_CODE_DATE = 1;
  609. SQL_CODE_TIME = 2;
  610. SQL_CODE_TIMESTAMP = 3;
  611. {$endif}
  612. { CLI option values }
  613. {$ifdef ODBCVER3}
  614. SQL_FALSE = 0;
  615. SQL_TRUE = 1;
  616. {$endif}
  617. { values of NULLABLE field in descriptor }
  618. SQL_NO_NULLS = 0;
  619. SQL_NULLABLE = 1;
  620. { Value returned by SQLGetTypeInfo() to denote that it is
  621. not known whether or not a data type supports null values. }
  622. SQL_NULLABLE_UNKNOWN = 2;
  623. {
  624. /* Values returned by SQLGetTypeInfo() to show WHERE clause
  625. * supported
  626. #if (ODBCVER >= 0x0300)
  627. #define SQL_PRED_NONE 0
  628. #define SQL_PRED_CHAR 1
  629. #define SQL_PRED_BASIC 2
  630. #endif
  631. /* values of UNNAMED field in descriptor */
  632. #if (ODBCVER >= 0x0300)
  633. #define SQL_NAMED 0
  634. #define SQL_UNNAMED 1
  635. #endif
  636. /* values of ALLOC_TYPE field in descriptor */
  637. #if (ODBCVER >= 0x0300)
  638. #define SQL_DESC_ALLOC_AUTO 1
  639. #define SQL_DESC_ALLOC_USER 2
  640. #endif
  641. }
  642. { FreeStmt() options }
  643. SQL_CLOSE = 0;
  644. SQL_DROP = 1;
  645. SQL_UNBIND = 2;
  646. SQL_RESET_PARAMS = 3;
  647. { Codes used for FetchOrientation in SQLFetchScroll(),
  648. and in SQLDataSources() }
  649. SQL_FETCH_NEXT = 1;
  650. SQL_FETCH_FIRST = 2;
  651. {$ifdef odbcver3}
  652. SQL_FETCH_FIRST_USER = 31;
  653. SQL_FETCH_FIRST_SYSTEM = 32;
  654. {$endif}
  655. { Other codes used for FetchOrientation in SQLFetchScroll() }
  656. SQL_FETCH_LAST = 3;
  657. SQL_FETCH_PRIOR = 4;
  658. SQL_FETCH_ABSOLUTE = 5;
  659. SQL_FETCH_RELATIVE = 6;
  660. {
  661. /* SQLEndTran() options */
  662. #define SQL_COMMIT 0
  663. #define SQL_ROLLBACK 1}
  664. //* null handles returned by SQLAllocHandle() */
  665. SQL_NULL_HENV = SQLHENV(0);
  666. SQL_NULL_HDBC = SQLHDBC(0);
  667. SQL_NULL_HSTMT = SQLHSTMT(0);
  668. {$ifdef odbcver3}
  669. SQL_NULL_HDESC = SQLHDESC(0);
  670. {$endif}
  671. //* null handle used in place of parent handle when allocating HENV */
  672. SQL_NULL_HANDLE = SQLHANDLE(0);
  673. //* Values that may appear in the result set of SQLSpecialColumns() */
  674. SQL_SCOPE_CURROW = 0;
  675. SQL_SCOPE_TRANSACTION = 1;
  676. SQL_SCOPE_SESSION = 2;
  677. //* Column types and scopes in SQLSpecialColumns. */
  678. SQL_BEST_ROWID = 1;
  679. SQL_ROWVER = 2;
  680. {
  681. #define SQL_PC_UNKNOWN 0
  682. #if (ODBCVER >= 0x0300)
  683. #define SQL_PC_NON_PSEUDO 1
  684. #endif
  685. #define SQL_PC_PSEUDO 2
  686. }
  687. //* Reserved value for the IdentifierType argument of SQLSpecialColumns() */
  688. {$ifdef ODBCVER3}
  689. SQL_ROW_IDENTIFIER = 1;
  690. {$endif}
  691. //* Reserved values for UNIQUE argument of SQLStatistics() */
  692. SQL_INDEX_UNIQUE = 0;
  693. SQL_INDEX_ALL = 1;
  694. //* Reserved values for RESERVED argument of SQLStatistics() */
  695. SQL_QUICK = 0;
  696. SQL_ENSURE = 1;
  697. //* Values that may appear in the result set of SQLStatistics() */
  698. SQL_TABLE_STAT = 0;
  699. SQL_INDEX_CLUSTERED = 1;
  700. SQL_INDEX_HASHED = 2;
  701. SQL_INDEX_OTHER = 3;
  702. // SQL_INDEX_BTREE = ???;
  703. // SQL_INDEX_CONTENT = ???;
  704. {
  705. /* Information requested by SQLGetInfo() */
  706. #if (ODBCVER >= 0x0300)
  707. #define SQL_MAX_DRIVER_CONNECTIONS 0
  708. #define SQL_MAXIMUM_DRIVER_CONNECTIONS SQL_MAX_DRIVER_CONNECTIONS
  709. #define SQL_MAX_CONCURRENT_ACTIVITIES 1
  710. #define SQL_MAXIMUM_CONCURRENT_ACTIVITIES SQL_MAX_CONCURRENT_ACTIVITIES
  711. #endif
  712. #define SQL_FETCH_DIRECTION 8
  713. #define SQL_SEARCH_PATTERN_ESCAPE 14
  714. #define SQL_ACCESSIBLE_TABLES 19
  715. #define SQL_ACCESSIBLE_PROCEDURES 20
  716. #define SQL_CURSOR_COMMIT_BEHAVIOR 23
  717. #define SQL_DATA_SOURCE_READ_ONLY 25
  718. #define SQL_DEFAULT_TXN_ISOLATION 26
  719. #define SQL_MAX_COLUMN_NAME_LEN 30
  720. #define SQL_MAXIMUM_COLUMN_NAME_LENGTH SQL_MAX_COLUMN_NAME_LEN
  721. #define SQL_MAX_CURSOR_NAME_LEN 31
  722. #define SQL_MAXIMUM_CURSOR_NAME_LENGTH SQL_MAX_CURSOR_NAME_LEN
  723. #define SQL_MAX_SCHEMA_NAME_LEN 32
  724. #define SQL_MAXIMUM_SCHEMA_NAME_LENGTH SQL_MAX_SCHEMA_NAME_LEN
  725. #define SQL_MAX_CATALOG_NAME_LEN 34
  726. #define SQL_MAXIMUM_CATALOG_NAME_LENGTH SQL_MAX_CATALOG_NAME_LEN
  727. #define SQL_MAX_TABLE_NAME_LEN 35
  728. }
  729. SQL_DATA_SOURCE_NAME = 2;
  730. SQL_DRIVER_NAME = 6;
  731. SQL_DRIVER_VER = 7;
  732. SQL_SERVER_NAME = 13;
  733. SQL_DBMS_NAME = 17;
  734. SQL_DBMS_VER = 18;
  735. SQL_IDENTIFIER_CASE = 28;
  736. SQL_IDENTIFIER_QUOTE_CHAR = 29;
  737. SQL_SCROLL_CONCURRENCY = 43;
  738. SQL_TXN_CAPABLE = 46;
  739. SQL_TRANSACTION_CAPABLE = SQL_TXN_CAPABLE;
  740. SQL_USER_NAME = 47;
  741. SQL_TXN_ISOLATION_OPTION = 72;
  742. SQL_TRANSACTION_ISOLATION_OPTION = SQL_TXN_ISOLATION_OPTION;
  743. {
  744. #define SQL_INTEGRITY 73
  745. #define SQL_GETDATA_EXTENSIONS 81
  746. #define SQL_NULL_COLLATION 85
  747. #define SQL_ALTER_TABLE 86
  748. #define SQL_ORDER_BY_COLUMNS_IN_SELECT 90
  749. #define SQL_SPECIAL_CHARACTERS 94
  750. #define SQL_MAX_COLUMNS_IN_GROUP_BY 97
  751. #define SQL_MAXIMUM_COLUMNS_IN_GROUP_BY SQL_MAX_COLUMNS_IN_GROUP_BY
  752. #define SQL_MAX_COLUMNS_IN_INDEX 98
  753. #define SQL_MAXIMUM_COLUMNS_IN_INDEX SQL_MAX_COLUMNS_IN_INDEX
  754. #define SQL_MAX_COLUMNS_IN_ORDER_BY 99
  755. #define SQL_MAXIMUM_COLUMNS_IN_ORDER_BY SQL_MAX_COLUMNS_IN_ORDER_BY
  756. #define SQL_MAX_COLUMNS_IN_SELECT 100
  757. #define SQL_MAXIMUM_COLUMNS_IN_SELECT SQL_MAX_COLUMNS_IN_SELECT
  758. #define SQL_MAX_COLUMNS_IN_TABLE 101
  759. #define SQL_MAX_INDEX_SIZE 102
  760. #define SQL_MAXIMUM_INDEX_SIZE SQL_MAX_INDEX_SIZE
  761. #define SQL_MAX_ROW_SIZE 104
  762. #define SQL_MAXIMUM_ROW_SIZE SQL_MAX_ROW_SIZE
  763. #define SQL_MAX_STATEMENT_LEN 105
  764. #define SQL_MAXIMUM_STATEMENT_LENGTH SQL_MAX_STATEMENT_LEN
  765. #define SQL_MAX_TABLES_IN_SELECT 106
  766. #define SQL_MAXIMUM_TABLES_IN_SELECT SQL_MAX_TABLES_IN_SELECT
  767. #define SQL_MAX_USER_NAME_LEN 107
  768. #define SQL_MAXIMUM_USER_NAME_LENGTH SQL_MAX_USER_NAME_LEN}
  769. {$ifdef ODBCVER3}
  770. SQL_OJ_CAPABILITIES = 115;
  771. SQL_OUTER_JOIN_CAPABILITIES = SQL_OJ_CAPABILITIES;
  772. {$endif} { ODBCVER >= 0x0300 }
  773. {$ifdef ODBCVER3}
  774. SQL_XOPEN_CLI_YEAR = 10000;
  775. SQL_CURSOR_SENSITIVITY = 10001;
  776. SQL_DESCRIBE_PARAMETER = 10002;
  777. SQL_CATALOG_NAME = 10003;
  778. SQL_COLLATION_SEQ = 10004;
  779. SQL_MAX_IDENTIFIER_LEN = 10005;
  780. SQL_MAXIMUM_IDENTIFIER_LENGTH = SQL_MAX_IDENTIFIER_LEN;
  781. {$endif} { ODBCVER >= 0x0300 }
  782. {/* SQL_ALTER_TABLE bitmasks */
  783. #if (ODBCVER >= 0x0200)
  784. #define SQL_AT_ADD_COLUMN 0x00000001L
  785. #define SQL_AT_DROP_COLUMN 0x00000002L
  786. #endif /* ODBCVER >= 0x0200 */
  787. #if (ODBCVER >= 0x0300)
  788. #define SQL_AT_ADD_CONSTRAINT 0x00000008L
  789. /* The following bitmasks are ODBC extensions and defined in sqlext.h
  790. *#define SQL_AT_COLUMN_SINGLE 0x00000020L
  791. *#define SQL_AT_ADD_COLUMN_DEFAULT 0x00000040L
  792. *#define SQL_AT_ADD_COLUMN_COLLATION 0x00000080L
  793. *#define SQL_AT_SET_COLUMN_DEFAULT 0x00000100L
  794. *#define SQL_AT_DROP_COLUMN_DEFAULT 0x00000200L
  795. *#define SQL_AT_DROP_COLUMN_CASCADE 0x00000400L
  796. *#define SQL_AT_DROP_COLUMN_RESTRICT 0x00000800L
  797. *#define SQL_AT_ADD_TABLE_CONSTRAINT 0x00001000L
  798. *#define SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE 0x00002000L
  799. *#define SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT 0x00004000L
  800. *#define SQL_AT_CONSTRAINT_NAME_DEFINITION 0x00008000L
  801. *#define SQL_AT_CONSTRAINT_INITIALLY_DEFERRED 0x00010000L
  802. *#define SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE 0x00020000L
  803. *#define SQL_AT_CONSTRAINT_DEFERRABLE 0x00040000L
  804. *#define SQL_AT_CONSTRAINT_NON_DEFERRABLE 0x00080000L
  805. #endif /* ODBCVER >= 0x0300 */
  806. /* SQL_ASYNC_MODE values */
  807. #if (ODBCVER >= 0x0300)
  808. #define SQL_AM_NONE 0
  809. #define SQL_AM_CONNECTION 1
  810. #define SQL_AM_STATEMENT 2
  811. #endif
  812. /* SQL_CURSOR_COMMIT_BEHAVIOR values */
  813. #define SQL_CB_DELETE 0
  814. #define SQL_CB_CLOSE 1
  815. #define SQL_CB_PRESERVE 2
  816. /* SQL_FETCH_DIRECTION bitmasks */
  817. #define SQL_FD_FETCH_NEXT 0x00000001L
  818. #define SQL_FD_FETCH_FIRST 0x00000002L
  819. #define SQL_FD_FETCH_LAST 0x00000004L
  820. #define SQL_FD_FETCH_PRIOR 0x00000008L
  821. #define SQL_FD_FETCH_ABSOLUTE 0x00000010L
  822. #define SQL_FD_FETCH_RELATIVE 0x00000020L
  823. /* SQL_GETDATA_EXTENSIONS bitmasks */
  824. #define SQL_GD_ANY_COLUMN 0x00000001L
  825. #define SQL_GD_ANY_ORDER 0x00000002L
  826. }
  827. { SQL_IDENTIFIER_CASE values }
  828. SQL_IC_UPPER = 1;
  829. SQL_IC_LOWER = 2;
  830. SQL_IC_SENSITIVE = 3;
  831. SQL_IC_MIXED = 4;
  832. {
  833. /* SQL_OJ_CAPABILITIES bitmasks */
  834. /* NB: this means 'outer join', not what you may be thinking */
  835. #if (ODBCVER >= 0x0201)
  836. #define SQL_OJ_LEFT 0x00000001L
  837. #define SQL_OJ_RIGHT 0x00000002L
  838. #define SQL_OJ_FULL 0x00000004L
  839. #define SQL_OJ_NESTED 0x00000008L
  840. #define SQL_OJ_NOT_ORDERED 0x00000010L
  841. #define SQL_OJ_INNER 0x00000020L
  842. #define SQL_OJ_ALL_COMPARISON_OPS 0x00000040L
  843. #endif
  844. }
  845. { SQL_SCROLL_CONCURRENCY bitmasks }
  846. SQL_SCCO_READ_ONLY = 1;
  847. SQL_SCCO_LOCK = 2;
  848. SQL_SCCO_OPT_ROWVER = 4;
  849. SQL_SCCO_OPT_VALUES = 8;
  850. //* SQL_TXN_CAPABLE values */
  851. SQL_TC_NONE = 0;
  852. SQL_TC_DML = 1;
  853. SQL_TC_ALL = 2;
  854. SQL_TC_DDL_COMMIT = 3;
  855. SQL_TC_DDL_IGNORE = 4;
  856. //* SQL_TXN_ISOLATION_OPTION bitmasks */
  857. SQL_TXN_READ_UNCOMMITTED = 1;
  858. SQL_TRANSACTION_READ_UNCOMMITTED = SQL_TXN_READ_UNCOMMITTED;
  859. SQL_TXN_READ_COMMITTED = 2;
  860. SQL_TRANSACTION_READ_COMMITTED = SQL_TXN_READ_COMMITTED;
  861. SQL_TXN_REPEATABLE_READ = 4;
  862. SQL_TRANSACTION_REPEATABLE_READ = SQL_TXN_REPEATABLE_READ;
  863. SQL_TXN_SERIALIZABLE = 8;
  864. SQL_TRANSACTION_SERIALIZABLE = SQL_TXN_SERIALIZABLE;
  865. {
  866. /* SQL_NULL_COLLATION values */
  867. #define SQL_NC_HIGH 0
  868. #define SQL_NC_LOW 1
  869. }
  870. { SQL_STATIC_SENSITIVITY values }
  871. SQL_SS_ADDITIONS = 1;
  872. SQL_SS_DELETIONS = 2;
  873. SQL_SS_UPDATES = 4;
  874. { SQLColAttributes defines }
  875. SQL_COLUMN_COUNT = 0;
  876. SQL_COLUMN_NAME = 1;
  877. SQL_COLUMN_TYPE = 2;
  878. SQL_COLUMN_LENGTH = 3;
  879. SQL_COLUMN_PRECISION = 4;
  880. SQL_COLUMN_SCALE = 5;
  881. SQL_COLUMN_DISPLAY_SIZE = 6;
  882. SQL_COLUMN_NULLABLE = 7;
  883. SQL_COLUMN_UNSIGNED = 8;
  884. SQL_COLUMN_MONEY = 9;
  885. SQL_COLUMN_UPDATABLE = 10;
  886. SQL_COLUMN_AUTO_INCREMENT = 11;
  887. SQL_COLUMN_CASE_SENSITIVE = 12;
  888. SQL_COLUMN_SEARCHABLE = 13;
  889. SQL_COLUMN_TYPE_NAME = 14;
  890. SQL_COLUMN_TABLE_NAME = 15;
  891. SQL_COLUMN_OWNER_NAME = 16;
  892. SQL_COLUMN_QUALIFIER_NAME = 17;
  893. SQL_COLUMN_LABEL = 18;
  894. SQL_COLATT_OPT_MAX = SQL_COLUMN_LABEL;
  895. {$ifdef ODBCVER3}
  896. SQL_COLUMN_DRIVER_START = 1000;
  897. {$endif} { ODBCVER >= 0x0300 }
  898. { SQLColAttribute defines }
  899. {$ifdef ODBCVER3}
  900. SQL_DESC_ARRAY_SIZE = 20;
  901. SQL_DESC_ARRAY_STATUS_PTR = 21;
  902. SQL_DESC_AUTO_UNIQUE_VALUE = SQL_COLUMN_AUTO_INCREMENT;
  903. SQL_DESC_BASE_COLUMN_NAME = 22;
  904. SQL_DESC_BASE_TABLE_NAME = 23;
  905. SQL_DESC_BIND_OFFSET_PTR = 24;
  906. SQL_DESC_BIND_TYPE = 25;
  907. SQL_DESC_CASE_SENSITIVE = SQL_COLUMN_CASE_SENSITIVE;
  908. SQL_DESC_CATALOG_NAME = SQL_COLUMN_QUALIFIER_NAME;
  909. SQL_DESC_CONCISE_TYPE = SQL_COLUMN_TYPE;
  910. SQL_DESC_DATETIME_INTERVAL_PRECISION = 26;
  911. SQL_DESC_DISPLAY_SIZE = SQL_COLUMN_DISPLAY_SIZE;
  912. SQL_DESC_FIXED_PREC_SCALE = SQL_COLUMN_MONEY;
  913. SQL_DESC_LABEL = SQL_COLUMN_LABEL;
  914. SQL_DESC_LITERAL_PREFIX = 27;
  915. SQL_DESC_LITERAL_SUFFIX = 28;
  916. SQL_DESC_LOCAL_TYPE_NAME = 29;
  917. SQL_DESC_MAXIMUM_SCALE = 30;
  918. SQL_DESC_MINIMUM_SCALE = 31;
  919. SQL_DESC_NUM_PREC_RADIX = 32;
  920. SQL_DESC_PARAMETER_TYPE = 33;
  921. SQL_DESC_ROWS_PROCESSED_PTR = 34;
  922. SQL_DESC_SCHEMA_NAME = SQL_COLUMN_OWNER_NAME;
  923. SQL_DESC_SEARCHABLE = SQL_COLUMN_SEARCHABLE;
  924. SQL_DESC_TYPE_NAME = SQL_COLUMN_TYPE_NAME;
  925. SQL_DESC_TABLE_NAME = SQL_COLUMN_TABLE_NAME;
  926. SQL_DESC_UNSIGNED = SQL_COLUMN_UNSIGNED;
  927. SQL_DESC_UPDATABLE = SQL_COLUMN_UPDATABLE;
  928. {$endif}
  929. { SQLColAttributes subdefines for SQL_COLUMN_UPDATABLE }
  930. SQL_ATTR_READONLY = 0;
  931. SQL_ATTR_WRITE = 1;
  932. SQL_ATTR_READWRITE_UNKNOWN = 2;
  933. //* SQLEndTran() options */
  934. SQL_COMMIT = 0;
  935. SQL_ROLLBACK = 1;
  936. SQL_ATTR_ROW_ARRAY_SIZE = 27;
  937. //* SQLConfigDataSource() options */
  938. ODBC_ADD_DSN = 1;
  939. ODBC_CONFIG_DSN = 2;
  940. ODBC_REMOVE_DSN = 3;
  941. ODBC_ADD_SYS_DSN = 4;
  942. ODBC_CONFIG_SYS_DSN = 5;
  943. ODBC_REMOVE_SYS_DSN = 6;
  944. {$ifdef DYNLOADINGODBC}
  945. type tSQLAllocHandle =function(HandleType: SQLSMALLINT;
  946. InputHandle:SQLHANDLE;Var OutputHandlePtr: SQLHANDLE):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  947. type tSQLSetEnvAttr=function (EnvironmentHandle:SQLHENV;
  948. Attribute:SQLINTEGER;Value:SQLPOINTER;
  949. StringLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  950. type TSQLFreeHandle=function (HandleType:SQLSMALLINT;
  951. Handle:SQLHANDLE):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  952. type TSQLGetDiagRec=function (HandleType:SQLSMALLINT;
  953. Handle:SQLHANDLE;RecNumber:SQLSMALLINT;
  954. Sqlstate:PSQLCHAR;var NativeError:SQLINTEGER;
  955. MessageText:PSQLCHAR;BufferLength:SQLSMALLINT;
  956. var TextLength:SQLSMALLINT ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  957. type TSQLGetDiagField=function (HandleType:SQLSMALLINT;
  958. Handle:SQLHANDLE;RecNumber:SQLSMALLINT;
  959. DiagIdentifier:SQLSMALLINT;DiagInfoPtr:SQLPOINTER;
  960. BufferLength:SQLSMALLINT;var StringLengthPtr:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  961. type TSQLConnect=function (ConnectionHandle:SQLHDBC;
  962. ServerName:PSQLCHAR;NameLength1:SQLSMALLINT;
  963. UserName:PSQLCHAR;NameLength2:SQLSMALLINT;
  964. Authentication:PSQLCHAR;NameLength3:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  965. type TSQLDisconnect=function(ConnectionHandle:SQLHDBC):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  966. type TSQLDriverConnect=function (hdbc: SQLHDBC;
  967. hwnd: SQLHWND;szCsin: PChar;
  968. szCLen: SQLSMALLINT;szCsout: PChar;
  969. cbCSMax: SQLSMALLINT;Var cbCsOut: SQLSMALLINT;
  970. f: SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  971. type TSQLExecDirect=function (StatementHandle:SQLHSTMT;
  972. StatementText:PSQLCHAR;TextLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  973. type TSQLPrepare=function (StatementHandle:SQLHSTMT;
  974. StatementText:PSQLCHAR;TextLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  975. type TSQLCloseCursor=function (StatementHandle:SQLHSTMT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  976. type TSQLExecute=function (StatementHandle:SQLHSTMT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  977. type TSQLFetch=function (StatementHandle:SQLHSTMT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  978. type TSQLNumResultCols=function (StatementHandle:SQLHSTMT;
  979. var ColumnCount:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  980. type TSQLDescribeCol=function (StatementHandle:SQLHSTMT;
  981. ColumnNumber:SQLUSMALLINT;ColumnName:PSQLCHAR;
  982. BufferLength:SQLSMALLINT;var NameLength:SQLSMALLINT;
  983. var DataType:SQLSMALLINT;var ColumnSize:SQLULEN;
  984. var DecimalDigits:SQLSMALLINT;var Nullable:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  985. type TSQLFetchScroll=function (StatementHandle:SQLHSTMT;
  986. FetchOrientation:SQLSMALLINT;FetchOffset:SQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  987. type TSQLExtendedFetch=function (hstmt:SQLHSTMT;
  988. fFetchType:SQLUSMALLINT;irow:SQLLEN;
  989. pcrow:PSQLULEN;rgfRowStatus:PSQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  990. type TSQLGetData=function (StatementHandle:SQLHSTMT;
  991. ColumnNumber:SQLUSMALLINT;TargetType:SQLSMALLINT;
  992. TargetValue:SQLPOINTER;BufferLength:SQLLEN;
  993. StrLen_or_Ind:PSQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  994. type TSQLSetStmtAttr=function (StatementHandle:SQLHSTMT;
  995. Attribute:SQLINTEGER;Value:SQLPOINTER;
  996. StringLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  997. type TSQLGetStmtAttr=function (StatementHandle:SQLHSTMT;
  998. Attribute:SQLINTEGER;Value:SQLPOINTER;
  999. BufferLength:SQLINTEGER;StringLength:PSQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1000. type TSQLSetDescField=function (DescriptorHandle:SQLHDESC;
  1001. RecNumber:SQLSMALLINT; FieldIdentifier:SQLSMALLINT;
  1002. ValuePtr:SQLPOINTER; BufferLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1003. type TSQLSetDescRec=function (DescriptorHandle:SQLHDESC;
  1004. RecNumber:SQLSMALLINT; DescType, SubType:SQLSMALLINT;
  1005. Length:SQLLEN; Precision, Scale: SQLSMALLINT;
  1006. DataPtr:SQLPOINTER; StringLengthPtr,IndicatorPtr:PSQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1007. type tSQLGetInfo=function (ConnectionHandle:SQLHDBC;
  1008. InfoType:SQLUSMALLINT;InfoValue:SQLPOINTER;
  1009. BufferLength:SQLSMALLINT;StringLength:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1010. type TSQLBulkOperations=function (StatementHandle: SQLHSTMT;
  1011. Operation:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1012. type TSQLPutData=function (StatementHandle:SQLHSTMT;
  1013. Data:SQLPOINTER;StrLen_or_Ind:SQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1014. type TSQLBindCol=function (StatementHandle:SQLHSTMT;
  1015. ColumnNumber:SQLUSMALLINT;TargetType:SQLSMALLINT;
  1016. TargetValue:SQLPOINTER;BufferLength:SQLLEN;
  1017. StrLen_or_Ind:PSQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1018. type TSQLSetPos=function (StatementHandle:SQLHSTMT;
  1019. RowNumber:SQLSETPOSIROW; Operation:SQLUSMALLINT;
  1020. LockType:SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1021. type TSQLDataSources=function (EnvironmentHandle:SQLHENV;
  1022. Direction:SQLUSMALLINT;ServerName:PSQLCHAR;
  1023. BufferLength1:SQLSMALLINT;NameLength1:PSQLSMALLINT;
  1024. Description:PSQLCHAR;BufferLength2:SQLSMALLINT;
  1025. NameLength2:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1026. type TSQLDrivers=function (EnvironmentHandle:SQLHENV;
  1027. Direction:SQLUSMALLINT;DriverDescription:PSQLCHAR;
  1028. BufferLength1:SQLSMALLINT;DescriptionLength1:PSQLSMALLINT;
  1029. DriverAttributes:PSQLCHAR;BufferLength2:SQLSMALLINT;
  1030. AttributesLength2:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1031. type TSQLSetConnectAttr=function (ConnectionHandle:SQLHDBC;
  1032. Attribute:SQLINTEGER; Value:SQLPOINTER;
  1033. StringLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1034. type TSQLGetCursorName=function (StatementHandle:SQLHSTMT;
  1035. CursorName:PSQLCHAR; BufferLength:SQLSMALLINT;
  1036. NameLength:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1037. type TSQLSetCursorName=function (StatementHandle:SQLHSTMT;
  1038. CursorName:PSQLCHAR; NameLength:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1039. type TSQLRowCount=function (StatementHandle:SQLHSTMT;
  1040. var RowCount:SQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1041. type TSQLBindParameter=function (hstmt:SQLHSTMT;
  1042. ipar:SQLUSMALLINT;fParamType:SQLSMALLINT;
  1043. fCType:SQLSMALLINT;fSqlType:SQLSMALLINT;
  1044. cbColDef:SQLULEN;ibScale:SQLSMALLINT;
  1045. rgbValue:SQLPOINTER;cbValueMax:SQLLEN;
  1046. pcbValue:PSQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1047. type TSQLFreeStmt=function (StatementHandle:SQLHSTMT;
  1048. Option:SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1049. type TSQLColAttribute=function (StatementHandle:SQLHSTMT;
  1050. ColumnNumber:SQLUSMALLINT;FieldIdentifier:SQLUSMALLINT;
  1051. CharacterAttribute:PSQLCHAR;BufferLength:SQLSMALLINT;
  1052. StringLength:PSQLSMALLINT;NumericAttribute:PSQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1053. type TSQLEndTran=function (HandleType:SQLSMALLINT;
  1054. Handle:SQLHANDLE;CompletionType:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1055. type TSQLTables=function ( hstmt : SQLHSTMT;
  1056. szTableQualifier : PSQLCHAR;cbTableQualifier : SQLSMALLINT;
  1057. szTableOwner : PSQLCHAR;cbTableOwner : SQLSMALLINT;
  1058. szTableName : PSQLCHAR;cbTableName : SQLSMALLINT;
  1059. szTableType : PSQLCHAR;cbTableType : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
  1060. type TSQLColumns=function ( hstmt : SQLHSTMT;
  1061. szTableQualifier : PSQLCHAR;cbTableQualifier : SQLSMALLINT;
  1062. szTableOwner : PSQLCHAR;cbTableOwner : SQLSMALLINT;
  1063. szTableName : PSQLCHAR;cbTableName : SQLSMALLINT;
  1064. szColumnName : PSQLCHAR;cbColumnName : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
  1065. type TSQLSpecialColumns=function (StatementHandle:SQLHSTMT;
  1066. IdentifierType:SQLUSMALLINT;CatalogName:PSQLCHAR;
  1067. NameLength1:SQLSMALLINT;SchemaName:PSQLCHAR;
  1068. NameLength2:SQLSMALLINT;TableName:PSQLCHAR;
  1069. NameLength3:SQLSMALLINT;Scope:SQLUSMALLINT;
  1070. Nullable:SQLUSMALLINT) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
  1071. type TSQLProcedures=function ( hstmt : SQLHSTMT;
  1072. szTableQualifier : PSQLCHAR;cbTableQualifier : SQLSMALLINT;
  1073. szTableOwner : PSQLCHAR;cbTableOwner : SQLSMALLINT;
  1074. szTableName : PSQLCHAR;cbTableName : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
  1075. type TSQLPrimaryKeys=function (hstmt : SQLHSTMT;
  1076. CatalogName:PSQLCHAR;NameLength1:SQLSMALLINT;
  1077. SchemaName:PSQLCHAR;NameLength2:SQLSMALLINT;
  1078. TableName:PSQLCHAR;NameLength3:SQLSMALLINT ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
  1079. type TSQLProcedureColumns = function(hstmt: SQLHSTMT;
  1080. CatalogName: PSQLCHAR; NameLength1: SQLSMALLINT;
  1081. SchemaName: PSQLCHAR; NameLength2: SQLSMALLINT;
  1082. ProcName: PSQLCHAR; NameLength3: SQLSMALLINT;
  1083. ColumnName: PSQLCHAR; NameLength4: SQLSMALLINT): SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
  1084. type TSQLStatistics = function (hstmt: SQLHSTMT;
  1085. CatalogName:PSQLCHAR; NameLength1:SQLSMALLINT;
  1086. SchemaName:PSQLCHAR; NameLength2:SQLSMALLINT;
  1087. TableName:PSQLCHAR; NameLength3:SQLSMALLINT;
  1088. Unique:SQLUSMALLINT;
  1089. Reserved:SQLUSMALLINT): SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
  1090. var SQLAllocHandle:tSQLAllocHandle;
  1091. var SQLSetEnvAttr:tSQLSetEnvAttr;
  1092. var SQLFreeHandle:tSQLFreeHandle;
  1093. var SQLGetInfo:tSQLGetInfo;
  1094. var SQLProcedures:TSQLProcedures;
  1095. var SQLColumns:TSQLColumns;
  1096. var SQLSpecialColumns:TSQLSpecialColumns;
  1097. var SQLGetDiagRec:TSQLGetDiagRec;
  1098. var SQLGetDiagField:TSQLGetDiagField;
  1099. var SQLConnect:TSQLConnect;
  1100. var SQLDisconnect:TSQLDisconnect;
  1101. var SQLDriverConnect:TSQLDriverConnect;
  1102. var SQLExecDirect:TSQLExecDirect;
  1103. var SQLPrepare:TSQLPrepare;
  1104. var SQLCloseCursor:TSQLCloseCursor;
  1105. var SQLExecute:TSQLExecute;
  1106. var SQLFetch:TSQLFetch;
  1107. var SQLNumResultCols:TSQLNumResultCols;
  1108. var SQLDescribeCol:TSQLDescribeCol;
  1109. var SQLFetchScroll:TSQLFetchScroll;
  1110. var SQLExtendedFetch:TSQLExtendedFetch;
  1111. var SQLGetData:TSQLGetData;
  1112. var SQLSetStmtAttr:TSQLSetStmtAttr;
  1113. var SQLGetStmtAttr:TSQLGetStmtAttr;
  1114. //var SQLSetDescField:TSQLSetDescField;
  1115. var SQLSetDescRec:TSQLSetDescRec;
  1116. var SQLBulkOperations:TSQLBulkOperations;
  1117. var SQLPutData:TSQLPutData;
  1118. var SQLBindCol:TSQLBindCol;
  1119. var SQLSetPos:TSQLSetPos;
  1120. var SQLDataSources:TSQLDataSources;
  1121. var SQLDrivers:TSQLDrivers;
  1122. var SQLSetConnectAttr:TSQLSetConnectAttr;
  1123. var SQLGetCursorName:TSQLGetCursorName;
  1124. var SQLSetCursorName:TSQLSetCursorName;
  1125. var SQLRowCount:TSQLRowCount;
  1126. var SQLBindParameter:TSQLBindParameter;
  1127. var SQLFreeStmt:TSQLFreeStmt;
  1128. var SQLColAttribute:TSQLColAttribute;
  1129. var SQLEndTran:TSQLEndTran;
  1130. var SQLTables:TSQLTables;
  1131. var SQLPrimaryKeys:TSQLPrimaryKeys;
  1132. var SQLProcedureColumns : TSQLProcedureColumns;
  1133. var SQLStatistics: TSQLStatistics;
  1134. var odbcversion:word;
  1135. {$else}
  1136. function SQLAllocHandle(
  1137. HandleType: SQLSMALLINT;
  1138. InputHandle:SQLHANDLE;
  1139. Var OutputHandlePtr: SQLHANDLE):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1140. function SQLSetEnvAttr(
  1141. EnvironmentHandle:SQLHENV;
  1142. Attribute: SQLINTEGER;
  1143. Value: SQLPOINTER;
  1144. StringLength: SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1145. function SQLGetEnvAttr(
  1146. EnvironmentHandle:SQLHENV;
  1147. Attribute:SQLINTEGER;
  1148. Value:SQLPOINTER;
  1149. BufferLength:SQLINTEGER;
  1150. StringLength:PSQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1151. function SQLFreeHandle(
  1152. HandleType: SQLSMALLINT;
  1153. Handle: SQLHANDLE):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1154. function SQLGetDiagRec(
  1155. HandleType: SQLSMALLINT;
  1156. Handle: SQLHANDLE;
  1157. RecNumber: SQLSMALLINT;
  1158. Sqlstate: PSQLCHAR;
  1159. var NativeError: SQLINTEGER;
  1160. MessageText: PSQLCHAR;
  1161. BufferLength: SQLSMALLINT;
  1162. var TextLength: SQLSMALLINT ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1163. function SQLGetDiagField(
  1164. HandleType:SQLSMALLINT;
  1165. Handle:SQLHANDLE;
  1166. RecNumber:SQLSMALLINT;
  1167. DiagIdentifier:SQLSMALLINT;
  1168. DiagInfoPtr:SQLPOINTER;
  1169. BufferLength:SQLSMALLINT;
  1170. var StringLengthPtr:SQLSMALLINT ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1171. function SQLConnect(
  1172. ConnectionHandle:SQLHDBC;
  1173. ServerName:PSQLCHAR; NameLength1:SQLSMALLINT;
  1174. UserName:PSQLCHAR; NameLength2:SQLSMALLINT;
  1175. Authentication:PSQLCHAR;NameLength3:SQLSMALLINT
  1176. ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1177. function SQLDisconnect(
  1178. ConnectionHandle:SQLHDBC):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1179. function SQLDriverConnect(
  1180. hdbc: SQLHDBC;
  1181. hwnd: SQLHWND;
  1182. szCsin: PChar;
  1183. szCLen: SQLSMALLINT;
  1184. szCsout: PChar;
  1185. cbCSMax: SQLSMALLINT;
  1186. Var cbCsOut: SQLSMALLINT;
  1187. f: SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1188. function SQLBrowseConnect(
  1189. hdbc : SQLHDBC;
  1190. szConnStrIn :PSQLCHAR;
  1191. cbConnStrIn: SQLSMALLINT;
  1192. szConnStrOut : PSQLCHAR;
  1193. cbConnStrOutMax : SQLSMALLINT;
  1194. Var cbConnStrOut : SQLSMALLINT) : SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1195. function SQLExecDirect(
  1196. StatementHandle:SQLHSTMT;
  1197. StatementText: PSQLCHAR;
  1198. TextLength: SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1199. function SQLPrepare(
  1200. StatementHandle:SQLHSTMT;
  1201. StatementText:PSQLCHAR;
  1202. TextLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1203. function SQLCloseCursor(
  1204. StatementHandle:SQLHSTMT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1205. function SQLExecute(
  1206. StatementHandle:SQLHSTMT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1207. function SQLFetch(
  1208. StatementHandle:SQLHSTMT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1209. function SQLNumResultCols(
  1210. StatementHandle:SQLHSTMT;
  1211. var ColumnCount:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1212. function SQLDescribeCol(
  1213. StatementHandle:SQLHSTMT;
  1214. ColumnNumber:SQLUSMALLINT;
  1215. ColumnName:PSQLCHAR;
  1216. BufferLength:SQLSMALLINT;
  1217. var NameLength:SQLSMALLINT;
  1218. var DataType:SQLSMALLINT;
  1219. var ColumnSize:SQLULEN;
  1220. var DecimalDigits:SQLSMALLINT;
  1221. var Nullable:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1222. function SQLFetchScroll(
  1223. StatementHandle:SQLHSTMT;
  1224. FetchOrientation:SQLSMALLINT;
  1225. FetchOffset:SQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1226. function SQLExtendedFetch(
  1227. hstmt:SQLHSTMT;
  1228. fFetchType:SQLUSMALLINT;
  1229. irow:SQLLEN;
  1230. pcrow:PSQLULEN;
  1231. rgfRowStatus:PSQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1232. function SQLGetData(
  1233. StatementHandle:SQLHSTMT;
  1234. ColumnNumber:SQLUSMALLINT;
  1235. TargetType:SQLSMALLINT;
  1236. TargetValue:SQLPOINTER;
  1237. BufferLength:SQLLEN;
  1238. StrLen_or_Ind:PSQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1239. function SQLSetStmtAttr(
  1240. StatementHandle:SQLHSTMT;
  1241. Attribute:SQLINTEGER;
  1242. Value:SQLPOINTER;
  1243. StringLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1244. function SQLGetStmtAttr(
  1245. StatementHandle:SQLHSTMT;
  1246. Attribute:SQLINTEGER;
  1247. Value:SQLPOINTER;
  1248. BufferLength:SQLINTEGER;
  1249. StringLength:PSQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1250. function SQLGetInfo(
  1251. ConnectionHandle:SQLHDBC;
  1252. InfoType:SQLUSMALLINT;
  1253. InfoValue:SQLPOINTER;
  1254. BufferLength:SQLSMALLINT;
  1255. StringLength:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1256. function SQLBulkOperations(
  1257. StatementHandle: SQLHSTMT;
  1258. Operation:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1259. function SQLPutData(
  1260. StatementHandle:SQLHSTMT;
  1261. Data:SQLPOINTER;
  1262. StrLen_or_Ind:SQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1263. function SQLBindCol(
  1264. StatementHandle:SQLHSTMT;
  1265. ColumnNumber:SQLUSMALLINT;
  1266. TargetType:SQLSMALLINT;
  1267. TargetValue:SQLPOINTER;
  1268. BufferLength:SQLLEN;
  1269. StrLen_or_Ind:PSQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1270. function SQLSetPos(
  1271. StatementHandle:SQLHSTMT;
  1272. RowNumber:SQLSETPOSIROW;
  1273. Operation:SQLUSMALLINT;
  1274. LockType:SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1275. function SQLDataSources(
  1276. EnvironmentHandle:SQLHENV;
  1277. Direction:SQLUSMALLINT;
  1278. ServerName:PSQLCHAR;
  1279. BufferLength1:SQLSMALLINT;
  1280. NameLength1:PSQLSMALLINT;
  1281. Description:PSQLCHAR;
  1282. BufferLength2:SQLSMALLINT;
  1283. NameLength2:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1284. function SQLDrivers(
  1285. EnvironmentHandle:SQLHENV;
  1286. Direction:SQLUSMALLINT;
  1287. DriverDescription:PSQLCHAR;
  1288. BufferLength1:SQLSMALLINT;
  1289. DescriptionLength1:PSQLSMALLINT;
  1290. DriverAttributes:PSQLCHAR;
  1291. BufferLength2:SQLSMALLINT;
  1292. AttributesLength2:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1293. function SQLSetConnectAttr(
  1294. ConnectionHandle:SQLHDBC;
  1295. Attribute:SQLINTEGER; Value:SQLPOINTER;
  1296. StringLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1297. function SQLGetCursorName(
  1298. StatementHandle:SQLHSTMT;
  1299. CursorName:PSQLCHAR; BufferLength:SQLSMALLINT;
  1300. NameLength:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1301. function SQLSetCursorName(
  1302. StatementHandle:SQLHSTMT;
  1303. CursorName:PSQLCHAR; NameLength:SQLSMALLINT
  1304. ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1305. function SQLRowCount(
  1306. StatementHandle:SQLHSTMT;
  1307. var RowCount:SQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1308. function SQLBindParameter(
  1309. hstmt:SQLHSTMT;
  1310. ipar:SQLUSMALLINT;
  1311. fParamType:SQLSMALLINT;
  1312. fCType:SQLSMALLINT;
  1313. fSqlType:SQLSMALLINT;
  1314. cbColDef:SQLULEN;
  1315. ibScale:SQLSMALLINT;
  1316. rgbValue:SQLPOINTER;
  1317. cbValueMax:SQLLEN;
  1318. pcbValue:PSQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1319. function SQLFreeStmt(
  1320. StatementHandle:SQLHSTMT;
  1321. Option:SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1322. function SQLColAttribute (
  1323. StatementHandle:SQLHSTMT;
  1324. ColumnNumber:SQLUSMALLINT;
  1325. FieldIdentifier:SQLUSMALLINT;
  1326. CharacterAttribute:PSQLCHAR;
  1327. BufferLength:SQLSMALLINT;
  1328. StringLength:PSQLSMALLINT;
  1329. NumericAttribute:PSQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1330. {$ifdef ODBCVER3}
  1331. function SQLEndTran(
  1332. HandleType:SQLSMALLINT;
  1333. Handle:SQLHANDLE;
  1334. CompletionType:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1335. {$endif}
  1336. function SQLTables( hstmt : SQLHSTMT;
  1337. szTableQualifier : PSQLCHAR;
  1338. cbTableQualifier : SQLSMALLINT;
  1339. szTableOwner : PSQLCHAR;
  1340. cbTableOwner : SQLSMALLINT;
  1341. szTableName : PSQLCHAR;
  1342. cbTableName : SQLSMALLINT;
  1343. szTableType : PSQLCHAR;
  1344. cbTableType : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
  1345. function SQLColumns( hstmt : SQLHSTMT;
  1346. szTableQualifier : PSQLCHAR;
  1347. cbTableQualifier : SQLSMALLINT;
  1348. szTableOwner : PSQLCHAR;
  1349. cbTableOwner : SQLSMALLINT;
  1350. szTableName : PSQLCHAR;
  1351. cbTableName : SQLSMALLINT;
  1352. szColumnName : PSQLCHAR;
  1353. cbColumnName : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
  1354. function SQLSpecialColumns(StatementHandle:SQLHSTMT;
  1355. IdentifierType:SQLUSMALLINT;
  1356. CatalogName:PSQLCHAR;
  1357. NameLength1:SQLSMALLINT;
  1358. SchemaName:PSQLCHAR;
  1359. NameLength2:SQLSMALLINT;
  1360. TableName:PSQLCHAR;
  1361. NameLength3:SQLSMALLINT;
  1362. Scope:SQLUSMALLINT;
  1363. Nullable:SQLUSMALLINT) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
  1364. function SQLProcedures( hstmt : SQLHSTMT;
  1365. szTableQualifier : PSQLCHAR;
  1366. cbTableQualifier : SQLSMALLINT;
  1367. szTableOwner : PSQLCHAR;
  1368. cbTableOwner : SQLSMALLINT;
  1369. szTableName : PSQLCHAR;
  1370. cbTableName : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
  1371. function SQLPrimaryKeys(hstmt : SQLHSTMT;
  1372. CatalogName:PSQLCHAR;NameLength1:SQLSMALLINT;
  1373. SchemaName:PSQLCHAR;NameLength2:SQLSMALLINT;
  1374. TableName:PSQLCHAR;
  1375. NameLength3:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
  1376. function SQLProcedureColumns(hstmt: SQLHSTMT;
  1377. CatalogName: PSQLCHAR; NameLength1: SQLSMALLINT;
  1378. SchemaName: PSQLCHAR; NameLength2: SQLSMALLINT;
  1379. ProcName: PSQLCHAR; NameLength3: SQLSMALLINT;
  1380. ColumnName: PSQLCHAR; NameLength4: SQLSMALLINT): SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
  1381. external odbclib;
  1382. function SQLStatistics(hstmt: SQLHSTMT;
  1383. CatalogName:PSQLCHAR; NameLength1:SQLSMALLINT;
  1384. SchemaName:PSQLCHAR; NameLength2:SQLSMALLINT;
  1385. TableName:PSQLCHAR; NameLength3:SQLSMALLINT;
  1386. Unique:SQLUSMALLINT;
  1387. Reserved:SQLUSMALLINT): SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
  1388. {$endif}
  1389. // This function always load dynamic
  1390. function DateStructToDateTime( b:PSQL_DATE_STRUCT):TDateTime;
  1391. function DateTimeToDateStruct( b:TDateTime):SQL_DATE_STRUCT;
  1392. procedure DateTime2TimeStampStruct( var Value:SQL_TIMESTAMP_STRUCT; b:TDateTime);
  1393. Function TimeStampStructToDateTime( B : PSQL_TIMESTAMP_STRUCT) : TDateTime;
  1394. Function TimeStructToDateTime (B : PSQL_TIME_STRUCT) : TDateTime;
  1395. function DateTimeToTimeStruct(b: TDateTime) : SQL_TIME_STRUCT;
  1396. function CurrToNumericStruct(c: currency): SQL_NUMERIC_STRUCT;
  1397. {$IFDEF DYNLOADINGODBC}
  1398. Procedure InitialiseODBC(OverrideName : string ='');
  1399. Procedure ReleaseODBC;
  1400. var ODBCLibraryHandle : TLibHandle;
  1401. {$ENDIF}
  1402. implementation
  1403. {$IFDEF DYNLOADINGODBC}
  1404. var RefCount : integer;
  1405. Procedure InitialiseODBC(OverrideName : string ='');
  1406. var libname : string;
  1407. begin
  1408. inc(RefCount);
  1409. if RefCount = 1 then
  1410. begin
  1411. if OverrideName='' then
  1412. libname:=odbclib
  1413. else
  1414. libname:=OverrideName;
  1415. ODBCLibraryHandle := loadlibrary(libname);
  1416. if ODBCLibraryHandle = nilhandle then
  1417. begin
  1418. RefCount := 0;
  1419. Raise EInOutError.Create('Can not load ODBC client. Is it installed? ('+odbclib+')');
  1420. end;
  1421. {$ifdef fpc}
  1422. pointer(SQLAllocHandle) := GetProcedureAddress(ODBCLibraryHandle,'SQLAllocHandle');
  1423. pointer(SQLSetEnvAttr) := GetProcedureAddress(ODBCLibraryHandle,'SQLSetEnvAttr');
  1424. pointer(SQLFreeHandle) := GetProcedureAddress(ODBCLibraryHandle,'SQLFreeHandle');
  1425. pointer(SQLGetInfo) := GetProcedureAddress(ODBCLibraryHandle,'SQLGetInfo');
  1426. pointer(SQLProcedures) := GetProcedureAddress(ODBCLibraryHandle,'SQLProcedures');
  1427. pointer(SQLColumns) := GetProcedureAddress(ODBCLibraryHandle,'SQLColumns');
  1428. pointer(SQLSpecialColumns) := GetProcedureAddress(ODBCLibraryHandle,'SQLSpecialColumns');
  1429. pointer(SQLGetDiagRec) := GetProcedureAddress(ODBCLibraryHandle,'SQLGetDiagRec');
  1430. pointer(SQLGetDiagField) := GetProcedureAddress(ODBCLibraryHandle,'SQLGetDiagField');
  1431. pointer(SQLConnect) := GetProcedureAddress(ODBCLibraryHandle,'SQLConnect');
  1432. pointer(SQLDisconnect) := GetProcedureAddress(ODBCLibraryHandle,'SQLDisconnect');
  1433. pointer(SQLDriverConnect) := GetProcedureAddress(ODBCLibraryHandle,'SQLDriverConnect');
  1434. pointer(SQLExecDirect) := GetProcedureAddress(ODBCLibraryHandle,'SQLExecDirect');
  1435. pointer(SQLPrepare) := GetProcedureAddress(ODBCLibraryHandle,'SQLPrepare');
  1436. pointer(SQLCloseCursor) := GetProcedureAddress(ODBCLibraryHandle,'SQLCloseCursor');
  1437. pointer(SQLExecute) := GetProcedureAddress(ODBCLibraryHandle,'SQLExecute');
  1438. pointer(SQLFetch) := GetProcedureAddress(ODBCLibraryHandle,'SQLFetch');
  1439. pointer(SQLNumResultCols) := GetProcedureAddress(ODBCLibraryHandle,'SQLNumResultCols');
  1440. pointer(SQLDescribeCol) := GetProcedureAddress(ODBCLibraryHandle,'SQLDescribeCol');
  1441. pointer(SQLFetchScroll) := GetProcedureAddress(ODBCLibraryHandle,'SQLFetchScroll');
  1442. pointer(SQLExtendedFetch) := GetProcedureAddress(ODBCLibraryHandle,'SQLExtendedFetch');
  1443. pointer(SQLGetData) := GetProcedureAddress(ODBCLibraryHandle,'SQLGetData');
  1444. pointer(SQLSetStmtAttr) := GetProcedureAddress(ODBCLibraryHandle,'SQLSetStmtAttr');
  1445. pointer(SQLGetStmtAttr) := GetProcedureAddress(ODBCLibraryHandle,'SQLGetStmtAttr');
  1446. //pointer(SQLSetDescField) := GetProcedureAddress(ODBCLibraryHandle,'SQLSetDescField');
  1447. pointer(SQLSetDescRec) := GetProcedureAddress(ODBCLibraryHandle,'SQLSetDescRec');
  1448. pointer(SQLBulkOperations) := GetProcedureAddress(ODBCLibraryHandle,'SQLBulkOperations');
  1449. pointer(SQLPutData) := GetProcedureAddress(ODBCLibraryHandle,'SQLPutData');
  1450. pointer(SQLBindCol) := GetProcedureAddress(ODBCLibraryHandle,'SQLBindCol');
  1451. pointer(SQLSetPos) := GetProcedureAddress(ODBCLibraryHandle,'SQLSetPos');
  1452. pointer(SQLDataSources) := GetProcedureAddress(ODBCLibraryHandle,'SQLDataSources');
  1453. pointer(SQLDrivers) := GetProcedureAddress(ODBCLibraryHandle,'SQLDrivers');
  1454. pointer(SQLSetConnectAttr) := GetProcedureAddress(ODBCLibraryHandle,'SQLSetConnectAttr');
  1455. pointer(SQLGetCursorName) := GetProcedureAddress(ODBCLibraryHandle,'SQLGetCursorName');
  1456. pointer(SQLSetCursorName) := GetProcedureAddress(ODBCLibraryHandle,'SQLSetCursorName');
  1457. pointer(SQLRowCount) := GetProcedureAddress(ODBCLibraryHandle,'SQLRowCount');
  1458. pointer(SQLBindParameter) := GetProcedureAddress(ODBCLibraryHandle,'SQLBindParameter');
  1459. pointer(SQLFreeStmt) := GetProcedureAddress(ODBCLibraryHandle,'SQLFreeStmt');
  1460. pointer(SQLColAttribute) := GetProcedureAddress(ODBCLibraryHandle,'SQLColAttribute');
  1461. pointer(SQLEndTran) := GetProcedureAddress(ODBCLibraryHandle,'SQLEndTran');
  1462. pointer(SQLTables) := GetProcedureAddress(ODBCLibraryHandle,'SQLTables');
  1463. pointer(SQLPrimaryKeys) := GetProcedureAddress(ODBCLibraryHandle,'SQLPrimaryKeys');
  1464. pointer(SQLProcedureColumns) := GetProcedureAddress(ODBCLibraryHandle,'SQLProcedureColumns');
  1465. pointer(SQLStatistics) := GetProcedureAddress(ODBCLibraryHandle,'SQLStatistics');
  1466. {$else}
  1467. SQLAllocHandle := GetProcedureAddress(ODBCLibraryHandle,'SQLAllocHandle');
  1468. SQLSetEnvAttr := GetProcedureAddress(ODBCLibraryHandle,'SQLSetEnvAttr');
  1469. SQLFreeHandle := GetProcedureAddress(ODBCLibraryHandle,'SQLFreeHandle');
  1470. SQLGetInfo := GetProcedureAddress(ODBCLibraryHandle,'SQLGetInfo');
  1471. SQLProcedures := GetProcedureAddress(ODBCLibraryHandle,'SQLProcedures');
  1472. SQLColumns := GetProcedureAddress(ODBCLibraryHandle,'SQLColumns');
  1473. SQLSpecialColumns := GetProcedureAddress(ODBCLibraryHandle,'SQLSpecialColumns');
  1474. SQLGetDiagRec := GetProcedureAddress(ODBCLibraryHandle,'SQLGetDiagRec');
  1475. SQLGetDiagField := GetProcedureAddress(ODBCLibraryHandle,'SQLGetDiagField');
  1476. SQLConnect := GetProcedureAddress(ODBCLibraryHandle,'SQLConnect');
  1477. SQLDisconnect := GetProcedureAddress(ODBCLibraryHandle,'SQLDisconnect');
  1478. SQLDriverConnect := GetProcedureAddress(ODBCLibraryHandle,'SQLDriverConnect');
  1479. SQLExecDirect := GetProcedureAddress(ODBCLibraryHandle,'SQLExecDirect');
  1480. SQLPrepare := GetProcedureAddress(ODBCLibraryHandle,'SQLPrepare');
  1481. SQLCloseCursor := GetProcedureAddress(ODBCLibraryHandle,'SQLCloseCursor');
  1482. SQLExecute := GetProcedureAddress(ODBCLibraryHandle,'SQLExecute');
  1483. SQLFetch := GetProcedureAddress(ODBCLibraryHandle,'SQLFetch');
  1484. SQLNumResultCols := GetProcedureAddress(ODBCLibraryHandle,'SQLNumResultCols');
  1485. SQLDescribeCol := GetProcedureAddress(ODBCLibraryHandle,'SQLDescribeCol');
  1486. SQLFetchScroll := GetProcedureAddress(ODBCLibraryHandle,'SQLFetchScroll');
  1487. SQLExtendedFetch := GetProcedureAddress(ODBCLibraryHandle,'SQLExtendedFetch');
  1488. SQLGetData := GetProcedureAddress(ODBCLibraryHandle,'SQLGetData');
  1489. SQLSetStmtAttr := GetProcedureAddress(ODBCLibraryHandle,'SQLSetStmtAttr');
  1490. SQLGetStmtAttr := GetProcedureAddress(ODBCLibraryHandle,'SQLGetStmtAttr');
  1491. //SQLSetDescField := GetProcedureAddress(ODBCLibraryHandle,'SQLSetDescField');
  1492. SQLSetDescRec := GetProcedureAddress(ODBCLibraryHandle,'SQLSetDescRec');
  1493. SQLBulkOperations := GetProcedureAddress(ODBCLibraryHandle,'SQLBulkOperations');
  1494. SQLPutData := GetProcedureAddress(ODBCLibraryHandle,'SQLPutData');
  1495. SQLBindCol := GetProcedureAddress(ODBCLibraryHandle,'SQLBindCol');
  1496. SQLSetPos := GetProcedureAddress(ODBCLibraryHandle,'SQLSetPos');
  1497. SQLDataSources := GetProcedureAddress(ODBCLibraryHandle,'SQLDataSources');
  1498. SQLDrivers := GetProcedureAddress(ODBCLibraryHandle,'SQLDrivers');
  1499. SQLSetConnectAttr := GetProcedureAddress(ODBCLibraryHandle,'SQLSetConnectAttr');
  1500. SQLGetCursorName := GetProcedureAddress(ODBCLibraryHandle,'SQLGetCursorName');
  1501. SQLSetCursorName := GetProcedureAddress(ODBCLibraryHandle,'SQLSetCursorName');
  1502. SQLRowCount := GetProcedureAddress(ODBCLibraryHandle,'SQLRowCount');
  1503. SQLBindParameter := GetProcedureAddress(ODBCLibraryHandle,'SQLBindParameter');
  1504. SQLGetFunctions := GetProcedureAddress(ODBCLibraryHandle,'SQLGetFunctions');
  1505. SQLDescribeParam :=GetProcedureAddress(ODBCLibraryHandle,'SQLDescribeParam');
  1506. SQLFreeStmt := GetProcedureAddress(ODBCLibraryHandle,'SQLFreeStmt');
  1507. SQLColAttribute := GetProcedureAddress(ODBCLibraryHandle,'SQLColAttribute');
  1508. SQLEndTran := GetProcedureAddress(ODBCLibraryHandle,'SQLEndTran');
  1509. SQLTables := GetProcedureAddress(ODBCLibraryHandle,'SQLTables');
  1510. SQLPrimaryKeys := GetProcedureAddress(ODBCLibraryHandle,'SQLPrimaryKeys');
  1511. SQLProcedureColumns := GetProcedureAddress(ODBCLibraryHandle,'SQLProcedureColumns');
  1512. SQLStatistics := GetProcedureAddress(ODBCLibraryHandle,'SQLStatistics');
  1513. {$endif}
  1514. end;
  1515. end;
  1516. Procedure ReleaseODBC;
  1517. begin
  1518. if RefCount > 0 then dec(RefCount);
  1519. if RefCount = 0 then
  1520. begin
  1521. if not UnloadLibrary(ODBCLibraryHandle) then inc(RefCount);
  1522. end;
  1523. end;
  1524. {$ENDIF}
  1525. function DateStructToDateTime( b:PSQL_DATE_STRUCT):TDateTime;
  1526. begin
  1527. Result:=EncodeDate( b^.Year, b^.Month, b^.Day);
  1528. end;
  1529. function DateTimeToDateStruct( b:TDateTime):SQL_DATE_STRUCT;
  1530. var
  1531. y,m,d: Word;
  1532. begin
  1533. DecodeDate( b, y, m, d);
  1534. with Result do
  1535. begin
  1536. Year:=y; Month:=m; Day:=d;
  1537. end;
  1538. end;
  1539. procedure DateTime2TimeStampStruct( var Value:SQL_TIMESTAMP_STRUCT; b:TDateTime);
  1540. var
  1541. w1,w2,w3,w4: Word;
  1542. begin
  1543. with Value do
  1544. begin
  1545. DecodeDate(b,w1,w2,w3);
  1546. Year := w1;
  1547. Month := w2;
  1548. Day := w3;
  1549. DecodeTime(b,w1,w2,w3,w4);
  1550. Hour := w1;
  1551. Minute := w2;
  1552. Second := w3;
  1553. fraction := Integer(w4)*1000000;
  1554. end;
  1555. end;
  1556. {
  1557. SQL_DATE_STRUCT = packed record
  1558. Year : SQLSMALLINT;
  1559. Month : SQLUSMALLINT;
  1560. Day : SQLUSMALLINT;
  1561. end;
  1562. PSQL_DATE_STRUCT = ^SQL_DATE_STRUCT;
  1563. }
  1564. Function TimeStampStructToDateTime( B : PSQL_TIMESTAMP_STRUCT) : TDateTime;
  1565. begin
  1566. With B^ do
  1567. Result:=ComposeDateTime(EncodeDate(Year,Month,Day), EncodeTime(Hour,Minute,Second,Fraction div 1000000));
  1568. end;
  1569. Function TimeStructToDateTime (B : PSQL_TIME_STRUCT) : TDateTime;
  1570. begin
  1571. With B^ do
  1572. begin
  1573. // TryEncodeTime can not be used, because it doesn't supports times with more then 24 hours.
  1574. Result:=TDateTime(cardinal(Hour)*3600000+cardinal(Minute)*60000+cardinal(Second)*1000)/MSecsPerDay;
  1575. end;
  1576. end;
  1577. function DateTimeToTimeStruct(b: TDateTime) : SQL_TIME_STRUCT;
  1578. var
  1579. w1, w2, w3, w4: Word;
  1580. begin
  1581. DecodeTime(b, w1, w2, w3, w4);
  1582. Result.Hour:=w1 + Trunc(b)*24;
  1583. Result.Minute:=w2;
  1584. Result.Second:=w3;
  1585. end;
  1586. function CurrToNumericStruct(c: currency): SQL_NUMERIC_STRUCT;
  1587. var n: int64; i: integer;
  1588. begin
  1589. Result.precision:=18;
  1590. Result.scale:=4;
  1591. if c >= 0 then
  1592. Result.sign:=1
  1593. else begin
  1594. Result.sign:=0;
  1595. c := -c;
  1596. end;
  1597. n := NtoLE(int64(c));
  1598. for i:=0 to high(Result.val) do begin
  1599. Result.val[i] := n and $ff;
  1600. n := n shr 8;
  1601. end;
  1602. end;