Erweiterte gespeicherte Prozeduren mit delphi


Haben Sie jemals versucht, eine gespeicherte Prozedur auf einem SQL-Server erstellen?
Ist was passiert, wenn die Funktionalität, die Sie wünschen, zu übernehmen nicht innerhalb von SQL, sondern in Ihrem Delphi-Projekt? Microsoft bietet ODS (Open Data Services) ist eine API, mit denen Sie solche Funktionalität erstellen, indem der DLL zu Ihrem SQL-Server, die erweiterte gespeicherte Prozeduren enthalten.
Dies ist, wie Sie es tun...
Als besonderen Bonus ist dieser Artikel auch eine einfache Lösung für die Verschlüsselung Ihrer Daten in SQL Server mithilfe von erweiterte gespeicherte Prozeduren.
Was brauchen wir?
1) opends60.dll (von einer vollständigen Installation mit Entwickler-Tools von MSSQL oder MSDE)
2) MsOdsApi.pas--Autor: Leonid 'MC' Belousov (als www.bramc.ru/soft/) Headerdatei opends60.dll verwendet) (enthalten am Ende des Artikels)
3) einer lokalen SQL-Server zum Testen (MSDE wird gut tun).
Hinweis: Für Kryptographie habe ich die Komponenten unter MIT-Lizenz hier gefunden:
https://www.cityinthesky.co.uk/Cryptography.html
Schritte:
1) erstellen Sie eine neue DLL.

2) bilden Sie eine Einheit, und fügen Sie in der Klausel verwendet die MsOdsApi-Einheit.

3) fügen Sie in der Bibliotheksdatei knapp Ther Uses-Clausel Exporte und die Namen der Funktionen zu exportieren:
Bibliothek MyEncryptDll;
verwendet
SysUtils,
Klassen,
UNIT1 in 'Unit1.pas';
Exporte
Xp_DoEncrypt,
Xp_DoDecrypt;
beginnen
Ende.

4) fügen Sie Ihre Funktionsreferenz, in der Unit-Datei direkt unter die Klausel verwendet:
Funktion Xp_DoEncrypt(pSrvProc: SRV_PROC): Integer; Cdecl;
Funktion Xp_DoDecrypt(pSrvProc: SRV_PROC): Integer; Cdecl;
Hinweise: Cdecl ist erforderlich für ODS, Ihre Funktionen aufrufen zu können.
SRV_PROC ist ein Handle für die gespeicherte Prozedur Informationen.

