Перевод ODS API mssql2000 на Delphi  (написание extended stored procedures)

Previous  Top  Next

    
 

 

Code:

{ **** UBPFD *********** by delphibase.endimus.com ****

>> перевод ODS API mssql2000 на Delphi (написание extended stored procedures)

 

перевод (как я понял, один из многих) заголовочных файлов

ODS API mssql2000 на object pascal.... для успешной работы необходима opends60.dll...

выполнен с помощью утилиты c2p, её комментарии я оставил...

часть функций, помеченные как устаревшие, не были переведены...

имхо перевод не лишен недостатков, поэтому используйте as is...

добавлю, что у меня всё работает... :)

 

Зависимости: windows

Автор:       wicked, wilk@ua.fm, ICQ:92356239, Тернополь

Copyright:   (1) Microsoft (srv.h), (2) Oleg Bulychov, (3) wicked aka Andy Wilk

Дата:        15 ноября 2002 г.

***************************************************** }

 

{*********************************}

{ Generated by c2pas32 v0.9b }

{ (c) 2001 Oleg Bulychov }

{ Gladiators Software }

{ http://www.astonshell.com/ }

{*********************************}

{(c) 2002 corrections by andy wilk }

 

unit srv_h;

 

interface

 

uses windows;

 

//------------------------------------------------------------

// Open Data Services header file: srv.h

// Copyright (c) 1989, 1990, 1991, 1997 by Microsoft Corp.

//

// Avoid double inclusion

 

// ODS uses pack(4) on all CPU types

{$A+ }

 

// define model

 

//dll name

const

opends_dll = 'opends60.dll';

 

//------------------------------------------------------------

// Formats of data types

type

DBBOOL = boolean;

DBBYTE = byte;

DBTINYINT = byte;

DBSMALLINT = smallint;

DBUSMALLINT = word;

DBINT = integer;

DBCHAR = char;

pDBCHAR = ^DBCHAR;

DBBINARY = byte;

DBBIT = byte;

DBFLT8 = double;

pinteger = ^integer;

USHORT = word;

 

srv_datetime = record // Format for SRVDATETIME

   dtdays: integer; // number of days since 1/1/1900

   dttime: UINT; // number 300th second since mid

end;

DBDATETIME = srv_datetime;

 

srv_money = record // Format for SRVMONEY

   mnyhigh: integer;

   mnylow: UINT;

end;

DBMONEY = srv_money;

 

DBFLT4 = single;

DBMONEY4 = integer;

 

dbdatetime4 = record // Format for SRVDATETIM4

   numdays: word; // number of days since 1/1/1900

   nummins: word; // number of minutes sicne midnight

end;

DBDATETIM4 = dbdatetime4;

 

const

MAXNUMERICLEN = 16;

type

dbnumeric = record // Format for SRVNUMERIC,SRVNUMERICN,SRVDECIMAL,SRVDECIMALN

   precision: BYTE;

   scale: BYTE;

   sign: BYTE;

   val: array[0..Pred(MAXNUMERICLEN)] of BYTE;

end;

//DBNUMERIC = dbnumeric;

DBDECIMAL = DBNUMERIC;

 

//------------------------------------------------------------

// Constants used by APIs

// Type Tokens

const

SRV_TDS_NULL = {!!!a type cast? =>} {BYTE(} $1F;

SRV_TDS_TEXT = {!!!a type cast? =>} {BYTE(} $23;

SRV_TDS_GUID = {!!!a type cast? =>} {BYTE(} $24;

SRV_TDS_VARBINARY = {!!!a type cast? =>} {BYTE(} $25;

SRV_TDS_INTN = {!!!a type cast? =>} {BYTE(} $26;

SRV_TDS_VARCHAR = {!!!a type cast? =>} {BYTE(} $27;

SRV_TDS_BINARY = {!!!a type cast? =>} {BYTE(} $2D;

SRV_TDS_IMAGE = {!!!a type cast? =>} {BYTE(} $22;

SRV_TDS_CHAR = {!!!a type cast? =>} {BYTE(} $2F;

SRV_TDS_INT1 = {!!!a type cast? =>} {BYTE(} $30;

SRV_TDS_BIT = {!!!a type cast? =>} {BYTE(} $32;

SRV_TDS_INT2 = {!!!a type cast? =>} {BYTE(} $34;

SRV_TDS_DECIMAL = {!!!a type cast? =>} {BYTE(} $37;

SRV_TDS_INT4 = {!!!a type cast? =>} {BYTE(} $38;

SRV_TDS_DATETIM4 = {!!!a type cast? =>} {BYTE(} $3A;

SRV_TDS_FLT4 = {!!!a type cast? =>} {BYTE(} $3B;

SRV_TDS_MONEY = {!!!a type cast? =>} {BYTE(} $3C;

SRV_TDS_DATETIME = {!!!a type cast? =>} {BYTE(} $3D;

SRV_TDS_FLT8 = {!!!a type cast? =>} {BYTE(} $3E;

SRV_TDS_NUMERIC = {!!!a type cast? =>} {BYTE(} $3F;

SRV_TDS_SSVARIANT = {!!!a type cast? =>} {BYTE(} $62;

SRV_TDS_NTEXT = {!!!a type cast? =>} {BYTE(} $63;

SRV_TDS_BITN = {!!!a type cast? =>} {BYTE(} $68;

SRV_TDS_DECIMALN = {!!!a type cast? =>} {BYTE(} $6A;

SRV_TDS_NUMERICN = {!!!a type cast? =>} {BYTE(} $6C;

SRV_TDS_FLTN = {!!!a type cast? =>} {BYTE(} $6D;

SRV_TDS_MONEYN = {!!!a type cast? =>} {BYTE(} $6E;

SRV_TDS_DATETIMN = {!!!a type cast? =>} {BYTE(} $6F;

SRV_TDS_MONEY4 = {!!!a type cast? =>} {BYTE(} $7A;

SRV_TDS_INT8 = {!!!a type cast? =>} {BYTE(} $7F;

SRV_TDS_BIGVARBINARY = {!!!a type cast? =>} {BYTE(} $A5;

SRV_TDS_BIGVARCHAR = {!!!a type cast? =>} {BYTE(} $A7;

SRV_TDS_BIGBINARY = {!!!a type cast? =>} {BYTE(} $AD;

SRV_TDS_BIGCHAR = {!!!a type cast? =>} {BYTE(} $AF;

SRV_TDS_NVARCHAR = {!!!a type cast? =>} {BYTE(} $E7;

SRV_TDS_NCHAR = {!!!a type cast? =>} {BYTE(} $EF;

 

// Datatypes

// Also: values of symbol parameter to srv_symbol when type = SRV_DATATYPE

SRVNULL = SRV_TDS_NULL;

SRVTEXT = SRV_TDS_TEXT;

SRVGUID = SRV_TDS_GUID;

SRVVARBINARY = SRV_TDS_VARBINARY;

SRVINTN = SRV_TDS_INTN;

SRVVARCHAR = SRV_TDS_VARCHAR;

SRVBINARY = SRV_TDS_BINARY;

SRVIMAGE = SRV_TDS_IMAGE;

SRVCHAR = SRV_TDS_CHAR;

SRVINT1 = SRV_TDS_INT1;

SRVBIT = SRV_TDS_BIT;

SRVINT2 = SRV_TDS_INT2;

SRVDECIMAL = SRV_TDS_DECIMAL;

SRVINT4 = SRV_TDS_INT4;

SRVDATETIM4 = SRV_TDS_DATETIM4;

SRVFLT4 = SRV_TDS_FLT4;

SRVMONEY = SRV_TDS_MONEY;

SRVDATETIME = SRV_TDS_DATETIME;

SRVFLT8 = SRV_TDS_FLT8;

SRVNUMERIC = SRV_TDS_NUMERIC;

SRVSSVARIANT = SRV_TDS_SSVARIANT;

SRVNTEXT = SRV_TDS_NTEXT;

SRVBITN = SRV_TDS_BITN;

SRVDECIMALN = SRV_TDS_DECIMALN;

SRVNUMERICN = SRV_TDS_NUMERICN;

SRVFLTN = SRV_TDS_FLTN;

SRVMONEYN = SRV_TDS_MONEYN;

SRVDATETIMN = SRV_TDS_DATETIMN;

SRVMONEY4 = SRV_TDS_MONEY4;

SRVINT8 = SRV_TDS_INT8;

SRVBIGVARBINARY = SRV_TDS_BIGVARBINARY;

SRVBIGVARCHAR = SRV_TDS_BIGVARCHAR;

SRVBIGBINARY = SRV_TDS_BIGBINARY;

SRVBIGCHAR = SRV_TDS_BIGCHAR;

SRVNVARCHAR = SRV_TDS_NVARCHAR;

SRVNCHAR = SRV_TDS_NCHAR;

 

// values for srv_symbol type parameter

SRV_ERROR = 0;

SRV_DONE = 1;

SRV_DATATYPE = 2;

SRV_EVENT = 4;

 

// values for srv_symbol symbol parameter, when type = SRV_ERROR

SRV_ENO_OS_ERR = 0;

SRV_INFO = 1;

SRV_FATAL_PROCESS = 10;

SRV_FATAL_SERVER = 19;

 

// Types of server events

// Also: values for srv_symbol symbol parameter, when type = SRV_EVENT

SRV_CONTINUE = 0;

SRV_LANGUAGE = 1;

SRV_CONNECT = 2;

SRV_RPC = 3;

SRV_RESTART = 4;

SRV_DISCONNECT = 5;

SRV_ATTENTION = 6;

SRV_SLEEP = 7;

SRV_START = 8;

SRV_STOP = 9;

SRV_EXIT = 10;

SRV_CANCEL = 11;

SRV_SETUP = 12;

SRV_CLOSE = 13;

SRV_PRACK = 14;

SRV_PRERROR = 15;

SRV_ATTENTION_ACK = 16;

SRV_CONNECT_V7 = 16;

// TDS type for TDS 7 clients. Overloaded with SRV_ATTENTION_ACK

SRV_SKIP = 17;

SRV_TRANSMGR = 18;

SRV_PRELOGIN = 19;

SRV_OLEDB = 20;

SRV_INTERNAL_HANDLER = 99;

SRV_PROGRAMMER_DEFINED = 100;

 

// values for srv_sfield field parameter

SRV_SERVERNAME = 0;

SRV_VERSION = 6;

 

// Length to indicate string is null terminated

SRV_NULLTERM = -1;

 

// values of msgtype parameter to srv_sendmsg

SRV_MSG_INFO = 1;

SRV_MSG_ERROR = 2;

 

// values of status parameter to srv_senddone

// Also: values for symbol parameters to srv_symbol when type = SRV_DONE

SRV_DONE_FINAL = {!!!a type cast? =>} {USHORT(} $0000;

SRV_DONE_MORE = {!!!a type cast? =>} {USHORT(} $0001;

SRV_DONE_ERROR = {!!!a type cast? =>} {USHORT(} $0002;

SRV_DONE_COUNT = {!!!a type cast? =>} {USHORT(} $0010;

SRV_DONE_RPC_IN_BATCH = {!!!a type cast? =>} {USHORT(} $0080;

 

// return values of srv_paramstatus

SRV_PARAMRETURN = $0001;

SRV_PARAMDEFAULT = $0002;

SRV_PARAMSORTORDER = $0004;

// This is sent by clients in RPC, unset in processRPC

// return values of srv_rpcoptions

SRV_RECOMPILE = $0001;

SRV_NOMETADATA = $0002;

 

// values of field parameter to srv_pfield

//#define SRV_LANGUAGE 1 already defined above

//#define SRV_EVENT 4 already defined above

SRV_SPID = 10;

SRV_NETSPID = 11;

SRV_TYPE = 12;

SRV_STATUS = 13;

SRV_RMTSERVER = 14;

SRV_HOST = 15;

SRV_USER = 16;

SRV_PWD = 17;

SRV_CPID = 18;

SRV_APPLNAME = 19;

SRV_TDS = 20;

SRV_CLIB = 21;

SRV_LIBVERS = 22;

SRV_ROWSENT = 23;

SRV_BCPFLAG = 24;

SRV_NATLANG = 25;

SRV_PIPEHANDLE = 26;

SRV_NETWORK_MODULE = 27;

SRV_NETWORK_VERSION = 28;

SRV_NETWORK_CONNECTION = 29;

SRV_LSECURE = 30;

SRV_SAXP = 31;

SRV_UNICODE_USER = 33;

SRV_UNICODE_PWD = 35;

SRV_SPROC_CODEPAGE = 36;

SRV_MSGLCID = 37;

SRV_INSTANCENAME = 38;

SRV_HASHPWD = 39;

 

// return value of SRV_TDSVERSION macro

SRV_TDS_NONE = 0;

SRV_TDS_2_0 = 1;

SRV_TDS_3_4 = 2;

SRV_TDS_4_2 = 3;

SRV_TDS_6_0 = 4;

SRV_TDS_7_0 = 5;

 

// Return values from APIs

type

SRVRETCODE = integer; // SUCCEED or FAIL

 

//{$ifndef ODBCVER}

RETCODE = integer;

//{$endif}

 

//{$if !defined( SUCCEED )}

const

_SUCCEED = 1; // Successful return value

//{$endif}

 

//{$if !defined( FAIL )}

_FAIL = 0; // Unsuccessful return value

//{$endif}

 

SRV_DUPLICATE_HANDLER = 2; // additional return value for srv_pre/post_handle

//------------------------------------------------

//PreDeclare structures

//

type

srv_server = record

end;

pSRV_SERVER = ^srv_server;

 

srv_config = record

end;

pSRV_CONFIG = ^srv_config;

 

srv_proc = record

end;

pSRV_PROC = ^srv_proc;

 

//------------------------------------------------

//------------------------------------------------

// ODS MACROs & APIs

// Describing and sending a result set

 

function srv_describe(srvproc: pSRV_PROC;

colnumber: integer;

column_name: pchar;

namelen: integer;

desttype: integer;

destlen: integer;

srctype: integer;

srclen: integer;

srcdata: pointer): integer; cdecl; external opends_dll name 'srv_describe';

 

function srv_setutype(srvproc: pSRV_PROC; column: integer; usertype: integer):

integer; cdecl; external opends_dll name 'srv_setutype';

 

function srv_setcoldata(srvproc: pSRV_PROC; column: integer; data: pinteger):

integer; cdecl; external opends_dll name 'srv_setcoldata';

 

function srv_setcollen(srvproc: pSRV_PROC; column: integer; len: integer):

integer; cdecl; external opends_dll name 'srv_setcollen';

 

function srv_sendrow(srvproc: pSRV_PROC): integer; cdecl; external opends_dll

name 'srv_sendrow';

 

function srv_senddone(srvproc: pSRV_PROC; status: USHORT; curcmd: USHORT; count:

integer): integer; cdecl; external opends_dll name 'srv_senddone';

 

// Dealing with Extended Procedure parameters

 

function srv_rpcparams(srvproc: pSRV_PROC): integer; cdecl; external opends_dll

name 'srv_rpcparams';

 

function srv_paraminfo(srvproc: pSRV_PROC;

n: integer;

var pbType: integer;

var pcbMaxLen: integer;

var pcbActualLen: integer;

pbData: pointer;

var pfNull: byte): integer; cdecl; external opends_dll name 'srv_paraminfo';

 

function srv_paramsetoutput(srvproc: pSRV_PROC;

n: integer;

pbData: pointer;

cbLen: integer;

fNull: boolean): integer; cdecl; external opends_dll name

'srv_paramsetoutput';

 

//procedure srv_paramdata{!!!3 unknown typedef}; cdecl; external opends_dll name 'srv_paramdata';

 

//function srv_paramlen{!!!3 unknown typedef}: integer; cdecl; external opends_dll name 'srv_paramlen';

 

//function srv_parammaxlen{!!!3 unknown typedef}: integer; cdecl; external opends_dll name 'srv_parammaxlen';

 

//function srv_paramtype{!!!3 unknown typedef}: integer; cdecl; external opends_dll name 'srv_paramtype';

 

//function srv_paramset{!!!3 unknown typedef}: integer; cdecl; external opends_dll name 'srv_paramset';

 

function srv_paramname(srvproc: pSRV_PROC;

n: integer;

len: integer): pchar; cdecl; external opends_dll name 'srv_paramname';

 

function srv_paramnumber(srvproc: pSRV_PROC;

name: pchar;

namelen: integer): integer; cdecl; external opends_dll name 'srv_paramnumber';

 

//--------------------------------------------------------------

//--------------------------------------------------------------

// The rest of these APIs are still supported, in SQL Server 7.0,

// but may not be supported after SQL Server 7.0

// MACROs

 

//function SRV_GETSERVER(a: integer): integer; {<= !!!6 unknown macro}

 

//function SRV_GOT_ATTENTION(a: integer): integer; {<= !!!6 unknown macro}

 

//function SRV_TDSVERSION(a: integer): integer; {<= !!!6 unknown macro}

 

//function srv_getserver(srvproc: pSRV_PROC): pSRV_SERVER; cdecl; external opends_dll name 'srv_getserver';

 

//function srv_got_attention(srvproc: pSRV_PROC): boolean; cdecl; external opends_dll name 'srv_got_attention';

 

// Memory

 

//function srv_alloc(ulSize: integer): pointer; cdecl; external opends_dll name 'srv_alloc';

 

//function srv_bmove(from: pinteger; to: pinteger; count: integer): integer; cdecl; external opends_dll name 'srv_bmove';

 

//function srv_bzero(location: pinteger; count: integer): integer; cdecl; external opends_dll name 'srv_bzero';

 

//function srv_free(ptr: pinteger): integer; cdecl; external opends_dll name 'srv_free';

 

function srv_convert(srvproc: pSRV_PROC;

srctype: integer;

src: pointer;

srclen: DBINT;

desttype: integer;

dest: pointer;

destlen: DBINT): integer; cdecl; external opends_dll name 'srv_convert';

 

function srv_getuserdata(srvproc: pSRV_PROC): pointer; cdecl; external opends_dll

name 'srv_getuserdata';

 

function srv_getbindtoken(srvproc: pSRV_PROC; token_buf: pchar): integer; cdecl;

external opends_dll name 'srv_getbindtoken';

 

//function srv_getdtcxact(srvproc: pSRV_PROC; {!!!3 unknown typedef}): integer; cdecl; external opends_dll name 'srv_getdtcxact';

 

type

EventHandler = function(p: pointer): integer;

 

//function srv_impersonate_client(srvproc: pSRV_PROC): integer; cdecl; external opends_dll name 'srv_impersonate_client';

 

//function srv_langcpy(srvproc: pSRV_PROC; start: integer; nbytes: integer; buffer: pchar): integer; cdecl; external opends_dll name 'srv_langcpy';

 

//function srv_langlen(srvproc: pSRV_PROC): integer; cdecl; external opends_dll name 'srv_langlen';

 

//function srv_langptr(srvproc: pSRV_PROC): pointer; cdecl; external opends_dll name 'srv_langptr';

 

//function srv_log(server: pSRV_SERVER; datestamp: BOOL; msg: pchar; msglen: integer): integer; cdecl; external opends_dll name 'srv_log';

 

function srv_paramstatus(srvproc: pSRV_PROC;

n: integer): integer; cdecl; external opends_dll name 'srv_paramstatus';

 

function srv_pfieldex(srvproc: pSRV_PROC; field: integer; len: pinteger):

pointer; cdecl; external opends_dll name 'srv_pfieldex';

 

function srv_pfield(srvproc: pSRV_PROC; field: integer; len: pinteger): pchar;

cdecl; external opends_dll name 'srv_pfield';

 

function srv_returnval(srvproc: pSRV_PROC; valuename: pchar; len: integer;

status: BYTE; _type: integer; maxlen: integer; datalen: integer; value:

pinteger): integer; cdecl; external opends_dll name 'srv_returnval';

 

function srv_revert_to_self(srvproc: pSRV_PROC): integer; cdecl; external

opends_dll name 'srv_revert_to_self';

 

function srv_rpcdb(srvproc: pSRV_PROC; len: pinteger): pchar; cdecl; external

opends_dll name 'srv_rpcdb';

 

function srv_rpcname(srvproc: pSRV_PROC; len: pinteger): pchar; cdecl; external

opends_dll name 'srv_rpcname';

 

function srv_rpcnumber(srvproc: pSRV_PROC): integer; cdecl; external opends_dll

name 'srv_rpcnumber';

 

function srv_rpcoptions(srvproc: pSRV_PROC): USHORT; cdecl; external opends_dll

name 'srv_rpcoptions';

 

function srv_rpcowner(srvproc: pSRV_PROC; len: pinteger): pchar; cdecl; external

opends_dll name 'srv_rpcowner';

 

// message text

 

function srv_wsendmsg(srvproc: pSRV_PROC;

msgnum: integer;

msgclass: BYTE;

msg: pwidestring;

msglen: integer): integer; cdecl; external opends_dll name 'srv_wsendmsg';

 

function srv_sendmsg(srvproc: pSRV_PROC;

msgtype: integer;

msgnum: integer;

msgclass: BYTE;

state: BYTE;

rpcname: pchar;

rpcnamelen: integer;

linenum: USHORT;

msg: pchar;

msglen: integer): integer; cdecl; external opends_dll name 'srv_sendmsg';

 

function srv_sendstatus(srvproc: pSRV_PROC; status: integer): integer; cdecl;

external opends_dll name 'srv_sendstatus';

 

function srv_setuserdata(srvproc: pSRV_PROC; _ptr: pointer): integer; cdecl;

external opends_dll name 'srv_setuserdata';

 

function srv_sfield(server: pSRV_SERVER; field: integer; len: pinteger): pchar;

cdecl; external opends_dll name 'srv_sfield';

 

function srv_symbol(_type: integer; symbol: integer; len: pinteger): pchar;

cdecl; external opends_dll name 'srv_symbol';

 

function srv_tdsversion(srvproc: pSRV_PROC): integer; cdecl; external opends_dll

name 'srv_tdsversion';

 

function srv_willconvert(srctype: integer; desttype: integer): BOOL; cdecl;

external opends_dll name 'srv_willconvert';

 

function srv_terminatethread(srvproc: pSRV_PROC): integer; cdecl; external

opends_dll name 'srv_terminatethread';

 

function srv_sendstatistics(srvproc: pSRV_PROC): integer; cdecl; external

opends_dll name 'srv_sendstatistics';

 

function srv_clearstatistics(srvproc: pSRV_PROC): integer; cdecl; external

opends_dll name 'srv_clearstatistics';

 

function srv_message_handler(srvproc: pSRV_PROC;

errornum: integer;

severity: BYTE;

state: BYTE;

oserrnum: integer;

errtext: pchar;

errtextlen: integer;

oserrtext: pchar;

oserrtextlen: integer): integer; cdecl; external opends_dll name

'srv_message_handler';

 

function srv_pre_handle(server: pSRV_SERVER; srvproc: pSRV_PROC; event: integer;

handler: EventHandler; remove: boolean): integer; cdecl; external opends_dll

   name

'srv_pre_handle';

 

function srv_post_handle(server: pSRV_SERVER; srvproc: pSRV_PROC; event:

integer; handler: EventHandler; remove: boolean): integer; cdecl; external

opends_dll name 'srv_post_handle';

 

function srv_IgnoreAnsiToOem(srvproc: pSRV_PROC; bTF: boolean): integer; cdecl;

external opends_dll name 'srv_IgnoreAnsiToOem';

 

{!!!1 => pragma pack()}

 

const

SS_MAJOR_VERSION = 7;

SS_MINOR_VERSION = 0;

SS_LEVEL_VERSION = 0;

SS_MINIMUM_VERSION = '7.00.00.0000';

ODS_VERSION = ((SS_MAJOR_VERSION shl 24) or (SS_MINOR_VERSION shl 16));

 

//_ODS_SRV_H_

//////////////////////////////////////////////////////////////////

// Suggested implementation of __GetXpVersion

//

//__declspec(dllexport) ULONG __GetXpVersion()

// {

// return ODS_VERSION;

// }

//////////////////////////////////////////////////////////////////

 

implementation

 

end.

 

©Drkb::02875