исходите из того, что вам нужно передать в
function sqlCopyInto(var QueryOrResultSet; iTable: integer; byName: boolean): integer;
То есть в вашем случае 2 параметр однозначно integer, а передавать туда нужно #таблица, где таблица указана в from 1-ого create view интерфейса - #tblT1 . На первое место проситься q1 и тип iQuery - но в sqlCopyInto уже должен быть готовый запрос. Вполне возможно, что прокатит тип TPTR (= longint в текущей версии или comp в следующей).
Что касается установки параметров возможно создание типа record с динамическим массивами.
Код: Выделить всё
Type TParam_Doc = Record
descript : Array[0..0] Of String; //
Val : Array[0..0] Of Variant //
End;
Но зачем усложнять себе жизнь сначала упаковкой в структуру а потом ее распаковкой, когда можно сразу в q1 поставить?
Перенесите обработку из cmOk в функцию.
В целом все универсальные вещи априори медленнее.
Чтобы упростить код можно использовать declare.
Также вы можете управлять запросом sqlSetMacro или же вообще пересоздавая его целиком через sqlAddStr.
Код: Выделить всё
объявление запроса
SQL QUERY SqlTmp_Nach =
SELECT
...
From Nachisl
// пример учета прав по подразделению в ЗП
inner join ZAR_USER ZU on (upper(ZU.OWNNAME) = upper(:sUserName))
and (ZU.POdrShare <> '+'
or (Nachisl.cexoz in (Select UR.crecds from USERRIGHTS UR where ZU.OWNNAME = UR.OWNNAME ) )
)
...
where ...
%Filter_Nach
%FilterP_Nach
;
Использование
case wTypeSB of
0: sqlSetMacro('Filter_Nach', ' and Nachisl.YearK='+String(wYear)
+' and Nachisl.Mes>=' +string(wMesB)
+' and Nachisl.Mes<=' +string(wMesE)
);
1: sqlSetMacro('Filter_Nach', ' and Nachisl.YearV='+String(wYear)
+' and Nachisl.MesV>=' +string(wMesB)
+' and Nachisl.MesV<=' +string(wMesE)
);
end;
var hStrFilter:longint=0;
if IsBitCTW(wFilter,1)
{ sqlAddStr(hStrFilter,iQBuilder.MakeCriteriaFromMarker(' and Nachisl.cexoz ',DepList));
}
if (hStrFilter<>0)
{ SqlsetMacro('FilterP_Nach',hStrFilter);
sqlFreeStr(hStrFilter);
}
else
{ SqlsetMacro('FilterP_Nach','');
}
stmt := sqlAllocStmt;
ExecuteErrorCode:=sqlPrepare(stmt,SqlTmp_Nach);
if ExecuteErrorCode=0
{ sqlBindParamByName(stmt,'sUserName', sUserName);
ExecuteErrorCode:=SqlExecute(stmt);
if ExecuteErrorCode=0
{ ExecuteErrorCode:=SqlFetchInto(stmt,#Tmp_Report);
}
} // ExecuteError