PDA

View Full Version : کوئری و پارامتر



phantasm
دوشنبه 19 مرداد 1383, 16:58 عصر
سلام

من میخوام یه کوئری پارامتر دار طراحی کنم(بوسیله dbp command) ولی متاسفانه موفق نمیشم :roll:

مثلا جستجو بر اساس مقداری که کاربر وارد میکنه انجام بشه.
میشه راهنمایی بفرمایید.

Touska
چهارشنبه 21 مرداد 1383, 01:01 صبح
شما می خواهید با BdpCommand از دیتا های خود Select کنید

Use Borland.Vcl.Sysutils

برای استفاده از QuetdStr و توابع داخلی

BdpCommand1.CommandText := 'Select * From Table1'+ QutedStr(TextBox1); //Select From DataBase
BdpCommand1.ExecuteNoneQuery

موفق باشی اگر منظورت این نبود بنویس

SyntaxCheck
چهارشنبه 21 مرداد 1383, 01:10 صبح
سلام
من این دوتا تابع رو برای OleDb نوشتم و ازشون برای ارسال پارامتر استفاده میکنم. با استفاده از اینها میتونی کوئری رو با تعداد نامحدود پارامتر فراخونی کنی(بصورت آرایه ای از AHTSQLParam):
با کمی حوصله و دقت میشه اینو به SqlClient و حتی Bdp تغییر بدید.
باید ابتدا این رو تعریف کنید(در اینترفیس):


type
AHTSQLParam=record
PName: string;
PType: OleDbType;
PSize: Integer;
PValue: System.Object;
end;


سپس:

function AHGetDataset_Param(SQL: String; SQLParam:array of AHTSQLParam): DataSet;
var
DA: OleDbDataAdapter;
Con: OleDbConnection;
Cmd: OleDbCommand;
MyParam: AHTSQLParam;
i: Integer;
ds: DataSet;
begin
Con := OleDbConnection.Create(ConfigurationSettings.AppSe ttings[0]);
Con.Open;
Cmd := OleDbCommand.Create(SQL,Con);
for i := 0 to System.Array(SQLParam).Length-1 do
begin
MyParam := AHTSQLParam(System.Array(SQLParam).GetValue(i));
Cmd.Parameters.Add(MyParam.PName,MyParam.PType,MyP aram.PSize).Value := MyParam.PValue;
end;
DA := OleDbDataAdapter.Create(Cmd);
ds := DataSet.Create;
DA.Fill(ds);
Result := ds;
end;
function AHExecuteNonQuery(SQL: String; const SQLParam:array of AHTSQLParam):integer;
var
Con: OleDbConnection;
Cmd: OleDbCommand;
MyParam: AHTSQLParam;
i: Integer;
P: OleDbParameter;
begin
Con := OleDbConnection.Create(ConfigurationSettings.AppSe ttings[0]);
Con.Open;
Cmd := OleDbCommand.Create(SQL,Con);
for i := 0 to System.Array(SQLParam).Length-1{} do
begin
MyParam := AHTSQLParam(System.Array(SQLParam).GetValue(i));
p := Cmd.Parameters.Add(MyParam.PName,MyParam.PType,MyP aram.PSize);
p.Value := MyParam.PValue;
end;
result := Cmd.ExecuteNonQuery;
Con.Close;
end;


برای فراخوانی هم باید شبیه به این عمل کنید:


var
arr: Array of AHTSQLParam;
Ds: DataSet;
...
SetLength(arr,1);
arr[0].pname := 'ID';
arr[0].ptype := oledbtype.integer;
arr[0].psize := 0;
arr[0].pvalue := TheID;

Ds := AHGetDataset_Param(SQL,arr);

phantasm
چهارشنبه 21 مرداد 1383, 11:35 صبح
خیلی ممنون. :flower: