odbcsql.pp 62 KB

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