odbcsql.inc 79 KB

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