5) der Code für die DoEncrypt ist:
Basierend auf Source-Code von Leonid 'MC' Belousov (als www.bramc.ru/soft/)
(DoDecrypt ist genau das gleiche nur mit einem DecryptString(s)-Aufruf.
Funktion Xp_Encrypt(pSrvProc: SRV_PROC): Integer; Cdecl;
var
i, Sz: Integer;
bType: Byte;
fNull: Bool;
CbMaxLen, CbActualLen: ULONG;
MyData, Myanswer, MyKey:array [0..255] char;
FDCP_3des: TDCP_3des;
S:String;
PS: Pchar;
beginnen
für i: = 0 bis 255 tun
beginnen
MyData [i]: = #0;
Myanswer [i]: = #0;
MyKey [i]: = #0;
Ende;
Wenn srv_rpcparams(pSrvProc) = 2 then / / überprüfen, ob Eingangsparameter vorhanden sind...
beginnen
Srv_paraminfo (pSrvProc, 1, von @bType, / / Let's use 1. input-Parameter!
@cbMaxLen, die @cbActualLen, / / Hinweis: Wir übernehmen hier welche nur 2 Parameter
[0]-@myData, @fNull); der Typ kann String übergeben werden!!!
bType: = SRVVARCHAR;
Srv_paraminfo (pSrvProc, 2, von @bType,
@cbMaxLen, @cbActualLen,
[0]-@myKey, @fNull);
Ende
sonst
MyData: = ''; Keine Eingabeparameter? Verwenden Sie stattdessen Standardwert.
VERSCHLÜSSELUNGSCODE UNTER IHNEN KANN TUN, WAS SIE BRAUCHEN, HIER MIT DEN PARAMETERWERTEN
FDCP_3des: = TDCP_3des. Create(Nil);
FDCP_3des. Blockgröße: = 64;
FDCP_3des. Algorithmus: = '3DES';
FDCP_3des. CipherMode: = CmCBC;
FDCP_3des. ID: = 24;
FDCP_3des. MaxKeySize: = 192;
FDCP_3des. InitStr(myKey,TDCP_sha1);
s:=String(MyData);
Strpcopy (MyAnswer, FDCP_3des. EncryptString(s));
FDCP_3des. Brennen;
ANTWORT-WERTEN, PCHAR UND IMMER GRÖßE EINRICHTEN
s:=String(myAnswer);
SZ: = Length(s);
PS:=AllocMem(SZ);
PS: = Pchar(s);
Beschreiben Sie Spalten
(Eigentlich machst du, die für jeden Datentyp und jede Spalte, die Sie zurückgeben möchten).
Srv_describe (pSrvProc, 1, 'Wert', Wert SRV_NULLTERM fest,
SRVVARCHAR, Sz,
SRVVARCHAR, Sz, Nil);
BEGIN-Ausgabe...
Srv_setcoldata (pSrvProc, 1, von @ps[0]);
srv_sendrow(pSrvProc); / / Send die Zeile.
Lassen Sie Rückkehr Output-Parameter (nur beispielsweise).
Srv_senddone (pSrvProc, / / endlich Daten an SQL Server senden:
(SRV_DONE_COUNT or SRV_DONE_MORE), 0, 1); / / send Ergebnisse Vollzugsmeldung.
VERSCHLÜSSELUNGSKOMPONENTE FREIGEBEN
FreeAndNil(FDCP_3des);
Ergebnis: = 1; / / Bericht Erfolg (1 = SUCCEED, 0 = Fehler)
Ende;
Hinweis: Es gibt eine Reihe von Dingen, die Sie mit ODS tun können. Dies ist nur ein Beispiel für Delphi. Sie können lesen Sie die ODS-Hilfe in MSDN und noch mehr.

6) testen und Debuggen: (Quelle Leonid 'MC' Belousov (als www.bramc.ru/soft/))
A) installieren Sie SQL 7.0/2000 auf Ihrer Workstation (oder Delphi auf Workstation, dem SQL Server installiert ist).
B) registrieren Sie Ihr Xp auf SQL Server.
HINWEISE:
Registrieren Sie Xp wie folgt:
Nutzen Sie master
gehen
Sp_addextendedproc 'Xp_DoEncrypt', 'MyEncryptDll.dll'
gehen
Sp_addextendedproc 'Xp_DoDecrypt', 'MyEncryptDll.dll'
gehen
Aufheben der Registrierung Xp wie folgt:
Nutzen Sie master
gehen
Sp_dropextendedproc 'Xp_DoEncrypt'
gehen
Sp_dropextendedproc 'Xp_DoDecrypt'
gehen
Für den Fall, dass es noch von SQL verwendet wird wie diese DLL zu entsperren:
Nutzen Sie master
gehen
DBCC MyEncryptDll(FREE)
gehen
C) in Delphi -> Wähle im Hauptmenü Ausführen von Parametern ausführen.
Geben Sie im Feld Host-Anwendung einen Pfadnamen zu Ihrem SQL Server ausführbare (sqlservr.exe). Für SQL 7.0 ist dies ausreichend. Bei SQL 2000 im Feld Parameter angeben einen Kommandozeilen-Parameter '-sYOUR_SQL_NAME', wobei YOUR_SQL_NAME der Name, die zu Ihrem SQL Server während der Installation zugewiesen ist.
Legen Sie Haltepunkte in der Delphi-Code und führen Sie Projekt. SQL Server wird als Konsolenanwendung gestartet.
D) Sie können Ihr Xp aus Query Analyzer und Trace-Code in Delphi ausführen.
HINWEIS:
Ausführung einer erweiterten gespeicherten Prozedur erfolgt wie folgt:
Exec-Meister... Xp_DoEncrypt 'ValueToEncrypt', 'KeyValue'
gehen
E) um die Anwendung zu beenden, drücken Sie Strg + Pause im Fenster SQL Server-Konsole.
-------------------------------------------------------
Ende des Artikels. Unten folgt eine Einheit für ODS erforderlich.
-------------------------------------------------------
MsOdsApi.pas (Kopie aus Zeile nach unten)
{
-Des Clusters Master-Bibliothek-
Copyright © 1996-2002 Leonid Belousov (aka Master-Cluster)
Mailto: [email protected]
www.bramc.ru/Soft/
-Beschreibung: Übersetzung des C-Header von Microsoft Open Data Services-API
}
Einheit MsOdsApi;
//------------------------------------------------------------
Open Data Services-Header-Datei: srv.h
Copyright (c) 1989, 1990, 1991, 1997 von Microsoft Corp.
//
Vermeiden Sie doppelte Aufnahme
#ifndef _ODS_SRV_H_
_ODS_SRV_H_
#include 'windows.h'
ODS verwendet pack(4) auf alle CPU-Typen
#pragma pack(4)
#ifdef __cplusplus
Extern 'C' {}
#endif
definieren Sie Modell
#if! definiert (FAR)
WEIT weit
#endif
//------------------------------------------------------------
Formate von Datentypen
#if! defined(DBTYPEDEFS) / / nicht zu Konflikten mit DBLIB-Definitionen
#if! defined(MAXNUMERICLEN) / / nicht zu Konflikten mit ODBC-Definitionen
DBTYPEDEFS
Schnittstelle
verwendet
Windows;
Typ
DBBOOL = Byte;
DBBYTE = Byte;
DBTINYINT = Byte;
DBSMALLINT = Smallint;
DBUSMALLINT = Wort;
DBINT = Longint;
DBCHAR = Char;
PDBCHAR = ^ DBCHAR;
DBBINARY = Byte;
DBBIT = Byte;
DBFLT8 = Double;
Srv_datetime = Datensatz
Format für SRVDATETIME
Dtdays: Longint; Anzahl der Tage seit 01.01.1900
Dttime: Longword; Anzahl 300. Sekunde seit Mitte
Ende;
DBDATETIME = Srv_datetime;
srv_dbdatetime4 = Datensatz
Format für SRVDATETIM4
Numdays: Word; Anzahl der Tage seit 01.01.1900
Nummins: Word; Anzahl der Minuten seit Mitternacht
Ende;
DBDATETIM4 = srv_dbdatetime4;
Srv_money = Datensatz
Format für SRVMONEY
Mnyhigh: Longint;
Mnylow: Longword;
Ende;
DBMONEY = Srv_money;
DBFLT4 = Double;
DBMONEY4 = Longint;
const
MAXNUMERICDIG = 38;
DEFAULTPRECISION = 19; 18
DEFAULTSCALE = 0;
MAXNUMERICLEN = 16;
Typ
Srv_dbnumeric = packed Record
Format für SRVNUMERIC, SRVNUMERICN, SRVDECIMAL, SRVDECIMALN
Präzision: Byte;
Umfang: Byte;
Zeichen: Byte; 1 = positiv, 0 = negativ
Val: Array [0..MAXNUMERICLEN-1] Byte; Gepolsterte little-Endian-Wert
Ende;
DBNUMERIC = Srv_dbnumeric;
DBDECIMAL = DBNUMERIC;
#endif / / #if! defined(MAXNUMERICLEN)
#endif / / #if! definiert (DBTYPEDEFS)
//------------------------------------------------------------
Konstanten, die von APIs verwendet
Typ-Token
const
SRV_TDS_NULL = $1f;
SRV_TDS_TEXT = $23;
SRV_TDS_GUID = $24;
SRV_TDS_VARBINARY = $25;
SRV_TDS_INTN = $26;
SRV_TDS_VARCHAR = $27;
SRV_TDS_BINARY = $2D;
SRV_TDS_IMAGE = $22;
SRV_TDS_CHAR = $2f;
SRV_TDS_INT1 = $30;
SRV_TDS_BIT = $32;
SRV_TDS_INT2 = $34;
SRV_TDS_DECIMAL = $37;
SRV_TDS_INT4 = $38;
SRV_TDS_DATETIM4 = $3a;
SRV_TDS_FLT4 = $ 3 b;
SRV_TDS_MONEY = $3c;
SRV_TDS_DATETIME = $3D;
SRV_TDS_FLT8 = $3e;
SRV_TDS_NUMERIC = $3f;
SRV_TDS_NTEXT = $63;
SRV_TDS_BITN = $68;
SRV_TDS_DECIMALN = $6a;
SRV_TDS_NUMERICN = $6c;
SRV_TDS_FLTN = $6 d;
SRV_TDS_MONEYN = $6e;
SRV_TDS_DATETIMN = $6f;
SRV_TDS_MONEY4 = $7a;
SRV_TDS_INT8 = $7f; SQL 2000 und höher
SRV_TDS_BIGVARBINARY = $A5;
SRV_TDS_BIGVARCHAR = $A7;
SRV_TDS_BIGBINARY = $AD;
SRV_TDS_BIGCHAR = $AF;
SRV_TDS_NVARCHAR = $e7;
SRV_TDS_NCHAR = $ef;
Datatypes
Auch: Werte der Symbol-Parameter zu Srv_symbol beim 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;
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; SQL 2000 und höher
SRVBIGVARBINARY = SRV_TDS_BIGVARBINARY;
SRVBIGVARCHAR = SRV_TDS_BIGVARCHAR;
SRVBIGBINARY = SRV_TDS_BIGBINARY;
SRVBIGCHAR = SRV_TDS_BIGCHAR;
SRVNVARCHAR = SRV_TDS_NVARCHAR;
SRVNCHAR = SRV_TDS_NCHAR;
Werte für Srv_symbol-Typ-parameter
SRV_ERROR = 0;
SRV_DONE = 1;
SRV_DATATYPE = 2;
SRV_EVENT = 4;
Werte für Srv_symbol Symbol Parameter, wenn type = SRV_ERROR
SRV_ENO_OS_ERR = 0;
SRV_INFO = 1;
SRV_FATAL_PROCESS = 10;
SRV_FATAL_SERVER = 19;
Arten von Server-Ereignisse
Auch: Werte für Srv_symbol Symbol Parameter, wenn 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-Typ für TDS-7-Clients. Überladen mit SRV_ATTENTION_ACK
SRV_SKIP = 17;
SRV_TRANSMGR = 18;
SRV_OLEDB = 20;
SRV_INTERNAL_HANDLER = 99;
SRV_PROGRAMMER_DEFINED = 100;
Werte für Srv_config-Option-parameter
SRV_CONNECTIONS = 1;
SRV_LOGFILE = 2;
SRV_STACKSIZE = 3;
SRV_REMOTE_ACCESS = 7;
SRV_REMOTE_CONNECTIONS = 9;
SRV_MAX_PACKETS = 10;
SRV_MAXWORKINGTHREADS = 11;
SRV_MINWORKINGTHREADS = 12;
SRV_THREADTIMEOUT = 13;
SRV_MAX_PACKETSIZE = 17;
SRV_THREADPRIORITY = 18;
SRV_ANSI_CODEPAGE = 19;
SRV_DEFAULT_PACKETSIZE = 26;
SRV_PASSTHROUGH = 27;
Vlaues für Srv_config-Value-Parameter als option = SRV_THREADPRIORITY
SRV_PRIORITY_LOW = THREAD_PRIORITY_LOWEST;
SRV_PRIORITY_NORMAL = THREAD_PRIORITY_NORMAL;
SRV_PRIORITY_HIGH = THREAD_PRIORITY_HIGHEST;
SRV_PRIORITY_CRITICAL = THREAD_PRIORITY_TIME_CRITICAL;
Werte für Srv_sfield Feld parameter
SRV_SERVERNAME = 0;
SRV_VERSION = 6;
Um anzugeben, dass die Zeichenfolge null ist abgebrochen
WERT SRV_NULLTERM FEST =-1;
Werte der Parameter Msgtype srv_sendmsg

