View Full Version : خواندن اطلاعات از بانک با تایمر
hoseinbiglari
سه شنبه 13 اسفند 1392, 07:07 صبح
سلام خدمت دوستان و اساتید محترم سایت. مشکل بنده این است که جهت خواندن اطلاعات از بانک اطلاعاتیم (از نوع اسکوئل)مجبورم adodc را در یک تایمر قرار دهم که در هر 15 ثانیه این عمل refresh را انجام دهد اما زمانی که حجم اطلاعات افزایش می یابد یقینا باعث کند شدن سیستم می شود . آیا راهی هست که بتوان این گونه عملیات را بدون استفاده از تایمر انجام داد . در ضمن من با ویژوال بیسیک برنامه می نویسم. از کمکهایتان بی نهایت متشکرم
Private Sub Timer4_Timer()
adodctemp.RecordSource = " SELECT dbo.DARKHAST.INTID, dbo.DARKHAST.NONUMBER
FROM dbo.DARKHAST
adodctemp.Refresh
End Sub
vbhamed
شنبه 17 اسفند 1392, 19:59 عصر
سلام
اگر ممكنه توضيح دقيقتري از روند كار برنامتون بدين و اينكه چرا نياز داريد هر 15 ثانيه رفرش بشه
hoseinbiglari
دوشنبه 19 اسفند 1392, 08:22 صبح
سلام: از لطفت بی نهایت سپاسگذارم که به سئوالم اهمیت دادی . استاد ارجمند همانگونه که مطلع می باشی برای یکسری از کارها مانند ارسال پیام در شبکه و یا اینچنین کارهایی می بایست از تایمر ا ستفاده کرد و حتی می بایست هر لحظه ارسال شود حالا من به خاطر اینکه query برنامم بزرگه هر 15 ثانیه گذاشتم این کار انجام شود. چون همانگونه که مطلع می باشید بار زیادی روی cpu به بار خواهد آورد.
پس به خاطر ریفرش شدن هر 15 ثانیه این کار را انجام دادم.
vbhamed
دوشنبه 19 اسفند 1392, 08:58 صبح
سلام
بهتر بود شما توضيح كلي نميدادي و دقيقا كاري كه مد نظرتون هست رو ميگفتيد تا ببينيم راهي ديگه هست يا نه
ضمنا نوع بانكتون چي هست Jet يا SQL ؟
در هر حال من فكر ميكنم به جاي اينكه همه ركوردها رو Load كنيد ميتونستيد هر بار تعداد ركوردهاي جدول رو بدست بياريد تا بار ترافيكي هم كم بشه و البته بازم ميگم بايد بدونم دقيقا چه كاري قراره انجام بشه، ضمنا اگر بانكتون Sql باشه از تريگرها هم ميشه براي بعضي كارها استفاده كرد
hoseinbiglari
دوشنبه 19 اسفند 1392, 10:44 صبح
سلام مجدد.
عرضم حضورت بانکم sql server 2005 و متاسفانه چند table را هم با هم join کردم . مجبورم همه این ديتا را Load کنم .
می شه از تریگرها بیشتر توضیح بدی ؟ و آیا تریگرها را باید در sql server بنویسم یا در همان ویژوال بیسک نوشته شود؟ اگر میشود نمونه ای از تریگرها را بفرستی ممنون می شم
vbhamed
دوشنبه 19 اسفند 1392, 14:43 عصر
سلام
اين بار سوم هست كه ميپرسم دقيقا چه كاري ميخواين انجام بدين، اگر اطلاعات دقيق ندين بيشتر از اين نميتونم راهنمايي كنم چون ديدي نسبت به كار ندارم
در مورد تريگرها هم بله در sql ايجاد ميشن و راهنماي sql هم كه تو اينترنت زياده ولي به طور كلي كار تريگر اينه كه وقتي عملي در ديتابيس انجام بشه، مثلا اضافه شدن يك ركورد يا حذف يا ...، به ازاي اون عمل شما خبر دار ميشين و ميتونيد كاري انجام بديد يا حتي جلوي انجام اون عمل رو بگيريد ولي توضيحات بيشتر رو در كتابهاي آموزشي Sql يا سايتها جستجو كنيد
hoseinbiglari
سه شنبه 20 اسفند 1392, 06:48 صبح
سلام:
این کل کاریه که انجام می شه
Dim a As Integer
a = valCOUNT1
adodctemp.RecordSource = " SELECT dbo.DARKHAST.INTID, dbo.DARKHAST.NONUMBER, dbo.DARKHAST.VAHEDDARKHAST,'ÌåÊ ÇãÖÇÁ' AS Desc1" _
& " FROM dbo.DARKHAST LEFT OUTER JOIN dbo.rayesgesmat ON dbo.DARKHAST.VAHEDDARKHAST = dbo.rayesgesmat.zermajmo" _
& " WHERE DARKHAST.tikmoder=0 and dbo.rayesgesmat.nopersonel = '" & USERNOPERSONEL & "'" _
& " AND (dbo.DARKHAST.tikmoderkarkhane = 0) AND (dbo.rayesgesmat.nopersonel = '" & USERNOPERSONEL & "')" _
& " AND (nopersoneLTAHVILGIRANDEH = 0)" _
& " UNION ALL" _
& " SELECT dbo.DARKHAST.INTID, dbo.personelchart.NONUMBER, dbo.DARKHAST.VAHEDDARKHAST,'ÌåÊ ÇÓÎ' AS Desc1" _
& " FROM dbo.personelchart LEFT OUTER JOIN dbo.DARKHAST ON dbo.personelchart.NONUMBER = dbo.DARKHAST.NONUMBER" _
& " Where dbo.personelchart.nopersonel = " & USERNOPERSONEL _
& " AND (nopersoneLTAHVILGIRANDEH = 0)"
adodctemp.Refresh
valCOUNT1 = adodctemp.Recordset.RecordCount
If CStr(valCOUNT1) <> a Then
Beep 500, 100
End If
Label1 = "تعداد کارهای انجام داده نشده " + CStr(valCOUNT1)
adodctemp2.Refresh
valCOUNT2 = adodctemp2.Recordset.RecordCount
Label2 = "تعداد کارهای اضطراری انجام داده نشده " + CStr(valCOUNT2)
زمانی که یک کاربر در شبکه کاری را درخواست می کند بعد از 15 ثانیه اطلاعات می رسد دست کاربر دیگر و همچنین این کار می چرخد.
خدا کنه توانسته باشم منظورمو رسونده باشم .
یع
vbhamed
چهارشنبه 21 اسفند 1392, 08:31 صبح
سلام
البته منظور من اين نبود كه كدتون رو بنويسيد ولي خب تا جايي كه متوجه شدم شما ميخواين درخواستهايي بفرستيد و كاربران ديگه درخواستها رو ببينند و انجام دهند
براي اينطور كارها بايد از سيستم ارسال و دريافت پيام استفاده كنيد كه ميتونيد با كنترل Winsock اينكار رو انجام بدين و هر موقع درخواستي داشتيد اگر لازم بود در ديتابيس ثبت بشه و بعدش با Winsock به كامپيوتر كاربر مورد نظر يك پيام بفرستيد كه در سمت كاربر هم برنامه پيام ارسال شده رو دريافت ميكنه و بر اساس اون تصميم ميگيره چه كار انجام بده و نياز به چك كردن دائمي ديتابيس نيست
در مورد كار با Winsock هم نمونه تو سايت و اينترنت زياده
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.