> > //- ÷ÏÔ ÜÔÏ ÎÁ áÌØÆÁ 2.1 ÒÁÂÏÔÁÌÏ ÎÁ Beta ×ÅÒÓÉÑÈ ×ÙÚÙ×ÁÌÏ ÏÛÉÂËÕ ×
> > fbclient.dll --------------------
> > bool __fastcall  TDM::DostupFnYes( int iCodFn, bool bMsg = true )
> > {
> >   Screen->Cursor = crHourGlass;
> >   bool bResult;
> >   AnsiString sSql = "select * from GET_PRAVA_USER_FN ("+
IntToStr(iCodFn)
> > +")";
> >   if(FIBDb->QueryValueAsStr(sSql, 0).ToInt() > 0) bResult=true;
>
>     þÔÏ ×ÎÕÔÒÉ QueryValueAsStr ?


üÔÏÔ ×ÏÐÒÏÓ ÌÕÞÛÅ ÁÄÒÅÓÏ×ÁÔØ [EMAIL PROTECTED]
QueryValueAsStr  - ÜÔÏ ÍÅÔÏÄ ËÏÍÐÏÎÅÎÔÁ TFIBDatabase.

÷ ÉÓÈÏÄÎÉËÁÈ FibPlus ÏÎ ×ÙÇÌÑÄÉÔ ÔÁË.

function TFIBDatabase.QueryValueAsStr(const aSQL:
string;FieldNo:integer):string;
var
   v: Variant;
begin
 v:=QueryValue(aSQL,FieldNo);
 if VarIsNull(v) then
  Result:='Null'
 else
  Result:=VarAsType(v,varString)
end;

function TFIBDatabase.QueryValue(const aSQL:
string;FieldNo:integer;aTransaction:TFIBTransaction=nil):Variant;
begin
 Result := InternalQueryValue(aSQL,FieldNo, [varEmpty],aTransaction);
end;


function TFIBDatabase.InternalQueryValue(const aSQL: string;FieldNo:integer;
  ParamValues:array of variant; aTransaction:TFIBTransaction
):Variant;
var Query: TFIBQuery;
    i    :integer;
    c    :integer;

begin
  Result := False;
  if Assigned(aTransaction) then
   Query :=GetQueryForUse(aTransaction,aSQL)
  else
   Query :=GetQueryForUse(vInternalTransaction,aSQL);
  with Query.Params do
   if High(ParamValues)<Count-1 then
    c:=High(ParamValues)
   else
    c:=Count-1;

  with Query do
  try
    if not Transaction.Active then
      Transaction.StartTransaction;
    try
     for i:=0 to c do
      if not VarIsEmpty(ParamValues[i])   then
       Params[i].Value:=ParamValues[i];

     ExecQuery;
     if (Current.Count>0) then
      if (FieldNo>=0) then
      begin
       if Fields[FieldNo].SQLType = SQL_BLOB then
        Result := Fields[FieldNo].AsString
       else
        Result := Fields[FieldNo].Value
      end
      else
      begin
        c:= Pred(Current.Count);
        Result:=VarArrayCreate([0,c],varVariant);
        for i:=0 to c do
         if Fields[i].SQLType = SQL_BLOB then
          Result[i] := Fields[i].AsString
         else
          Result[i] := Fields[i].Value
      end;
    except
     if Transaction.Active then
      Transaction.RollBack;
     raise;
    end
  finally
     if Transaction.InTransaction and (aTransaction=nil) then
      Transaction.Commit;
     if c<0 then
      Free
     else
      FreeQueryForUse(Query);
  end;
end;




Ответить