View Full Version : سوال: میانگین
a-azad
دوشنبه 25 شهریور 1387, 12:55 عصر
سلام.من می خواهم میانگین در یک سال بگیرم کدم اینجوری نوشتم
begin
if (edit1.Text='1387') then
begin
with ADOQuery1 do begin
Close;
SQL.Clear;
ADOQuery1.sql.Add('select avg(repairtime) as average from table2 where nane1=:param1 and name2=:param2 and date1 between '+QuotedStr('1387/01/01')+' and '+QuotedStr('1387/12/30')+'');
Parameters.ParamValues['param1']:=ComboBox1.Text;
Parameters.ParamValues['param2']:=ComboBox2.Text;
if not AdoQuery1.Prepared then
AdoQuery1.Prepared := True;
ADOQuery1.open;
edit3.text:=ADOQuery1.FieldByName('average').AsStr ing;
end;
ولی خطا میده
adoquery1:parameters'param1' not foundعلت این خطا چیه؟بااینکه من پارامتر 1و2تعریف کردم
ممنون
SYNDROME
دوشنبه 25 شهریور 1387, 21:17 عصر
باید بعد از = یک فاصله قرار دهید و کد Param: را به صورت چسبیده استفاده کنید.
موفق باشید
vcldeveloper
سه شنبه 26 شهریور 1387, 05:24 صبح
در پست های قبلی گفته شد که سعی کنید برای همه مقادیر ورودی کوئری از پارامتر استفاده کنید تا دیگه لازم نباشه هر بار SQL را تغییر بدید. با این کدی که شما نوشتید، SQL با هر اجرای کد تغییر میکنه، و اصلا خط:
if not AdoQuery1.Prepared then
AdoQuery1.Prepared := True;
بی ارزش هست؛ این خط نه تنها سرعت را افزایش نمیده، بلکه سرعت را کاهش هم میده، چون با تغییر SQL، خصوصیت Prepared همیشه False هست!
علت این خطا چیه؟بااینکه من پارامتر 1و2تعریف کردم
اگر SQL را یک بار، مثلا در زمان طراحی فرم می ساختید و در زمان اجرا، فقط به پارامترها مقدار می دادید و اجراش می کردید، به این مشکل بر نمی خوردید.
در هر حال، یا قبل از Open، خصوصیت ParamCheck را True کنید، یا بجای ParamValues، از CreateParameter استفاده کنید.
a-azad
سه شنبه 26 شهریور 1387, 09:10 صبح
در پست های قبلی گفته شد که سعی کنید برای همه مقادیر ورودی کوئری از پارامتر استفاده کنید تا دیگه لازم نباشه هر بار SQL را تغییر بدید. با این کدی که شما نوشتید، SQL با هر اجرای کد تغییر میکنه، و اصلا خط:
if not AdoQuery1.Prepared then
AdoQuery1.Prepared := True;
بی ارزش هست؛ این خط نه تنها سرعت را افزایش نمیده، بلکه سرعت را کاهش هم میده، چون با تغییر SQL، خصوصیت Prepared همیشه False هست!
اگر SQL را یک بار، مثلا در زمان طراحی فرم می ساختید و در زمان اجرا، فقط به پارامترها مقدار می دادید و اجراش می کردید، به این مشکل بر نمی خوردید.
در هر حال، یا قبل از Open، خصوصیت ParamCheck را True کنید، یا بجای ParamValues، از CreateParameter استفاده کنید.
سلام.من مشکلم حل شد .مشکلش این بود که connection برقرارنبود.دیگه اون خطا رانداد
.ولی مساله ای هست اینه که محاسبات کند انجام می شه دلیلش همونی شما فرمودین
.من نمی دونم چطور با createparam کارکنم.ممنون می شم اگه این کد با createparameterبنویسین برام
vcldeveloper
سه شنبه 26 شهریور 1387, 10:02 صبح
من نمی دونم چطور با createparam کارکنم.
تایپ کنید AdoQuery1.Parameters.CreateParam، بعد روش F1 بزنید.
a-azad
سه شنبه 26 شهریور 1387, 10:18 صبح
بعد پارامترها با paramvalue تعریف کنم.مثل قبل؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
vcldeveloper
چهارشنبه 27 شهریور 1387, 02:00 صبح
بعد پارامترها با paramvalue تعریف کنم.مثل قبل؟
بعد از چی؟ بعد از CreateParam؟ بعد از CreateParam لازم نیست، چون شما با CreateParam هم پارامتر را میسازید، هم بهش مقدار میدید، پس دیگه نیازی به ParamValue نیست، غیر از اینکه بخواید بعدا دوباره مقدارش را تغییر بدید، اون وقت دیگه نیازی به ساخت مجدداش نیست، فقط با ParamValue بهش مقدار میدید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.