odbcsql.inc 87 KB

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