Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

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

Delphi , Базы данных , MSSQL

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

Автор: Wicked
WEB-сайт: http://delphibase.endimus.com

{ **** 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.

Статья Перевод ODS API mssql2000 на Delphi (написание extended stored procedures) раздела Базы данных MSSQL может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: MSSQL ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
29.03.2024 00:30:53/0.038774967193604/0