PDA

View Full Version : سوال: مشکل در جستجو



com.ha.za
سه شنبه 11 اسفند 1388, 21:13 عصر
من در بانک اکسس به این صورت جستجو میکنم

if edit1.Text<>'' then
begin
adq.SQL.Clear;
adq.SQL.Add('select * from tbl_mosh where id= '+edit1.Text+' and name ='+quotedstr(edit2.Text)+'');
adq.Open;
end
else
begin
adq.SQL.Clear;
adq.SQL.Add('select * from tbl_mosh ;');
adq.Open;
end;

چندتا radiobutton و چند تا checkbox گذاشتم که ممکنه کاربر همشو یا بعضی شو برای جستجو انتخاب کنه . سوالم اینه که کدو چطوری بنویسم که لازم نباشه برای هر کدوم که انتخاب میکنه یه جستجو جداگانه بنویسم ؟
یعنی با یک دفعه نوشتن جستجو کارمو انجام بدم
مثلا بتونم
قبل از رسیدن به این کد مقدار edit ها رو تو یک رشته بریزم و تو جستجو از اون رشته استفاده کنم
به این صورت :
s1:=edit1.text;
s2:=edit2.text;
if edit1.Text<>'' then
begin
adq.SQL.Clear;
adq.SQL.Add('select * from tbl_mosh where id= '+s1+' and name ='+quotedstr(s2)+'');
adq.Open;
end
else
begin
adq.SQL.Clear;
adq.SQL.Add('select * from tbl_mosh ;');
adq.Open;
end;

pezhvakco
چهارشنبه 12 اسفند 1388, 08:09 صبح
درود :
درست مفهوم سوالت رو نفهمیدم ولی می تونی :
یه متغیر رشته ای تعریف کنی ( Com_Tx : string )، از ابتدا شرایط مورد نظر radiobutton و checkbox ها رو با دستور شرطی امتحان کنی .
مثال :
var
Com_Tx : string;
begin
Com_Tx:='SELECT * FROM Tbale1 WHERE ';
if CheckBox1.Checked = True then
Com_Tx:=Com_Tx + '(Col1 = 1) '
else
Com_Tx:=Com_Tx + '(Col1 = 2) ';
if RadioButton1.Checked = True then
Com_Tx:=Com_Tx + 'AND (Col2 = 3) '
else
Com_Tx:=Com_Tx + 'AND (Col2 = 4) ';
DataSet1.CommandText:=Com_Tx;
DataSet1.Open;
end;

com.ha.za
چهارشنبه 12 اسفند 1388, 09:01 صبح
منظورمو متوجه نشدید لطفا این مثال و دانلود کنید داخلش توضیح دادم

http://rapidshare.com/files/358191418/sample.zip.html

pezhvakco
چهارشنبه 12 اسفند 1388, 09:28 صبح
داخل این فایل فقط فایل اجرایی برنامت بود ...
شما می تونی مثل همون مثالی که نوشتم، در صورت انتخاب کردن هر کدام ار چک باکس ها مقدار اون رو به متغیرت اضاف کنی .
این جوری :
var
Com_Tx : string;
begin
Com_Tx:='SELECT * FROM Table1 WHERE ';
if CheckBox1.Checked = True then
Com_Tx:=Com_Tx + '(name = ' + QuotedStr(Edit1.Text) + ') AND (famil = ' + QuotedStr(Edit2.Text) + ') ';
if CheckBox2.Checked = True then
Com_Tx:=Com_Tx + 'AND (namebank = ' + QuotedStr(Edit3.Text) + ') AND (namebank2 = ' + QuotedStr(Edit4.Text) + ') ';
try
DataSet1.CommandText:=Com_Tx;
DataSet1.Open;
except on E: Exception do
end;
end;

دلفــي
چهارشنبه 12 اسفند 1388, 10:11 صبح
اگه به اين صورت بنويسي نياز به شرط نداري و اگه مقادير اديت ها خالي باشد همه جدول نمايش داده مي شود


adq.SQL.Add('select * from tbl_mosh where id LIKE :Type1 and name LIKE:Type2');
adq.Parameters.ParamByName('Type1').Value := Trim(Edit1.Text);
adq.Parameters.ParamByName('Type2').Value := Trim(Edit2.Text);
adq.ExecSQL;
adq.Active := True;

com.ha.za
چهارشنبه 12 اسفند 1388, 20:23 عصر
من با این کد اصلا آشنایی ندارم میشه از اول هرچی لازمه ، چه باز کردن بانک و هر چیز دیگه کامل بنویسید . مفهوم type یعنی چی ؟

فرض کنید نام جدول tbl_chek نام فیلد ها (کد : id و شماره چک : id_chek و کد شخص
id_nam ) و نام ادیت ها edit1 و edit2 و edit3 هست حالا کد کاملشو برام بنویسید
ممنون اگه سریع تر جوابمو بدین

com.ha.za
چهارشنبه 12 اسفند 1388, 20:44 عصر
درست شد جستجو میکنه ولی یه مشکل دیگه داره با edit خالی کار نمیکنه چطور این مشکلو حل کنم که با edit خالی همه رکورد هارو نشون بده ؟

pezhvakco
پنج شنبه 13 اسفند 1388, 09:03 صبح
برای اینکه به مقدار خالی مشکل نخوری، یا باید دستور شرطی بنویسی که در صورت پر بودن اون ادیت جستجو رو با اون فیلد مربوط انجام بده و یا هنگام اجرا کردن کوئری، دستور خطا گیری ( Try .. Except ) بزاری .

com.ha.za
پنج شنبه 13 اسفند 1388, 10:14 صبح
اگه ممکنه یه مثال بزنید ، با شرطم کار نکرد
دستور خطا گیری هم یاد نداشتم

pezhvakco
پنج شنبه 13 اسفند 1388, 10:28 صبح
تو نوشته (پست) شماره 4 ، یه مثال با دستور Try هست .

com.ha.za
پنج شنبه 13 اسفند 1388, 10:55 صبح
لطفا آدرس شو بذارید پیدا نکردم
ممنون

com.ha.za
پنج شنبه 13 اسفند 1388, 13:21 عصر
با دستور شرطی امتحان کردم درست عمل نمیکنه ، برنامه رو گذاشتم لطف کنید ببینید اشتباه کجاست
http://rapidshare.com/files/358759134/New_Folder.rar.html (http://rapidshare.com/files/358757899/New_Folder.rar.html)