View Full Version : با یه کوئری دو تا جدول رو توی گرید نشون بدم
javan2754
جمعه 21 دی 1386, 18:50 عصر
سلام.
من یه جدول با فیلدهای id و name دارم و یه جدول با فیلدهای drug و id که میخوام با استفاده از فیلد id جدول دوم نام کسایی که یه نوع دارو خریدن رو نشون بدم. کد اون به چه صورت میشه؟ یکی نوشتم اما جواب نمیده.
این رو بگم که من میخوام توی با یه کوئری دو تا جدول رو توی گرید نشون بده.
ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from nosxe,tname where id = ' + txtID.Text + ' AND drug = ' + txtDrug.text);
ADOQuery1.ExecSQL;
ADOQuery1.Open;
ADOQuery1.Active := True;
javan2754
جمعه 21 دی 1386, 19:10 عصر
توی برنامم من میخوام تکست هایی که پر بود رو سرچ کنه اما وقتی یه سرچ میزنم ارور میده
ADOQuery1.SQL.Add('Select * from nosxe where sDate >= ' + d1 + ' AND eDate <= ' + d2 + ' AND name LIKE "%' + txtname.Text + '%" AND AND bime LIKE "%'+ cmbbime.Text + '%" AND Doctorname LIKE "%'+ txtDocname.Text + '%"');
البته این خطا که بین تاریخ sDate و eDate رو سرچ میکنم اتفاق نمی افته. باید از کاراکترهای '%" استفاده کنم؟ حتما باید این کار رو کنم.
حمیدرضاصادقیان
جمعه 21 دی 1386, 20:04 عصر
دوست عزیز اگر میخوای نام مشتری هم نمایش داده بشه باید از join استفاده کنی.
به صورت زیر
'Select Tn.id,Tn.NAme,Ns.Drug from tname as Tn
Inner join nosxe as Ns on Ns.id=Ts.id
where Ns.id = ' + txtID.Text + ' AND Ns.drug= ' + txtDrug.text
دوست عزیز این روش میتونه باعث Sql injection بشه.بهتره به روش زیر انجام بدی و از پارامتر ها استفاده کنی.
Adoquery1.sql.add('Select * from nosxe where sDate >=:d1 AND eDate <=:d2 ');
Adoquery1.parameters.parambyname('d1').asstring:=D 1;
Adoquery1.parameters.parambyname('d2').asstring:=D 2;
open;
vcldeveloper
شنبه 22 دی 1386, 02:01 صبح
در هر تاپیک فقط یک سوال بپرسید. سعی نکنید همه مشکلات خود را در یک تاپیک مطرح کنید.
ADOQuery1.ExecSQL;
ADOQuery1.Open;
ADOQuery1.Active := True;
اجرای هر سه خط کد فوق تاثیری در اجرای برنامه شما نداره؛ فقط Open کافی هست. درباره فرق Open با ExecSQL قبلا توضیح داده شده که می تونید جستجو کنید.
javan2754
شنبه 22 دی 1386, 15:12 عصر
من این کد رو با توجه به جواب شما نوشتم. وقتی ارور type mismatch in expersion میده. اشکال از کجاست؟
ADOQuery1.SQL.Add('Select InfoNosxe.ID,InfoNosxe.Name,DataNosex.DName
From InfoNosxe Inner Join DataNosexOn InfoNosxe.ID=DataNosex.ID Where DName Like "%' + txtDName.Text + '%"');
ADOQuery1.Open;
حمیدرضاصادقیان
شنبه 22 دی 1386, 15:37 عصر
اولا بین dataNoSex و ON باید فاصله قرار بدی. دوما باید قبل از DName از آلیاس دیتابیس که همونDataNosex.DName هست استفاده کنی. بعد به جای " باید از ' استفاده کنی.شکل صحیح باید به شکل زیر باشه.
ADOQuery1.SQL.Add('Select InfoNosxe.ID,InfoNosxe.Name,DataNosex.DName '
' From InfoNosxe Inner Join DataNosex On InfoNosxe.ID=DataNosex.ID'
+' Where DataNoSex.DName Like ''%''' + txtDName.Text + '''%'''');
ADOQuery1.Open;
javan2754
شنبه 22 دی 1386, 19:57 عصر
ارور قبلی برطرف شد اما همین کدی که دادی ارور syntax error in join operation رو میده.
حمیدرضاصادقیان
شنبه 22 دی 1386, 22:08 عصر
دوست عزیز دستور که درسته .فاصله هایی که من در اول و اخر دستور ها بعد یا قبل از ' قرار دادم رو رعایت کردی؟
شما میتونی قبل از دستور open دستور زیر رو بنویسی و متن فوق رو اینجا بنویسی.
showmessage(adoquery1.sql.text);
javan2754
یک شنبه 23 دی 1386, 20:58 عصر
آقا ممنون. (تشکر رو هم زدم.)
درست شد. فقط به جای InfoNosxe.ID = DataNosex.ID عبارت InfoNosxe.ID Like DataNosex.ID' رو گذاشتم. فکر نمی کردم از این باشه. ولی درست شد.
ADOQuery1.SQL.Add('Select InfoNosxe.ID,InfoNosxe.Name,DataNosex.DName '
' From InfoNosxe Inner Join DataNosex On InfoNosxe.ID Like DataNosex.ID'
+' Where DataNoSex.DName Like ''%''' + txtDName.Text + '''%'''');
ADOQuery1.Open;
حالا اگه بخوام این رو توی گرید نشون بده چطور میشه؟ مگه کوئری فقط از جدول استفاده نمی کنه؟ توی قسمت SQL کوئری چی باید بنویسم؟
بازم ممنون
javan2754
یک شنبه 23 دی 1386, 21:14 عصر
آقا این مشکل هم حل شد. ممنون.
این رو بگم تا بقیه هم استفاده کنند و در ضمن تاپیک هم بی جواب نمونه.
روی گرید کلیک راست کردم. یه ستون درست کردم با نام فیلدی که میخوام از جدول دیگه بیارم.
با تشکر از آقای صادقیان
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.