PDA

View Full Version : مشكل Timeout در query؟؟



هواشناس
سه شنبه 28 مهر 1388, 09:18 صبح
بنام خدا
با سلام و تبريك ميلاد خانم فاطمه معصومه سلام الله عليها

من ديتابيسي دارم مدل اكسس با جدولي بنام Datas، با فيلدهاي شماره (ID=Primary key-number)- تاريخ ميلادي(Gdate-shortdate) - نام (name-text) و 10 پارامتر جداگانه از نوع عدد (Param1 ....to .... Param10)- خب ركوردهاي اون هم براي 10 نام مجزا بصورت روزانه اطلاعات وارد ميشه كه خب مشخصه مثلا براي يك سال حدود 3650 ركورد داريم چه برسه براي مثلا 50 سال اطلاعات - فعلا مجبورم با اكسس كار كنم تا بعد-
آلبته Monthly , Yearly جداول شامل شماره ماه و سال ميلادي و هر دو از نوع عدد هستند
من query‌ زير رو با sql‌ براش نوشتم ولي در اجرا به مشكل timeout برميخوره




Select Datas.Param1 as Val1,Min(Datas.Param1) as Val2,,Max(Datas.Param1) as Val3,Sum(Datas.Param1) as Val4,Avg(Datas.Param1) as Val5 from Datas Where Datas.Gdate between #"&dateadd("yyyy",-10,cdate(MyDate))&"#"&" and "&"#"&cdate(MyDate)&"# "&" and Datas.Param1 between 10 and 20 and Datas.Name="& NameRequest
OR For Monthly Report



Select Datas.Param1 as Val1,Min(Datas.Param1) as Val2,,Max(Datas.Param1) as Val3,Sum(Datas.Param1) as Val4,Avg(Datas.Param1) as Val5,Monthly.mnt as Monthid from Datas,Monthly Where (datepart('m',Datas.Gdate)=Monthly.mnt) and (datepart('yyyy',DatasGdate) between "& year(mydate)-10&" and "& year(mydate)&") and Datas.Param1 between 10 and 20 and Datas.Name="& NameRequest&" GROUP BY Monthly.mnt Order BY Monthly.mnt"


البته اگر براي هر فرد و نام نيز جدول جداگانه بذارم اين مشكل حذف ميشه و لي اون وقت در كسب اطلاعات بيشتر از 4 نفر همزمان براي درج در جدول نيز دچار Timeout ميشه

ممنون ميشم اگه كمكم كنيد
يا علي

kashaneh
سه شنبه 28 مهر 1388, 10:13 صبح
دوست عزیز سوال من از شما اینه آیا این کوئری که نوشتید، داخل محیط پرس و جوی اکسس جواب می دهد یا خیر!؟ منظورم از لحاظ سرعت و دقت و ...
به هر حال قدرت پردازشی بانک های اطلاعاتی متفاوت است... اگر امکانش را دارید این کوئری را در MS Sql تست کنید و خود تفاوت در اجرا را ببینید...
به هر حال راه حل زیر شاید کلید حل مشکل شما باشد...



Set cnnGetRows = Server.CreateObject("ADODB.Connection")
cnnGetRows.ConnectionTimeout = 0
cnnGetRows.CommandTimeout = 0


عدد 0 نشان دهنده زمان تایم آوت (Time Out) بینهایت (حداکثری) می باشد...
اما بهترین راه حل که منابع سیستم هم هدر نرود، طراحی بهینه بانک اطلاعاتی و رعایت دیگر موارد فنی است... موفق باشی