نوشته شده توسط
amirkazem
باسلام وتبریک سال نوهمراه باآرزوی بهترینهابرای شمادوستان درسال 96
دوستان! می خواهیم یک کوئری را اجراکنیم که ابتدا شناسه قبض را ازیک (DBLookupcombobox) می گیره وسپس تاریخ پرداخت رادرمحدوده بین 2تاریخ داشته باشیم. کد sql به شرح ذیل است . دوستان لطفاً اشکال کد را بفرمایند.
p= pardakht
شناسه قبض= p.sh_ghabz
تاریخ پرداخت=date_pardakht
'SELECT * FROM pardakht AS p INNER JOIN ghabz AS g ON p.sh_ghabz=g.sh_ghabz WHERE p.sh_ghabz='+QuotedStr(search_frm.DBLookupComboBox 1.KeyValue) and '(date_pardakht between'+QuotedStr(solardatepicker1.text)) and +QuotedStr(solardatepicker2.text)));
سلام
سال نو شما هم مبارک
در قدم اول توی پرانتز و کوتیشن گزاری اشتباه کردی. اصلاح شده کد شما میشه این:
'SELECT * FROM pardakht AS p INNER JOIN ghabz AS g ON p.sh_ghabz=g.sh_ghabz WHERE p.sh_ghabz=' +
QuotedStr(search_frm.DBLookupComboBox1.KeyValue) + ' and (date_pardakht between ' + QuotedStr(solardatepicker1.text)
+ ' and ' + QuotedStr(solardatepicker2.text) + ')'
جدای از این کدها روش پیشنهادی من استفاده از پارامتر جهت دوری از اینگونه اشتباهات و البته قابل فهم تر شدن کدهاست.
کد شما به این روش با فرض استفاده از کوئری فایرداک بصورت زیر خواهد شد:
FDQry_1.Close;
FDQry_1.SQL.Clear;
FDQry_1.SQL.Add
('SELECT * FROM pardakht AS p INNER JOIN ghabz AS g ON p.sh_ghabz=g.sh_ghabz WHERE p.sh_ghabz=:ParamShGhabz and (date_pardakht between :StartDate and :EndDate)');
FDQry_1.Params.ParamByName('ParamShGhabz').Value := search_frm.DBLookupComboBox1.KeyValue;
FDQry_1.Params.ParamByName('StartDate').Value := solardatepicker1.text;
FDQry_1.Params.ParamByName('EndDate').Value := solardatepicker2.text;
FDQry_1.Open();
موفق باشیم