SRV_MSG_INFO = 1;
SRV_MSG_ERROR = 2;
Werte der Statusparameter zu srv_senddone
Auch: Werte für Symbolparameter, Srv_symbol beim type = SRV_DONE
SRV_DONE_FINAL = $0000;
SRV_DONE_MORE = $0001;
SRV_DONE_ERROR = $0002;
SRV_DONE_COUNT = $0010;
SRV_DONE_RPC_IN_BATCH = $0080;
Rückgabewerte von srv_paramstatus
SRV_PARAMRETURN = $0001;
SRV_PARAMDEFAULT = $0002;
Rückgabewerte von srv_rpcoptions
SRV_RECOMPILE = $0001;
SRV_NOMETADATA = $0002;
Werte des Felds Parameter für srv_pfield
SRV_LANGUAGE 1, wie oben bereits definiert.
SRV_EVENT 4, wie oben bereits definiert.
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;
Rückgabewert der SRV_TDSVERSION-Makro
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;
Rückgabewerte von APIs
Typ
SRVRETCODE = Integer; Erfolg oder Fehler
RETCODE = Integer;
const
ERFOLG = 1; Erfolgreiche Rückgabewert
FEHLER = 0; Erfolglose Rückgabewert
SRV_DUPLICATE_HANDLER = 2; / / zusätzliche Rückgabewert für Srv_pre/Post_handle
//------------------------------------------------
PreDeclare Strukturen
//
{Struct Srv_server;
Typedef Struct Srv_server SRV_SERVER;
Struct Srv_config;
Typedef Struct Srv_config SRV_CONFIG;
Struct Srv_proc;
Typedef Struct Srv_proc SRV_PROC;}
Typ
SRV_SERVER = Zeiger;
SRV_CONFIG = Zeiger;
SRV_PROC = Zeiger;
//------------------------------------------------
//------------------------------------------------
ODS-Makros & APIs
Beschreiben und Versenden einer Ergebnismenge
Funktion Srv_describe (Srvproc: SRV_PROC;
Colnumber: Integer; Column_name: PCHAR; Namelen: Integer;
DestType, Destlen, Srctype, Srclen: Integer; SrcData: Zeiger
): Integer; Cdecl;
Funktion Srv_setutype (Srvproc: SRV_PROC; Spalte: Integer; Benutzertyp: Longint): Integer; Cdecl;
Funktion Srv_setcoldata (Srvproc: SRV_PROC; Spalte: Integer; Daten: Pointer): Integer; Cdecl;
Funktion Srv_setcollen (Srvproc: SRV_PROC; Column, Len: Integer): Integer; Cdecl;
Funktion Srv_sendrow(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_senddone (Srvproc: SRV_PROC; Status, Curcmd: Word; Graf: Longint): Integer; Cdecl;
Umgang mit erweiterten Prozedur-Parameter
Funktion Srv_rpcparams(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_paraminfo (Srvproc: SRV_PROC; n: Integer; PbType: PByte;
PcbMaxLen, PcbActualLen: PULONG; PbData: PByte; PfNull: PBOOL): Integer; Cdecl;
Funktion Srv_paramsetoutput (Srvproc: SRV_PROC;
n: Integer; PbData: PByte; CbLen: ULONG; fNull: BOOL): Integer; Cdecl;
Funktion Srv_paramdata (Srvproc: SRV_PROC; n: Integer): Pointer; Cdecl;
Funktion Srv_paramlen (Srvproc: SRV_PROC; n: Integer): Integer; Cdecl;
Funktion Srv_parammaxlen (Srvproc: SRV_PROC; n: Integer): Integer; Cdecl;
Funktion Srv_paramtype (Srvproc: SRV_PROC; n: Integer): Integer; Cdecl;
Funktion Srv_paramset (Srvproc: SRV_PROC; n: Integer; Daten: Pointer; Int: Integer): Integer; Cdecl;
Funktion Srv_paramname (Srvproc: SRV_PROC; n: Integer; Var Len: Integer): PChar; Cdecl;
Funktion Srv_paramnumber (Srvproc: SRV_PROC; Name: PChar; Namelen: Integer): Integer; Cdecl;
//--------------------------------------------------------------
//--------------------------------------------------------------
Der Rest dieser APIs werden weiterhin unterstützt, in SQL Server 7.0,
aber nicht nach SQL Server 7.0 unterstützt werden kann
Makros
{SRV_GETCONFIG (a) Srv_getconfig (a)
SRV_GETSERVER (a) Srv_getserver (a)
SRV_GOT_ATTENTION (a) Srv_got_attention (a)
SRV_EVENTDATA (a) Srv_eventdata (a)
SRV_IODEAD (a) Srv_iodead (a)
SRV_TDSVERSION (a) Srv_tdsversion (a)}
Funktion Srv_getconfig(server: SRV_SERVER): SRV_CONFIG; Cdecl;
Funktion Srv_getserver(srvproc: SRV_PROC): SRV_SERVER; Cdecl;
Funktion Srv_got_attention(srvproc: SRV_PROC): Bool; Cdecl;
Funktion Srv_eventdata(srvproc: SRV_PROC): Zeiger; Cdecl;
Speicher
Funktion Srv_alloc(ulSize: Longint): Zeiger; Cdecl;
Funktion Srv_bmove (aus: Pointer; pto: Pointer; Graf: Longint): Integer; Cdecl;
Funktion Srv_bzero (Ort: Pointer; Graf: Longint): Integer; Cdecl;
Funktion Srv_free(ptr: Pointer): Integer; Cdecl;
Funktion Srv_config_fn (Config: SRV_CONFIG; Option: Longint; Wert: PChar; Valuelen: Integer): Integer; Cdecl;
Funktion Srv_config_alloc: SRV_CONFIG; Cdecl;
Funktion Srv_convert (Srvproc: SRV_PROC; Srctype: Integer; Src: Pointer; Srclen: DBINT;
DestType: Integer; Dest: Pointer; Destlen: DBINT): Integer; Cdecl;
{
Int (* Srv_errhandle (Int (* Handler) (SRV_SERVER * Server
SRV_PROC * Srvproc,
Int Srverror,
BYTE-Schweregrad
BYTE-Staat,
Int Oserrnum,
Char * Errtext,
Int Errtextlen,
Char * Oserrtext,
Int Oserrtextlen)))
(SRV_SERVER * Server
SRV_PROC * Srvproc,
Int Srverror,
BYTE-Schweregrad
BYTE-Staat,
Int Oserrnum,
Char * Errtext,
Int Errtextlen,
Char * Oserrtext,
Int Oserrtextlen);
}
Funktion Srv_event_fn (Srvproc: SRV_PROC; Ereignis: Integer; Daten: PByte): Integer; Cdecl;
Funktion Srv_getuserdata(srvproc: SRV_PROC): Zeiger; Cdecl;
Funktion Srv_getbindtoken (Srvproc: SRV_PROC; Token_buf: PChar): Integer; Cdecl;
Funktion Srv_getdtcxact (Srvproc: SRV_PROC; Ppv: Pointer): Integer; Cdecl;
Typedef Int (* EventHandler)(void*);
Typ
EventHandler = Zeiger;
Funktion Srv_handle (Server: SRV_SERVER; Int: Longint; Handler: EventHandler): EventHandler; Cdecl;
Funktion Srv_impersonate_client(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_init (Config: SRV_CONFIG; Connectname: PChar; Namelen: Integer): SRV_SERVER; Cdecl;
Funktion Srv_iodead(srvproc: SRV_PROC): Bool; Cdecl;
Funktion Srv_langcpy (Srvproc: SRV_PROC; starten, Nbytes: Longint; Puffer: PChar): Longint; Cdecl;
Funktion Srv_langlen(srvproc: SRV_PROC): Longint; Cdecl;
Funktion Srv_langptr(srvproc: SRV_PROC): Zeiger; Cdecl;
Funktion Srv_log (Server: SRV_SERVER; Datumsstempel: Bool; msg: PChar; Msglen: Integer): Integer; Cdecl;
Funktion Srv_paramstatus (Srvproc: SRV_PROC; n: Integer): Integer; Cdecl;
Funktion Srv_pfield (Srvproc: SRV_PROC; Feld: Integer; Len: PInteger): PChar; Cdecl;
Funktion Srv_returnval (Srvproc: SRV_PROC; wert_name: PDBCHAR; Len: Integer; Status: Byte;
iType, Maxlen, Datalen: DBINT; Wert: PByte): Integer; Cdecl;
Funktion Srv_revert_to_self(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_rpcdb (Srvproc: SRV_PROC; Len: PInteger): PChar; Cdecl;
Funktion Srv_rpcname (Srvproc: SRV_PROC; Len: PInteger): PChar; Cdecl;
Funktion Srv_rpcnumber(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_rpcoptions(srvproc: SRV_PROC): Word; Cdecl;
Funktion Srv_rpcowner (Srvproc: SRV_PROC; Len: PInteger): PChar; Cdecl;
Funktion Srv_run(server: SRV_SERVER): Integer; Cdecl;
Funktion Srv_sendmsg (Srvproc: SRV_PROC;
MsgType: Integer; Msgnum: DBINT; Meldungsklasse, st Te: DBTINYINT;
Rpcname: PChar; Rpcnamelen: Integer;
LINENUM: Word; msg: PChar; Msglen: Integer): Integer; Cdecl;
Funktion Srv_ansi_sendmsg (Srvproc: SRV_PROC;
MsgType: Integer; Msgnum: DBINT; Meldungsklasse, staatliche: DBTINYINT;
Rpcname: PChar; Rpcnamelen: Integer;
LINENUM: Word; msg: PChar; Msglen: Integer): Integer; Cdecl;
Funktion Srv_sendstatus (Srvproc: SRV_PROC; Status: Longint): Integer; Cdecl;
Funktion Srv_setuserdata (Srvproc: SRV_PROC; Ptr: Pointer): Integer; Cdecl;
Funktion Srv_sfield (Server: SRV_SERVER; Feld: Integer; Len: PInteger): PChar; Cdecl;
Funktion Srv_symbol (iType, Symbol: Integer; Len: PInteger): PChar; Cdecl;
Funktion Srv_tdsversion(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_writebuf (Srvproc: SRV_PROC; Ptr: Pointer; Graf: Word): Integer; Cdecl;
Funktion Srv_willconvert (Srctype, Desttype: Integer): Bool; Cdecl;
Prozedur Srv_ackattention(srvproc: SRV_PROC); Cdecl;
Funktion Srv_terminatethread(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_sendstatistics(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_clearstatistics(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_setevent (Server: SRV_SERVER; Ereignis: Integer): Integer; Cdecl;
Funktion Srv_message_handler (Srvproc: SRV_PROC;
ERRORNUM: Integer; schwere, staatliche: Byte; Oserrnum: Integer; Errtext: PChar;
Errtextlen: Integer; Oserrtext: PChar; Oserrtextlen: Integer): Integer; Cdecl;
Funktion Srv_pre_handle (Server: SRV_SERVER; Srvproc: SRV_PROC;
Veranstaltung: Longint; Handler: EventHandler; Entfernen: Bool): Integer; Cdecl;
Funktion Srv_post_handle (Server: SRV_SERVER; Srvproc: SRV_PROC;
Veranstaltung: Longint; Handler: EventHandler; Entfernen: Bool): Integer; Cdecl;
Funktion Srv_post_completion_queue (Srvproc: SRV_PROC; Inbuf: PChar; Inbuflen: PChar): Integer; Cdecl;
Funktion Srv_IgnoreAnsiToOem (Srvproc: SRV_PROC; bTF: BOOL): Integer; Cdecl;
#ifdef __cplusplus
//}
#endif
#pragma pack()
const
SS_MAJOR_VERSION = 7;
SS_MINOR_VERSION = 00;
SS_LEVEL_VERSION = 0000;
SS_MINIMUM_VERSION = '7.00.00.0000';
ODS_VERSION = ((SS_MAJOR_VERSION shl 24) oder (SS_MINOR_VERSION Shl 16));
#endif //_ODS_SRV_H_
//////////////////////////////////////////////////////////////////
Vorgeschlagene Durchführung des __GetXpVersion
//
__declspec(dllexport) ULONG __GetXpVersion()
//{
Rückkehr ODS_VERSION;
//}
//////////////////////////////////////////////////////////////////
Umsetzung
const
sLibName = 'Opends60.DLL';

Funktion Srv_describe; externe sLibName Namen 'Srv_describe';
Funktion Srv_setutype; externe sLibName Namen 'Srv_setutype';
Funktion Srv_setcoldata; externe sLibName Namen 'Srv_setcoldata';
Funktion Srv_setcollen; externe sLibName Namen 'Srv_setcollen';
Funktion Srv_sendrow; externe sLibName Namen 'Srv_sendrow';
Funktion Srv_senddone; externe sLibName Name 'Srv_senddone';
Umgang mit erweiterten Prozedur-Parameter
Funktion Srv_rpcparams; externe sLibName Namen 'Srv_rpcparams';
Funktion Srv_paraminfo; externe sLibName Namen 'Srv_paraminfo';
Funktion Srv_paramsetoutput; externe sLibName Namen 'Srv_paramsetoutput';
Funktion Srv_paramdata; externe sLibName Namen 'Srv_paramdata';
Funktion Srv_paramlen; externe sLibName Namen 'Srv_paramlen';
Funktion Srv_parammaxlen; externe sLibName Namen 'Srv_parammaxlen';
Funktion Srv_paramtype; externe sLibName Namen 'Srv_paramtype';
Funktion Srv_paramset; externe sLibName Namen 'Srv_paramset';
Funktion Srv_paramname; externe sLibName Namen 'Srv_paramname';
Funktion Srv_paramnumber; externe sLibName Namen 'Srv_paramnumber';
//--------------------------------------------------------------
Der Rest dieser APIs werden weiterhin unterstützt, in SQL Server 7.0,
aber nicht nach SQL Server 7.0 unterstützt werden kann
Funktion Srv_getconfig; externe sLibName Namen 'Srv_getconfig';
Funktion Srv_getserver; externe sLibName Namen 'Srv_getserver';
Funktion Srv_got_attention; externe sLibName Namen 'Srv_got_attention';
Funktion Srv_eventdata; externe sLibName Namen 'Srv_eventdata';
Speicher
Funktion Srv_alloc; externe sLibName Namen 'Srv_alloc';
Funktion Srv_bmove; externe sLibName Namen 'Srv_bmove';
Funktion Srv_bzero; externe sLibName Namen 'Srv_bzero';
Funktion Srv_free; externe sLibName Namen 'Srv_free';
Funktion Srv_config_fn; externe sLibName Namen 'Srv_config';
Funktion Srv_config_alloc; externe sLibName Namen 'Srv_config_alloc';
Funktion Srv_convert; externe sLibName Namen 'Srv_convert';
Funktion Srv_event_fn; externe sLibName Namen 'Srv_event';
Funktion Srv_getuserdata; externe sLibName Namen 'Srv_getuserdata';
Funktion Srv_getbindtoken; externe sLibName Namen 'Srv_getbindtoken';
Funktion Srv_getdtcxact; externe sLibName Namen 'Srv_getdtcxact';
Funktion Srv_handle; externe sLibName Namen 'Srv_handle';
Funktion Srv_impersonate_client; externe sLibName Namen 'Srv_impersonate_client';
Funktion Srv_init; externe sLibName Namen 'Srv_init';
Funktion Srv_iodead; externe sLibName Namen 'Srv_iodead';
Funktion Srv_langcpy; externe sLibName Namen 'Srv_langcpy';
Funktion Srv_langlen; externe sLibName Namen 'Srv_langlen';
Funktion Srv_langptr; externe sLibName Namen 'Srv_langptr';
Funktion Srv_log; externe sLibName Namen 'Srv_log';
Funktion Srv_paramstatus; externe sLibName Namen 'Srv_paramstatus';
Funktion Srv_pfield; externe sLibName Namen 'Srv_pfield';
Funktion Srv_returnval; externe sLibName Namen 'Srv_returnval';
Funktion für Srv_revert_to_self; externe sLibName Name für ' Srv_revert_to_self';
Funktion Srv_rpcdb; externe sLibName Namen 'Srv_rpcdb';
Funktion Srv_rpcname; externe sLibName Namen 'Srv_rpcname';
Funktion Srv_rpcnumber; externe sLibName Namen 'Srv_rpcnumber';
Funktion Srv_rpcoptions; externe sLibName Namen 'Srv_rpcoptions';
Funktion Srv_rpcowner; externe sLibName Namen 'Srv_rpcowner';
Funktion Srv_run; externe sLibName Namen 'Srv_run';
Funktion Srv_sendmsg; externe sLibName Namen 'Srv_sendmsg';
Funktion Srv_ansi_sendmsg; externe sLibName Namen 'Srv_ansi_sendmsg';
Funktion Srv_sendstatus; externe sLibName Namen 'Srv_sendstatus';
Funktion Srv_setuserdata; externe sLibName Namen 'Srv_setuserdata';
Funktion Srv_sfield; externe sLibName Namen 'Srv_sfield';
Funktion Srv_symbol; externe sLibName Namen 'Srv_symbol';
Funktion Srv_tdsversion; externe sLibName Namen 'Srv_tdsversion';
Funktion Srv_writebuf; externe sLibName Namen 'Srv_writebuf';
Funktion Srv_willconvert; externe sLibName Namen 'Srv_willconvert';
Prozedur Srv_ackattention; externe sLibName Namen 'Srv_ackattention';
Funktion Srv_terminatethread; externe sLibName Namen 'Srv_terminatethread';
Funktion Srv_sendstatistics; externe sLibName Namen 'Srv_sendstatistics';
Funktion Srv_clearstatistics; externe sLibName Namen 'Srv_clearstatistics';
Funktion Srv_setevent; externe sLibName Namen 'Srv_setevent';
Funktion Srv_message_handler; externe sLibName Namen 'Srv_message_handler';
Funktion Srv_pre_handle; externe sLibName Namen 'Srv_pre_handle';
Funktion Srv_post_handle; externe sLibName Namen 'Srv_post_handle';
Funktion Srv_post_completion_queue; externe sLibName Namen 'Srv_post_completion_queue';
Funktion Srv_IgnoreAnsiToOem; externe sLibName Namen 'Srv_IgnoreAnsiToOem';
Ende.









Erweiterte gespeicherte Prozeduren mit delphi


Erweiterte gespeicherte Prozeduren mit delphi : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


Haben Sie jemals versucht, eine gespeicherte Prozedur auf einem SQL-Server erstellen?
Ist was passiert, wenn die Funktionalität, die Sie wünschen, zu übernehmen nicht innerhalb von SQL, sondern in Ihrem Delphi-Projekt? Microsoft bietet ODS (Open Data Services) ist eine API, mit denen Sie solche Funktionalität erstellen, indem der DLL zu Ihrem SQL-Server, die erweiterte gespeicherte Prozeduren enthalten.
Dies ist, wie Sie es tun...
Als besonderen Bonus ist dieser Artikel auch eine einfache Lösung für die Verschlüsselung Ihrer Daten in SQL Server mithilfe von erweiterte gespeicherte Prozeduren.
Was brauchen wir?
1) opends60.dll (von einer vollständigen Installation mit Entwickler-Tools von MSSQL oder MSDE)
2) MsOdsApi.pas--Autor: Leonid 'MC' Belousov (als www.bramc.ru/soft/) Headerdatei opends60.dll verwendet) (enthalten am Ende des Artikels)
3) einer lokalen SQL-Server zum Testen (MSDE wird gut tun).
Hinweis: Für Kryptographie habe ich die Komponenten unter MIT-Lizenz hier gefunden:
https://www.cityinthesky.co.uk/Cryptography.html
Schritte:
1) erstellen Sie eine neue DLL.

2) bilden Sie eine Einheit, und fügen Sie in der Klausel verwendet die MsOdsApi-Einheit.

3) fügen Sie in der Bibliotheksdatei knapp Ther Uses-Clausel Exporte und die Namen der Funktionen zu exportieren:
Bibliothek MyEncryptDll;
verwendet
SysUtils,
Klassen,
UNIT1 in 'Unit1.pas';
Exporte
Xp_DoEncrypt,
Xp_DoDecrypt;
beginnen
Ende.

4) fügen Sie Ihre Funktionsreferenz, in der Unit-Datei direkt unter die Klausel verwendet:
Funktion Xp_DoEncrypt(pSrvProc: SRV_PROC): Integer; Cdecl;
Funktion Xp_DoDecrypt(pSrvProc: SRV_PROC): Integer; Cdecl;
Hinweise: Cdecl ist erforderlich für ODS, Ihre Funktionen aufrufen zu können.
SRV_PROC ist ein Handle für die gespeicherte Prozedur Informationen.

5) der Code für die DoEncrypt ist:
Basierend auf Source-Code von Leonid 'MC' Belousov (als www.bramc.ru/soft/)
(DoDecrypt ist genau das gleiche nur mit einem DecryptString(s)-Aufruf.
Funktion Xp_Encrypt(pSrvProc: SRV_PROC): Integer; Cdecl;
var
i, Sz: Integer;
bType: Byte;
fNull: Bool;
CbMaxLen, CbActualLen: ULONG;
MyData, Myanswer, MyKey:array [0..255] char;
FDCP_3des: TDCP_3des;
S:String;
PS: Pchar;
beginnen
für i: = 0 bis 255 tun
beginnen
MyData [i]: = #0;
Myanswer [i]: = #0;
MyKey [i]: = #0;
Ende;
Wenn srv_rpcparams(pSrvProc) = 2 then / / überprüfen, ob Eingangsparameter vorhanden sind...
beginnen
Srv_paraminfo (pSrvProc, 1, von @bType, / / Let's use 1. input-Parameter!
@cbMaxLen, die @cbActualLen, / / Hinweis: Wir übernehmen hier welche nur 2 Parameter
[0]-@myData, @fNull); der Typ kann String übergeben werden!!!
bType: = SRVVARCHAR;
Srv_paraminfo (pSrvProc, 2, von @bType,
@cbMaxLen, @cbActualLen,
[0]-@myKey, @fNull);
Ende
sonst
MyData: = ''; Keine Eingabeparameter? Verwenden Sie stattdessen Standardwert.
VERSCHLÜSSELUNGSCODE UNTER IHNEN KANN TUN, WAS SIE BRAUCHEN, HIER MIT DEN PARAMETERWERTEN
FDCP_3des: = TDCP_3des. Create(Nil);
FDCP_3des. Blockgröße: = 64;
FDCP_3des. Algorithmus: = '3DES';
FDCP_3des. CipherMode: = CmCBC;
FDCP_3des. ID: = 24;
FDCP_3des. MaxKeySize: = 192;
FDCP_3des. InitStr(myKey,TDCP_sha1);
s:=String(MyData);
Strpcopy (MyAnswer, FDCP_3des. EncryptString(s));
FDCP_3des. Brennen;
ANTWORT-WERTEN, PCHAR UND IMMER GRÖßE EINRICHTEN
s:=String(myAnswer);
SZ: = Length(s);
PS:=AllocMem(SZ);
PS: = Pchar(s);
Beschreiben Sie Spalten
(Eigentlich machst du, die für jeden Datentyp und jede Spalte, die Sie zurückgeben möchten).
Srv_describe (pSrvProc, 1, 'Wert', Wert SRV_NULLTERM fest,
SRVVARCHAR, Sz,
SRVVARCHAR, Sz, Nil);
BEGIN-Ausgabe...
Srv_setcoldata (pSrvProc, 1, von @ps[0]);
srv_sendrow(pSrvProc); / / Send die Zeile.
Lassen Sie Rückkehr Output-Parameter (nur beispielsweise).
Srv_senddone (pSrvProc, / / endlich Daten an SQL Server senden:
(SRV_DONE_COUNT or SRV_DONE_MORE), 0, 1); / / send Ergebnisse Vollzugsmeldung.
VERSCHLÜSSELUNGSKOMPONENTE FREIGEBEN
FreeAndNil(FDCP_3des);
Ergebnis: = 1; / / Bericht Erfolg (1 = SUCCEED, 0 = Fehler)
Ende;
Hinweis: Es gibt eine Reihe von Dingen, die Sie mit ODS tun können. Dies ist nur ein Beispiel für Delphi. Sie können lesen Sie die ODS-Hilfe in MSDN und noch mehr.

6) testen und Debuggen: (Quelle Leonid 'MC' Belousov (als www.bramc.ru/soft/))
A) installieren Sie SQL 7.0/2000 auf Ihrer Workstation (oder Delphi auf Workstation, dem SQL Server installiert ist).
B) registrieren Sie Ihr Xp auf SQL Server.
HINWEISE:
Registrieren Sie Xp wie folgt:
Nutzen Sie master
gehen
Sp_addextendedproc 'Xp_DoEncrypt', 'MyEncryptDll.dll'
gehen
Sp_addextendedproc 'Xp_DoDecrypt', 'MyEncryptDll.dll'
gehen
Aufheben der Registrierung Xp wie folgt:
Nutzen Sie master
gehen
Sp_dropextendedproc 'Xp_DoEncrypt'
gehen
Sp_dropextendedproc 'Xp_DoDecrypt'
gehen
Für den Fall, dass es noch von SQL verwendet wird wie diese DLL zu entsperren:
Nutzen Sie master
gehen
DBCC MyEncryptDll(FREE)
gehen
C) in Delphi -> Wähle im Hauptmenü Ausführen von Parametern ausführen.
Geben Sie im Feld Host-Anwendung einen Pfadnamen zu Ihrem SQL Server ausführbare (sqlservr.exe). Für SQL 7.0 ist dies ausreichend. Bei SQL 2000 im Feld Parameter angeben einen Kommandozeilen-Parameter '-sYOUR_SQL_NAME', wobei YOUR_SQL_NAME der Name, die zu Ihrem SQL Server während der Installation zugewiesen ist.
Legen Sie Haltepunkte in der Delphi-Code und führen Sie Projekt. SQL Server wird als Konsolenanwendung gestartet.
D) Sie können Ihr Xp aus Query Analyzer und Trace-Code in Delphi ausführen.
HINWEIS:
Ausführung einer erweiterten gespeicherten Prozedur erfolgt wie folgt:
Exec-Meister... Xp_DoEncrypt 'ValueToEncrypt', 'KeyValue'
gehen
E) um die Anwendung zu beenden, drücken Sie Strg + Pause im Fenster SQL Server-Konsole.
-------------------------------------------------------
Ende des Artikels. Unten folgt eine Einheit für ODS erforderlich.
-------------------------------------------------------
MsOdsApi.pas (Kopie aus Zeile nach unten)
{
-Des Clusters Master-Bibliothek-
Copyright © 1996-2002 Leonid Belousov (aka Master-Cluster)
Mailto: [email protected]
www.bramc.ru/Soft/
-Beschreibung: Übersetzung des C-Header von Microsoft Open Data Services-API
}
Einheit MsOdsApi;
//------------------------------------------------------------
Open Data Services-Header-Datei: srv.h
Copyright (c) 1989, 1990, 1991, 1997 von Microsoft Corp.
//
Vermeiden Sie doppelte Aufnahme
#ifndef _ODS_SRV_H_
_ODS_SRV_H_
#include 'windows.h'
ODS verwendet pack(4) auf alle CPU-Typen
#pragma pack(4)
#ifdef __cplusplus
Extern 'C' {}
#endif
definieren Sie Modell
#if! definiert (FAR)
WEIT weit
#endif
//------------------------------------------------------------
Formate von Datentypen
#if! defined(DBTYPEDEFS) / / nicht zu Konflikten mit DBLIB-Definitionen
#if! defined(MAXNUMERICLEN) / / nicht zu Konflikten mit ODBC-Definitionen
DBTYPEDEFS
Schnittstelle
verwendet
Windows;
Typ
DBBOOL = Byte;
DBBYTE = Byte;
DBTINYINT = Byte;
DBSMALLINT = Smallint;
DBUSMALLINT = Wort;
DBINT = Longint;
DBCHAR = Char;
PDBCHAR = ^ DBCHAR;
DBBINARY = Byte;
DBBIT = Byte;
DBFLT8 = Double;
Srv_datetime = Datensatz
Format für SRVDATETIME
Dtdays: Longint; Anzahl der Tage seit 01.01.1900
Dttime: Longword; Anzahl 300. Sekunde seit Mitte
Ende;
DBDATETIME = Srv_datetime;
srv_dbdatetime4 = Datensatz
Format für SRVDATETIM4
Numdays: Word; Anzahl der Tage seit 01.01.1900
Nummins: Word; Anzahl der Minuten seit Mitternacht
Ende;
DBDATETIM4 = srv_dbdatetime4;
Srv_money = Datensatz
Format für SRVMONEY
Mnyhigh: Longint;
Mnylow: Longword;
Ende;
DBMONEY = Srv_money;
DBFLT4 = Double;
DBMONEY4 = Longint;
const
MAXNUMERICDIG = 38;
DEFAULTPRECISION = 19; 18
DEFAULTSCALE = 0;
MAXNUMERICLEN = 16;
Typ
Srv_dbnumeric = packed Record
Format für SRVNUMERIC, SRVNUMERICN, SRVDECIMAL, SRVDECIMALN
Präzision: Byte;
Umfang: Byte;
Zeichen: Byte; 1 = positiv, 0 = negativ
Val: Array [0..MAXNUMERICLEN-1] Byte; Gepolsterte little-Endian-Wert
Ende;
DBNUMERIC = Srv_dbnumeric;
DBDECIMAL = DBNUMERIC;
#endif / / #if! defined(MAXNUMERICLEN)
#endif / / #if! definiert (DBTYPEDEFS)
//------------------------------------------------------------
Konstanten, die von APIs verwendet
Typ-Token
const
SRV_TDS_NULL = $1f;
SRV_TDS_TEXT = $23;
SRV_TDS_GUID = $24;
SRV_TDS_VARBINARY = $25;
SRV_TDS_INTN = $26;
SRV_TDS_VARCHAR = $27;
SRV_TDS_BINARY = $2D;
SRV_TDS_IMAGE = $22;
SRV_TDS_CHAR = $2f;
SRV_TDS_INT1 = $30;
SRV_TDS_BIT = $32;
SRV_TDS_INT2 = $34;
SRV_TDS_DECIMAL = $37;
SRV_TDS_INT4 = $38;
SRV_TDS_DATETIM4 = $3a;
SRV_TDS_FLT4 = $ 3 b;
SRV_TDS_MONEY = $3c;
SRV_TDS_DATETIME = $3D;
SRV_TDS_FLT8 = $3e;
SRV_TDS_NUMERIC = $3f;
SRV_TDS_NTEXT = $63;
SRV_TDS_BITN = $68;
SRV_TDS_DECIMALN = $6a;
SRV_TDS_NUMERICN = $6c;
SRV_TDS_FLTN = $6 d;
SRV_TDS_MONEYN = $6e;
SRV_TDS_DATETIMN = $6f;
SRV_TDS_MONEY4 = $7a;
SRV_TDS_INT8 = $7f; SQL 2000 und höher
SRV_TDS_BIGVARBINARY = $A5;
SRV_TDS_BIGVARCHAR = $A7;
SRV_TDS_BIGBINARY = $AD;
SRV_TDS_BIGCHAR = $AF;
SRV_TDS_NVARCHAR = $e7;
SRV_TDS_NCHAR = $ef;
Datatypes
Auch: Werte der Symbol-Parameter zu Srv_symbol beim 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;
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; SQL 2000 und höher
SRVBIGVARBINARY = SRV_TDS_BIGVARBINARY;
SRVBIGVARCHAR = SRV_TDS_BIGVARCHAR;
SRVBIGBINARY = SRV_TDS_BIGBINARY;
SRVBIGCHAR = SRV_TDS_BIGCHAR;
SRVNVARCHAR = SRV_TDS_NVARCHAR;
SRVNCHAR = SRV_TDS_NCHAR;
Werte für Srv_symbol-Typ-parameter
SRV_ERROR = 0;
SRV_DONE = 1;
SRV_DATATYPE = 2;
SRV_EVENT = 4;
Werte für Srv_symbol Symbol Parameter, wenn type = SRV_ERROR
SRV_ENO_OS_ERR = 0;
SRV_INFO = 1;
SRV_FATAL_PROCESS = 10;
SRV_FATAL_SERVER = 19;
Arten von Server-Ereignisse
Auch: Werte für Srv_symbol Symbol Parameter, wenn 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-Typ für TDS-7-Clients. Überladen mit SRV_ATTENTION_ACK
SRV_SKIP = 17;
SRV_TRANSMGR = 18;
SRV_OLEDB = 20;
SRV_INTERNAL_HANDLER = 99;
SRV_PROGRAMMER_DEFINED = 100;
Werte für Srv_config-Option-parameter
SRV_CONNECTIONS = 1;
SRV_LOGFILE = 2;
SRV_STACKSIZE = 3;
SRV_REMOTE_ACCESS = 7;
SRV_REMOTE_CONNECTIONS = 9;
SRV_MAX_PACKETS = 10;
SRV_MAXWORKINGTHREADS = 11;
SRV_MINWORKINGTHREADS = 12;
SRV_THREADTIMEOUT = 13;
SRV_MAX_PACKETSIZE = 17;
SRV_THREADPRIORITY = 18;
SRV_ANSI_CODEPAGE = 19;
SRV_DEFAULT_PACKETSIZE = 26;
SRV_PASSTHROUGH = 27;
Vlaues für Srv_config-Value-Parameter als option = SRV_THREADPRIORITY
SRV_PRIORITY_LOW = THREAD_PRIORITY_LOWEST;
SRV_PRIORITY_NORMAL = THREAD_PRIORITY_NORMAL;
SRV_PRIORITY_HIGH = THREAD_PRIORITY_HIGHEST;
SRV_PRIORITY_CRITICAL = THREAD_PRIORITY_TIME_CRITICAL;
Werte für Srv_sfield Feld parameter
SRV_SERVERNAME = 0;
SRV_VERSION = 6;
Um anzugeben, dass die Zeichenfolge null ist abgebrochen
WERT SRV_NULLTERM FEST =-1;
Werte der Parameter Msgtype srv_sendmsg

