odbcsql.pp 62 KB

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