Как работать с БД из DELPHI

по сравнению с
Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (35)

просмотр истории страницы
еще пример создания ХП для работы из PHP для связи с платежными системами.
*Code:*


{code}
Create PROCEDURE PAY_USR_ACT (
    ACT VARCHAR(32) CHARACTER SET WIN1251,
    PAY_ID INTEGER,
    USER_ID_IN INTEGER,
    CONTRACT_NUMBER VARCHAR(32) CHARACTER SET WIN1251,
    SUMMA NUMERIC(15,2),
    MD5SUM VARCHAR(32) CHARACTER SET WIN1251,
    PAY_OPERATOR VARCHAR(32) CHARACTER SET WIN1251,
    COMMENT_IN VARCHAR(64) CHARACTER SET WIN1251)
ACT VARCHAR(32) CHARACTER SET WIN1251,
PAY_ID INTEGER,
USER_ID_IN INTEGER,
CONTRACT_NUMBER VARCHAR(32) CHARACTER SET WIN1251,
SUMMA NUMERIC(15,2),
MD5SUM VARCHAR(32) CHARACTER SET WIN1251,
PAY_OPERATOR VARCHAR(32) CHARACTER SET WIN1251,
COMMENT_IN VARCHAR(64) CHARACTER SET WIN1251)
RETURNS (
    RES INTEGER,
    MSG VARCHAR(256) CHARACTER SET WIN1251,
    COMMENT VARCHAR(1024) CHARACTER SET WIN1251,
    USER_NAME VARCHAR(128) CHARACTER SET WIN1251,
    USER_LOGIN VARCHAR(32) CHARACTER SET WIN1251)
RES INTEGER,
MSG VARCHAR(256) CHARACTER SET WIN1251,
COMMENT VARCHAR(1024) CHARACTER SET WIN1251,
USER_NAME VARCHAR(128) CHARACTER SET WIN1251,
USER_LOGIN VARCHAR(32) CHARACTER SET WIN1251)
AS
DECLARE VARIABLE USER_ID INTEGER;
COMMENT='';
select vpn_const.const_value
  from vpn_const
from vpn_const
  where vpn_const.const_id = 1
  into :money;
into :money;
if (USER_ID_IN=0) then USER_ID_IN=NULL;
if (CONTRACT_NUMBER='') then CONTRACT_NUMBER=null;
if (CONTRACT_NUMBER is null and USER_ID is null) then
    begin
    RES=251;
    MSG='Error: key field is null';
    end
begin
RES=251;
MSG='Error: key field is null';
end
if (PAY_OPERATOR is null or PAY_OPERATOR='') then
    begin
    RES=251;
    MSG='Error: pay_operator is null';
    end
begin
RES=251;
MSG='Error: pay_operator is null';
end
if (PAY_ID is null or PAY_ID=0 and upper(act)='PAY') then
    begin
    RES=251;
    MSG='Error: pay_ID is null';
    end
begin
RES=251;
MSG='Error: pay_ID is null';
end


if ((upper(act)='PAY' or upper(act)='CHECK') and RES=-1) then
begin
    user_login=null;
    USER_NAME=null;
    user_id=null;
    nuser=0;
user_login=null;
USER_NAME=null;
user_id=null;
nuser=0;
    for select id, login, identify from users
        where (:user_id_IN is null or id=:user_id_IN)
          and (CONTRACT_NUMBER=:CONTRACT_NUMBER or :CONTRACT_NUMBER is null)
        into user_id, user_login, user_name
        do
        begin
        nuser=nuser+1;
        end
    while(1=1) do
    begin
    if (nuser=0) then
    begin
    RES=1;
    MSG='Error: User not found';
    COMMENT='';
    break;
    end
    if (nuser>1) then
    begin
    RES=2;
    MSG='Error: Double user found';
    COMMENT='';
    break;
    end