SRV_MSG_INFO = 1;
SRV_MSG_ERROR = 2;
Werte der Statusparameter zu srv_senddone
Auch: Werte für Symbolparameter, Srv_symbol beim type = SRV_DONE
SRV_DONE_FINAL = $0000;
SRV_DONE_MORE = $0001;
SRV_DONE_ERROR = $0002;
SRV_DONE_COUNT = $0010;
SRV_DONE_RPC_IN_BATCH = $0080;
Rückgabewerte von srv_paramstatus
SRV_PARAMRETURN = $0001;
SRV_PARAMDEFAULT = $0002;
Rückgabewerte von srv_rpcoptions
SRV_RECOMPILE = $0001;
SRV_NOMETADATA = $0002;
Werte des Felds Parameter für srv_pfield
SRV_LANGUAGE 1, wie oben bereits definiert.
SRV_EVENT 4, wie oben bereits definiert.
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;
Rückgabewert der SRV_TDSVERSION-Makro
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;
Rückgabewerte von APIs
Typ
SRVRETCODE = Integer; Erfolg oder Fehler
RETCODE = Integer;
const
ERFOLG = 1; Erfolgreiche Rückgabewert
FEHLER = 0; Erfolglose Rückgabewert
SRV_DUPLICATE_HANDLER = 2; / / zusätzliche Rückgabewert für Srv_pre/Post_handle
//------------------------------------------------
PreDeclare Strukturen
//
{Struct Srv_server;
Typedef Struct Srv_server SRV_SERVER;
Struct Srv_config;
Typedef Struct Srv_config SRV_CONFIG;
Struct Srv_proc;
Typedef Struct Srv_proc SRV_PROC;}
Typ
SRV_SERVER = Zeiger;
SRV_CONFIG = Zeiger;
SRV_PROC = Zeiger;
//------------------------------------------------
//------------------------------------------------
ODS-Makros & APIs
Beschreiben und Versenden einer Ergebnismenge
Funktion Srv_describe (Srvproc: SRV_PROC;
Colnumber: Integer; Column_name: PCHAR; Namelen: Integer;
DestType, Destlen, Srctype, Srclen: Integer; SrcData: Zeiger
): Integer; Cdecl;
Funktion Srv_setutype (Srvproc: SRV_PROC; Spalte: Integer; Benutzertyp: Longint): Integer; Cdecl;
Funktion Srv_setcoldata (Srvproc: SRV_PROC; Spalte: Integer; Daten: Pointer): Integer; Cdecl;
Funktion Srv_setcollen (Srvproc: SRV_PROC; Column, Len: Integer): Integer; Cdecl;
Funktion Srv_sendrow(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_senddone (Srvproc: SRV_PROC; Status, Curcmd: Word; Graf: Longint): Integer; Cdecl;
Umgang mit erweiterten Prozedur-Parameter
Funktion Srv_rpcparams(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_paraminfo (Srvproc: SRV_PROC; n: Integer; PbType: PByte;
PcbMaxLen, PcbActualLen: PULONG; PbData: PByte; PfNull: PBOOL): Integer; Cdecl;
Funktion Srv_paramsetoutput (Srvproc: SRV_PROC;
n: Integer; PbData: PByte; CbLen: ULONG; fNull: BOOL): Integer; Cdecl;
Funktion Srv_paramdata (Srvproc: SRV_PROC; n: Integer): Pointer; Cdecl;
Funktion Srv_paramlen (Srvproc: SRV_PROC; n: Integer): Integer; Cdecl;
Funktion Srv_parammaxlen (Srvproc: SRV_PROC; n: Integer): Integer; Cdecl;
Funktion Srv_paramtype (Srvproc: SRV_PROC; n: Integer): Integer; Cdecl;
Funktion Srv_paramset (Srvproc: SRV_PROC; n: Integer; Daten: Pointer; Int: Integer): Integer; Cdecl;
Funktion Srv_paramname (Srvproc: SRV_PROC; n: Integer; Var Len: Integer): PChar; Cdecl;
Funktion Srv_paramnumber (Srvproc: SRV_PROC; Name: PChar; Namelen: Integer): Integer; Cdecl;
//--------------------------------------------------------------
//--------------------------------------------------------------
Der Rest dieser APIs werden weiterhin unterstützt, in SQL Server 7.0,
aber nicht nach SQL Server 7.0 unterstützt werden kann
Makros
{SRV_GETCONFIG (a) Srv_getconfig (a)
SRV_GETSERVER (a) Srv_getserver (a)
SRV_GOT_ATTENTION (a) Srv_got_attention (a)
SRV_EVENTDATA (a) Srv_eventdata (a)
SRV_IODEAD (a) Srv_iodead (a)
SRV_TDSVERSION (a) Srv_tdsversion (a)}
Funktion Srv_getconfig(server: SRV_SERVER): SRV_CONFIG; Cdecl;
Funktion Srv_getserver(srvproc: SRV_PROC): SRV_SERVER; Cdecl;
Funktion Srv_got_attention(srvproc: SRV_PROC): Bool; Cdecl;
Funktion Srv_eventdata(srvproc: SRV_PROC): Zeiger; Cdecl;
Speicher
Funktion Srv_alloc(ulSize: Longint): Zeiger; Cdecl;
Funktion Srv_bmove (aus: Pointer; pto: Pointer; Graf: Longint): Integer; Cdecl;
Funktion Srv_bzero (Ort: Pointer; Graf: Longint): Integer; Cdecl;
Funktion Srv_free(ptr: Pointer): Integer; Cdecl;
Funktion Srv_config_fn (Config: SRV_CONFIG; Option: Longint; Wert: PChar; Valuelen: Integer): Integer; Cdecl;
Funktion Srv_config_alloc: SRV_CONFIG; Cdecl;
Funktion Srv_convert (Srvproc: SRV_PROC; Srctype: Integer; Src: Pointer; Srclen: DBINT;
DestType: Integer; Dest: Pointer; Destlen: DBINT): Integer; Cdecl;
{
Int (* Srv_errhandle (Int (* Handler) (SRV_SERVER * Server
SRV_PROC * Srvproc,
Int Srverror,
BYTE-Schweregrad
BYTE-Staat,
Int Oserrnum,
Char * Errtext,
Int Errtextlen,
Char * Oserrtext,
Int Oserrtextlen)))
(SRV_SERVER * Server
SRV_PROC * Srvproc,
Int Srverror,
BYTE-Schweregrad
BYTE-Staat,
Int Oserrnum,
Char * Errtext,
Int Errtextlen,
Char * Oserrtext,
Int Oserrtextlen);
}
Funktion Srv_event_fn (Srvproc: SRV_PROC; Ereignis: Integer; Daten: PByte): Integer; Cdecl;
Funktion Srv_getuserdata(srvproc: SRV_PROC): Zeiger; Cdecl;
Funktion Srv_getbindtoken (Srvproc: SRV_PROC; Token_buf: PChar): Integer; Cdecl;
Funktion Srv_getdtcxact (Srvproc: SRV_PROC; Ppv: Pointer): Integer; Cdecl;
Typedef Int (* EventHandler)(void*);
Typ
EventHandler = Zeiger;
Funktion Srv_handle (Server: SRV_SERVER; Int: Longint; Handler: EventHandler): EventHandler; Cdecl;
Funktion Srv_impersonate_client(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_init (Config: SRV_CONFIG; Connectname: PChar; Namelen: Integer): SRV_SERVER; Cdecl;
Funktion Srv_iodead(srvproc: SRV_PROC): Bool; Cdecl;
Funktion Srv_langcpy (Srvproc: SRV_PROC; starten, Nbytes: Longint; Puffer: PChar): Longint; Cdecl;
Funktion Srv_langlen(srvproc: SRV_PROC): Longint; Cdecl;
Funktion Srv_langptr(srvproc: SRV_PROC): Zeiger; Cdecl;
Funktion Srv_log (Server: SRV_SERVER; Datumsstempel: Bool; msg: PChar; Msglen: Integer): Integer; Cdecl;
Funktion Srv_paramstatus (Srvproc: SRV_PROC; n: Integer): Integer; Cdecl;
Funktion Srv_pfield (Srvproc: SRV_PROC; Feld: Integer; Len: PInteger): PChar; Cdecl;
Funktion Srv_returnval (Srvproc: SRV_PROC; wert_name: PDBCHAR; Len: Integer; Status: Byte;
iType, Maxlen, Datalen: DBINT; Wert: PByte): Integer; Cdecl;
Funktion Srv_revert_to_self(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_rpcdb (Srvproc: SRV_PROC; Len: PInteger): PChar; Cdecl;
Funktion Srv_rpcname (Srvproc: SRV_PROC; Len: PInteger): PChar; Cdecl;
Funktion Srv_rpcnumber(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_rpcoptions(srvproc: SRV_PROC): Word; Cdecl;
Funktion Srv_rpcowner (Srvproc: SRV_PROC; Len: PInteger): PChar; Cdecl;
Funktion Srv_run(server: SRV_SERVER): Integer; Cdecl;
Funktion Srv_sendmsg (Srvproc: SRV_PROC;
MsgType: Integer; Msgnum: DBINT; Meldungsklasse, st Te: DBTINYINT;
Rpcname: PChar; Rpcnamelen: Integer;
LINENUM: Word; msg: PChar; Msglen: Integer): Integer; Cdecl;
Funktion Srv_ansi_sendmsg (Srvproc: SRV_PROC;
MsgType: Integer; Msgnum: DBINT; Meldungsklasse, staatliche: DBTINYINT;
Rpcname: PChar; Rpcnamelen: Integer;
LINENUM: Word; msg: PChar; Msglen: Integer): Integer; Cdecl;
Funktion Srv_sendstatus (Srvproc: SRV_PROC; Status: Longint): Integer; Cdecl;
Funktion Srv_setuserdata (Srvproc: SRV_PROC; Ptr: Pointer): Integer; Cdecl;
Funktion Srv_sfield (Server: SRV_SERVER; Feld: Integer; Len: PInteger): PChar; Cdecl;
Funktion Srv_symbol (iType, Symbol: Integer; Len: PInteger): PChar; Cdecl;
Funktion Srv_tdsversion(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_writebuf (Srvproc: SRV_PROC; Ptr: Pointer; Graf: Word): Integer; Cdecl;
Funktion Srv_willconvert (Srctype, Desttype: Integer): Bool; Cdecl;
Prozedur Srv_ackattention(srvproc: SRV_PROC); Cdecl;
Funktion Srv_terminatethread(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_sendstatistics(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_clearstatistics(srvproc: SRV_PROC): Integer; Cdecl;
Funktion Srv_setevent (Server: SRV_SERVER; Ereignis: Integer): Integer; Cdecl;
Funktion Srv_message_handler (Srvproc: SRV_PROC;
ERRORNUM: Integer; schwere, staatliche: Byte; Oserrnum: Integer; Errtext: PChar;
Errtextlen: Integer; Oserrtext: PChar; Oserrtextlen: Integer): Integer; Cdecl;
Funktion Srv_pre_handle (Server: SRV_SERVER; Srvproc: SRV_PROC;
Veranstaltung: Longint; Handler: EventHandler; Entfernen: Bool): Integer; Cdecl;
Funktion Srv_post_handle (Server: SRV_SERVER; Srvproc: SRV_PROC;
Veranstaltung: Longint; Handler: EventHandler; Entfernen: Bool): Integer; Cdecl;
Funktion Srv_post_completion_queue (Srvproc: SRV_PROC; Inbuf: PChar; Inbuflen: PChar): Integer; Cdecl;
Funktion Srv_IgnoreAnsiToOem (Srvproc: SRV_PROC; bTF: BOOL): Integer; Cdecl;
#ifdef __cplusplus
//}
#endif
#pragma pack()
const
SS_MAJOR_VERSION = 7;
SS_MINOR_VERSION = 00;
SS_LEVEL_VERSION = 0000;
SS_MINIMUM_VERSION = '7.00.00.0000';
ODS_VERSION = ((SS_MAJOR_VERSION shl 24) oder (SS_MINOR_VERSION Shl 16));
#endif //_ODS_SRV_H_
//////////////////////////////////////////////////////////////////
Vorgeschlagene Durchführung des __GetXpVersion
//
__declspec(dllexport) ULONG __GetXpVersion()
//{
Rückkehr ODS_VERSION;
//}
//////////////////////////////////////////////////////////////////
Umsetzung
const
sLibName = 'Opends60.DLL';

Funktion Srv_describe; externe sLibName Namen 'Srv_describe';
Funktion Srv_setutype; externe sLibName Namen 'Srv_setutype';
Funktion Srv_setcoldata; externe sLibName Namen 'Srv_setcoldata';
Funktion Srv_setcollen; externe sLibName Namen 'Srv_setcollen';
Funktion Srv_sendrow; externe sLibName Namen 'Srv_sendrow';
Funktion Srv_senddone; externe sLibName Name 'Srv_senddone';
Umgang mit erweiterten Prozedur-Parameter
Funktion Srv_rpcparams; externe sLibName Namen 'Srv_rpcparams';
Funktion Srv_paraminfo; externe sLibName Namen 'Srv_paraminfo';
Funktion Srv_paramsetoutput; externe sLibName Namen 'Srv_paramsetoutput';
Funktion Srv_paramdata; externe sLibName Namen 'Srv_paramdata';
Funktion Srv_paramlen; externe sLibName Namen 'Srv_paramlen';
Funktion Srv_parammaxlen; externe sLibName Namen 'Srv_parammaxlen';
Funktion Srv_paramtype; externe sLibName Namen 'Srv_paramtype';
Funktion Srv_paramset; externe sLibName Namen 'Srv_paramset';
Funktion Srv_paramname; externe sLibName Namen 'Srv_paramname';
Funktion Srv_paramnumber; externe sLibName Namen 'Srv_paramnumber';
//--------------------------------------------------------------
Der Rest dieser APIs werden weiterhin unterstützt, in SQL Server 7.0,
aber nicht nach SQL Server 7.0 unterstützt werden kann
Funktion Srv_getconfig; externe sLibName Namen 'Srv_getconfig';
Funktion Srv_getserver; externe sLibName Namen 'Srv_getserver';
Funktion Srv_got_attention; externe sLibName Namen 'Srv_got_attention';
Funktion Srv_eventdata; externe sLibName Namen 'Srv_eventdata';
Speicher
Funktion Srv_alloc; externe sLibName Namen 'Srv_alloc';
Funktion Srv_bmove; externe sLibName Namen 'Srv_bmove';
Funktion Srv_bzero; externe sLibName Namen 'Srv_bzero';
Funktion Srv_free; externe sLibName Namen 'Srv_free';
Funktion Srv_config_fn; externe sLibName Namen 'Srv_config';
Funktion Srv_config_alloc; externe sLibName Namen 'Srv_config_alloc';
Funktion Srv_convert; externe sLibName Namen 'Srv_convert';
Funktion Srv_event_fn; externe sLibName Namen 'Srv_event';
Funktion Srv_getuserdata; externe sLibName Namen 'Srv_getuserdata';
Funktion Srv_getbindtoken; externe sLibName Namen 'Srv_getbindtoken';
Funktion Srv_getdtcxact; externe sLibName Namen 'Srv_getdtcxact';
Funktion Srv_handle; externe sLibName Namen 'Srv_handle';
Funktion Srv_impersonate_client; externe sLibName Namen 'Srv_impersonate_client';
Funktion Srv_init; externe sLibName Namen 'Srv_init';
Funktion Srv_iodead; externe sLibName Namen 'Srv_iodead';
Funktion Srv_langcpy; externe sLibName Namen 'Srv_langcpy';
Funktion Srv_langlen; externe sLibName Namen 'Srv_langlen';
Funktion Srv_langptr; externe sLibName Namen 'Srv_langptr';
Funktion Srv_log; externe sLibName Namen 'Srv_log';
Funktion Srv_paramstatus; externe sLibName Namen 'Srv_paramstatus';
Funktion Srv_pfield; externe sLibName Namen 'Srv_pfield';
Funktion Srv_returnval; externe sLibName Namen 'Srv_returnval';
Funktion für Srv_revert_to_self; externe sLibName Name für ' Srv_revert_to_self';
Funktion Srv_rpcdb; externe sLibName Namen 'Srv_rpcdb';
Funktion Srv_rpcname; externe sLibName Namen 'Srv_rpcname';
Funktion Srv_rpcnumber; externe sLibName Namen 'Srv_rpcnumber';
Funktion Srv_rpcoptions; externe sLibName Namen 'Srv_rpcoptions';
Funktion Srv_rpcowner; externe sLibName Namen 'Srv_rpcowner';
Funktion Srv_run; externe sLibName Namen 'Srv_run';
Funktion Srv_sendmsg; externe sLibName Namen 'Srv_sendmsg';
Funktion Srv_ansi_sendmsg; externe sLibName Namen 'Srv_ansi_sendmsg';
Funktion Srv_sendstatus; externe sLibName Namen 'Srv_sendstatus';
Funktion Srv_setuserdata; externe sLibName Namen 'Srv_setuserdata';
Funktion Srv_sfield; externe sLibName Namen 'Srv_sfield';
Funktion Srv_symbol; externe sLibName Namen 'Srv_symbol';
Funktion Srv_tdsversion; externe sLibName Namen 'Srv_tdsversion';
Funktion Srv_writebuf; externe sLibName Namen 'Srv_writebuf';
Funktion Srv_willconvert; externe sLibName Namen 'Srv_willconvert';
Prozedur Srv_ackattention; externe sLibName Namen 'Srv_ackattention';
Funktion Srv_terminatethread; externe sLibName Namen 'Srv_terminatethread';
Funktion Srv_sendstatistics; externe sLibName Namen 'Srv_sendstatistics';
Funktion Srv_clearstatistics; externe sLibName Namen 'Srv_clearstatistics';
Funktion Srv_setevent; externe sLibName Namen 'Srv_setevent';
Funktion Srv_message_handler; externe sLibName Namen 'Srv_message_handler';
Funktion Srv_pre_handle; externe sLibName Namen 'Srv_pre_handle';
Funktion Srv_post_handle; externe sLibName Namen 'Srv_post_handle';
Funktion Srv_post_completion_queue; externe sLibName Namen 'Srv_post_completion_queue';
Funktion Srv_IgnoreAnsiToOem; externe sLibName Namen 'Srv_IgnoreAnsiToOem';
Ende.


Erweiterte gespeicherte Prozeduren mit delphi

Erweiterte gespeicherte Prozeduren mit delphi : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Erweiterte gespeicherte Prozeduren mit delphi
Wiezutun
Freunden empfehlen
  • gplus
  • pinterest

Kommentar

Einen Kommentar hinterlassen

Wertung