2,498
社区成员
发帖
与我相关
我的任务
分享
//调用dll
function Hk_GetDataList(var DBSP:TADOStoredProc;QryCon: Res_QryCondition;out PageCount: Integer;PageNum:Integer):String;stdcall;External 'HK_Dll.dll';
procedure TFrmCameraManager.QueryData;
var
QryCon : Res_QryCondition ; {查询条件 结构体}
DBSP: TADOStoredProc;
c:string;
begin
DBSP:=TADOStoredProc.Create(nil);
c:=HK_GetDataList(DBSP,QryCon,PageCount,PageNum);
end;
//dll里的函数
function Hk_GetDataList(var DBSP:TADOStoredProc;QryCon: Res_QryCondition;out PageCount: Integer;PageNum:Integer):String;stdcall;
var
db:TCameraManagerDBLayer;
Ret : string;
begin
db := TCameraManagerDBLayer.Create;
Ret:= db.Hk_GetDataList(DBSP,QryCon,PageCount,PageNum);
Result:=Ret;
db.Free;
end;
function TCameraManagerDBLayer.Hk_GetDataList(var DBSP:TADOStoredProc;
QryCon: Res_QryCondition;out PageCount: Integer;PageNum:Integer): String;
var
TableName, PKey, Field, Condition, Order: String;
RowCount:Integer;
I:Integer;
CostItems:array of TStringList;
TitleNames:TStringArray;
TitleWidth:TIntegerArray;
Ret:String;
begin
//中间就调了这个方法
OpenSQLPager(DBSP,TableName, PKey, Field, Condition, Order,PageNum,SysPageSize,PageCount, RowCount);
end;
function TDBOperation.OpenSQLPager(DBSP: TADOStoredProc;
TableName, PKey, Field, Condition, Order: String; PageNum,
PageSize: Integer; out PageCount, RowCount: Integer): Boolean;
var
DBQry: TADOQuery;
Ret:Boolean;
begin
Ret:=False;
DBQry:=TADOQuery.Create(nil);
try
try
DBSP.Connection:=DBConn;
DBQry.Connection:=DBConn;
DBSP.CommandTimeout:=0;
DBQry.CommandTimeout:=0;
DBSP.Close;
DBSP.ProcedureName:='GetRecordByPage';
DBSP.Parameters.CreateParameter('@sTable',ftstring,pdinput,100,TableName);
DBSP.Parameters.CreateParameter('@sPkey',ftstring,pdinput,50,PKey);
DBSP.Parameters.CreateParameter('@sField',ftstring,pdinput,1000,Field);
DBSP.Parameters.CreateParameter('@iPageCurr',ftinteger,pdinput,4,PageNum);
DBSP.Parameters.CreateParameter('@iPageSize',ftinteger,pdinput,4,PageSize);
DBSP.Parameters.CreateParameter('@sCondition',ftstring,pdinput,1000,Condition);
DBSP.Parameters.CreateParameter('@sOrder',ftstring,pdinput,100,Order);
DBSP.Open;
DBQry.Close;
DBQry.SQL.Clear;
DBQry.SQL.Add('Select Count(*) as RecCount from '+TableName+' Where '+Condition);
DBQry.Open;
RowCount:=DBQry.FieldByName('RecCount').AsInteger;
PageCount:= (RowCount div PageSize)+1;
Ret:=True;
finally
DBQry.Free;
end;
except
Ret:=False;
end;
Result:=Ret;
end;
到上面的位置就说无效。
function StringToVariantArray(const S: string): OleVariant;
var
P: Pointer;
begin
Result := NULL;
if Length(S) > 0 then
begin
Result := VarArrayCreate([0, Length(S) - 1], varByte);
P := VarArrayLock(Result);
try
Move(S[1], P^, Length(S));
finally
VarArrayUnlock(Result);
end;
end;
end