PDA

View Full Version : سوال: ارسال پارامتر بصورت آرایه بدون نوع



khorsandreza
پنج شنبه 02 خرداد 1392, 01:10 صبح
سلام
من می خواهم مقادیری را بصورت آرایه ارسال بکنم ولی قالب و تعداد مشخص نیست بطور مثال

['حمید',1,'محمد',true] // رشته و عدد و منطقی
['میز','book','1'] // هرسه رشته و تعداد 3


نمونه اولیه کاری که میخواهم انجام بدم

Function ExecuteSP(commandText:string;Xparams:TStringList): boolean;
Var
SP:TStoredProc;
I,ParamCount:integer;
A,B: Integer;
Begin
SP := TStoredProc.Create(Nil);
DB_name.StartTransaction;
try
SP.Close;
IF(SP.Prepared) then
SP.Prepare;
SP.StoredProcName:= commandText;
SP.DatabaseName := 'kanoon';

for i := 0 to Xparams.Count-1 do
Begin
SP.Params.Add;
// SP.Params.p
//SP.Params[i].as
End;
SP.ExecProc;
Result:= True;
Except
Result:= False;
end;
End;


بشکل زیر فراخوانی کنم

ExecuteSP('SP_Name',[pkid,Mname,showitem]);

یوسف زالی
پنج شنبه 02 خرداد 1392, 03:37 صبح
سلام.
این مثال می تونه کمکت کنه:



function MakeStr(const Args: array of const): string;
var
I: Integer;
begin
Result := '';
for I := 0 to High(Args) do
with Args[I] do
case VType of
vtInteger: Result := Result + IntToStr(VInteger);
vtBoolean: Result := Result + BoolToStr(VBoolean);
vtChar: Result := Result + VChar;
vtExtended: Result := Result + FloatToStr(VExtended^);

vtString: Result := Result + VString^;
vtPChar: Result := Result + VPChar;
vtObject: Result := Result + VObject.ClassName;
vtClass: Result := Result + VClass.ClassName;
vtAnsiString: Result := Result + string(VAnsiString);
vtCurrency: Result := Result + CurrToStr(VCurrency^);
vtVariant: Result := Result + string(VVariant^);
vtInt64: Result := Result + IntToStr(VInt64^);

end;
end;






MakeStr(['test', 100, ' ', True, 3.14159, TForm])

Felony
پنج شنبه 02 خرداد 1392, 05:17 صبح
پست 97 این تاپیک (http://barnamenevis.org/showthread.php?209792-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%D9%8A-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%D9%8A/page3).

khorsandreza
پنج شنبه 02 خرداد 1392, 10:39 صبح
پست 97 این تاپیک (http://barnamenevis.org/showthread.php?209792-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%D9%8A-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%D9%8A/page3).
سلام
نمی دانم اشکال من یا خطای کد است لیست StorProc را در SPList نشان نمی دهد از آنچائی که من از InterBase استفاده می کنم به شکل زیر نغییر دادم

function StoredProcedureExists(const SPName: string): Boolean;
var
SPList: TStringList;
begin
SPList := TStringList.Create;
try
//ADOConnection.GetProcedureNames(SPList);
DM.DBKANOON.GetStoredProcNames(SPList);

Result := (SPList.IndexOf(SPName + ';1') > 0) or
(SPList.IndexOf(SPName + ';0') > 0);
finally
SPList.Free;
end;
end;

اگه بجای TStringList از TListBox استفاده کنم اشکال پیدا نمی کنه؟

ضمننا اگه در function ExecuteStoredProc(const SPName, ParamNames: string;ParamValues: array of const): Byte; پارمتر دوم هم مثل پارامتر سوم بصورت آرایه باشه خوب است یا دچار اشکال میشود