where (:user_id_IN is null or id=:user_id_IN)
and (CONTRACT_NUMBER=:CONTRACT_NUMBER or :CONTRACT_NUMBER is null)
into user_id, user_login, user_name
do
begin
nuser=nuser+1;
end
while(1=1) do
begin
if (nuser=0) then
begin
RES=1;
MSG='Error: User not found';
COMMENT='';
break;
end
if (nuser>1) then
begin
RES=2;
MSG='Error: Double user found';
COMMENT='';
break;
end
\--Îñíîâíîé àëãîðèòì îïëàòû
    if (exists(select * from finance_operations
        where
        operator_name=:PAY_OPERATOR
        and operator_pay_id=:pay_id
        )) then
        begin
        RES=3;
        MSG='Error: PAY ID already exists';
        COMMENT='';
        break;
        end
    if (upper(act)='CHECK') then
        begin
        RES=0;
        MSG='Allow';
        break;
    end
    SUM_VALUE=summa*money;
if (exists(select * from finance_operations
where
operator_name=:PAY_OPERATOR
and operator_pay_id=:pay_id
)) then
begin
RES=3;
MSG='Error: PAY ID already exists';
COMMENT='';
break;
end
if (upper(act)='CHECK') then
begin
RES=0;
MSG='Allow';
break;
end
SUM_VALUE=summa*money;
    select NUMBER from CLN_FIN_OPER_PREPARE(2,:USER_ID) into :number;
    msg1=comment_in;
msg1=comment_in;
    if (msg1 is null or msg1='') then
        begin
        msg1=PAY_OPERATOR;
        end
    new_id=null;
    execute procedure  gln_fin_add_debet(:user_id,'now',:SUM_VALUE,:msg1,:user_id,:number) returning_values :new_id;
    if (new_id is null) then
        begin
        RES=4;
        MSG='Error: cant create operation debet';
        break;
    end
    update FINANCE_OPERATIONS
        set operator_name=:PAY_OPERATOR,
            operator_pay_id=:pay_id
        where FINANCE_OPERATIONS.op_id=:new_id;
    RES=0;
    MSG='ACCEPTED';
    break;
   end
begin
msg1=PAY_OPERATOR;
end
new_id=null;
execute procedure gln_fin_add_debet(:user_id,'now',:SUM_VALUE,:msg1,:user_id,:number) returning_values :new_id;
if (new_id is null) then
begin
RES=4;
MSG='Error: cant create operation debet';
break;
end
update FINANCE_OPERATIONS
set operator_name=:PAY_OPERATOR,
operator_pay_id=:pay_id
where FINANCE_OPERATIONS.op_id=:new_id;
RES=0;
MSG='ACCEPTED';
break;
end
end
  INSERT INTO PAY_LOG (
    ID,
    PAY_ID_IN,
    USER_ID_IN,
    CONTRACT_NUMBER_IN,
    SUMMA_IN,
    MD5SUM_IN,
    RES_OUT,
    MSG_OUT,
    COMMENT_OUT,
    USER_ID_OUT,
    USER_NAME_OUT,
    USER_LOGIN_OUT,
    ACT_IN,
    DATE_CREATE,
    PAY_OPERATOR)
  VALUES (
    null,
    :PAY_ID,
    :USER_ID_IN,
    :CONTRACT_NUMBER,
    :SUMMA,
    :MD5SUM,
    :RES,
    :MSG,
    :COMMENT,
    :USER_ID,
    :USER_NAME,
    :USER_LOGIN,
    :ACT,
    'now',
    :PAY_OPERATOR);
ID,
PAY_ID_IN,
USER_ID_IN,
CONTRACT_NUMBER_IN,
SUMMA_IN,
MD5SUM_IN,
RES_OUT,
MSG_OUT,
COMMENT_OUT,
USER_ID_OUT,
USER_NAME_OUT,
USER_LOGIN_OUT,
ACT_IN,
DATE_CREATE,
PAY_OPERATOR)
VALUES (
null,
:PAY_ID,
:USER_ID_IN,
:CONTRACT_NUMBER,
:SUMMA,
:MD5SUM,
:RES,
:MSG,
:COMMENT,
:USER_ID,
:USER_NAME,
:USER_LOGIN,
:ACT,
'now',
:PAY_OPERATOR);
suspend;
exit;
end
---- {code}
Уточнения по работе процедур и применимости спрашивать по ICQ 164592853 или по телефону или по почте [sergey@ideco-software.ru|mailto:sergey@ideco-software.ru]