PDA

View Full Version : اجرای کد sql در دلفی با adoquery



rsheytoonak
جمعه 07 تیر 1392, 23:37 عصر
سلام
من یه همچین کدی نوشتم تو sql کار میکنه تو دلفی چطوری با adoquery پیاده سازیش کنم

SELECT id, tarikh, mablagh,
(SELECT SUM(mablagh)
FROM chek
WHERE (tarikh BETWEEN '1392/05/01' AND '1392/05/04')) AS jam
FROM chek
WHERE (tarikh BETWEEN '1392/05/01' AND '1392/05/04')
هر کاری کردم تو ado نتونستم اجراش کنم

یوسف زالی
شنبه 08 تیر 1392, 00:46 صبح
سلام.
روشتون غلط و بسیار کنده. به جای این کار یک ردیف برای جمع درنظر بگیرید بهتره.
ولی بدونید که هر کوئری رو در دلفی نمی توند ران کنید. بهتره از SP استفاده کنید.

rsheytoonak
شنبه 08 تیر 1392, 10:37 صبح
سلام.
روشتون غلط و بسیار کنده. به جای این کار یک ردیف برای جمع درنظر بگیرید بهتره.
ولی بدونید که هر کوئری رو در دلفی نمی توند ران کنید. بهتره از SP استفاده کنید.
میشه بیشتر توضیح بدید؟

یوسف زالی
شنبه 08 تیر 1392, 14:03 عصر
روش درست:




SELECT id, tarikh, mablagh
FROM chek
WHERE (tarikh BETWEEN '1392/05/01' AND '1392/05/04')
union
select 999999, '', SUM(mablagh)
from chek
WHERE (tarikh BETWEEN '1392/05/01' AND '1392/05/04')
order by id


در مورد استفاده از SP مطلب زیاده. بگردید.

rsheytoonak
یک شنبه 09 تیر 1392, 01:02 صبح
روش درست:




SELECT id, tarikh, mablagh
FROM chek
WHERE (tarikh BETWEEN '1392/05/01' AND '1392/05/04')
union
select 999999, '', SUM(mablagh)
from chek
WHERE (tarikh BETWEEN '1392/05/01' AND '1392/05/04')
order by id


در مورد استفاده از SP مطلب زیاده. بگردید.
ممنون لطف کردی این کد شما رو نوشتم کار کرد

ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('SELECT id, tarikh, mablagh FROM chek WHERE(tarikh BETWEEN ''1392/05/01'' AND ''1392/05/04'')UNION SELECT 999999,'''',SUM(mablagh) FROM chek WHERE(tarikh BETWEEN ''1392/05/01'' AND ''1392/05/04'')ORDER BY id');
ADOQuery1.Open;
فقط یه سوال اگه بخوام بجا اون تاریخ ها از 2تا رشته استفاده کنم که تاریخ رو برگردونه چطوری باید تو این کد قرارش بدم

یوسف زالی
یک شنبه 09 تیر 1392, 09:02 صبح
ورودی به یا خروجی از SP ؟

rsheytoonak
یک شنبه 09 تیر 1392, 09:11 صبح
ورودی به یا خروجی از SP ؟
ورودی یعنی الان بجای ''1391/05/01'' در این کد از edit1.text1 تاریخ بگیره

یوسف زالی
یک شنبه 09 تیر 1392, 09:50 صبح
خب رشتتون رو در ADOQuery اصلاح کنید.
چیزی شبیه به این:


'select * from TBL where ID = ' + edit1.text

بهتره به دلیل مسایل امنیتی از SP استفاده کنید.

rsheytoonak
چهارشنبه 12 تیر 1392, 01:42 صبح
خب رشتتون رو در ADOQuery اصلاح کنید.
چیزی شبیه به این:


'select * from TBL where ID = ' + edit1.text

بهتره به دلیل مسایل امنیتی از SP استفاده کنید.

این کدی هست که کار میکنه

ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('SELECT id, tarikh, mablagh FROM chek WHERE(tarikh BETWEEN ''1392/05/01'' AND ''1392/05/04'')UNION SELECT 999999,'''',SUM(mablagh) FROM chek WHERE(tarikh BETWEEN ''1392/05/01'' AND ''1392/05/04'')ORDER BY id');
ADOQuery1.Open;
اینم کدی هست که عوض کردم ارور میده

rocedure TForm1.Button2Click(Sender: TObject);
var
t8,t10:string;
begin
t8:='1392/05/01';
t10:='1392/05/04';
ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('SELECT id, tarikh, mablagh FROM chek WHERE(tarikh BETWEEN '+t8+' AND '+t10+')UNION SELECT 999999,'''',SUM(mablagh) FROM chek WHERE(tarikh BETWEEN '+t8+' AND '+t10+')ORDER BY id');
ADOQuery1.Open;
اینم اروری که میده

syntax error converting the varchar value '1392/05/01' to column of data type int.

hossein_h62
چهارشنبه 12 تیر 1392, 07:42 صبح
سلام
فکر کنم t8 و t10 رو توی QuotedStr بزاری حل بشه.