View Full Version : اشکال درکد sql
amirkazem
دوشنبه 14 فروردین 1396, 12:06 عصر
باسلام وتبریک سال نوهمراه باآرزوی بهترینهابرای شمادوستان درسال 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)));
ZonLine
سه شنبه 15 فروردین 1396, 12:36 عصر
باسلام وتبریک سال نوهمراه باآرزوی بهترینهابرای شمادوستان درسال 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)));
با سلام دوست عزیز
اگه از اشکالات نوشتاری این کد (مثلا نذاشتن کوتیشن قبل از and و + و ...) بگذریم و به این خاطر که پروژه و بانک اطلاعاتی شما در دسترس بقیه نیست که بتونن دقیقا کمک کنن
به نظر من اگه شما میخوای راحت تر متوجه بشی چرا این کد نتیجه ای در خروجی نداره روی خط مورد نظر کد یک بریک پوینت بذار و وقتی که به اونجا رسیدی با کلید ctrl+f7 متن ساخته شده داخل کوئری که این کد رو اجرا میکنه رو کپی کن و ببر داخل خود sql و اونجا اجراش کن
اینطوری خیلی راحت متوجه میشی مشکل از کجاست
golbafan
سه شنبه 15 فروردین 1396, 14:21 عصر
سلام قبل از اینکه کوئری اجرا بشه، ( قبل از Tquery.Open(); //or execute ) متن کوئری نهایی تون رو در یک تکست بریزید و مشاهده کنید و اشکالش رو پیدا کنید.
hp1361
چهارشنبه 16 فروردین 1396, 14:07 عصر
باسلام وتبریک سال نوهمراه باآرزوی بهترینهابرای شمادوستان درسال 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();
موفق باشیم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.