سلام
ایا میشه قبل لود شدن فرم اصلی برنامه چک کنه که اینترنت متصل هست یا نه
اگر متصل بود فرم باز بشه ؟؟؟؟؟؟؟؟؟؟
سلام
ایا میشه قبل لود شدن فرم اصلی برنامه چک کنه که اینترنت متصل هست یا نه
اگر متصل بود فرم باز بشه ؟؟؟؟؟؟؟؟؟؟
خودم امتحان نکردم ولی یه کد رو مینویسم شما امتحان کن
1- اول فایل اکسست رو باز کن سپس با زدن alt+f11برو تو محیط کد نویسی فایل اکسس
2- در رویداد on open
Private Sub Form_Open(Cancel As Integer)
Me.TimerInterval = 1000
End Sub
2- سپس در رویداد on timer
Private Sub Form_Timer()
Dim rst As DAO.Recordset
Dim strConnection As String
If InternetGetConnectedState(0&, 0&) Then
strConnection = "اینترنت وصل است"
Else
strConnection = "اینترنت وصل نیست بنابراین از برنامه خارج می شوید"
docmd.quit
End If
امتحان ببین مشکل داره یا نه من هم این کد رو یه جایی دیدم خودم استفاده نکردم
آخرین ویرایش به وسیله Shahramdindoust : یک شنبه 08 فروردین 1400 در 11:59 صبح
انجام دادم نشد .کسی نظری نداره
آخرین ویرایش به وسیله rostamani68 : شنبه 07 فروردین 1400 در 14:22 عصر
کسی بلد نیست؟؟
سلام کدها رو اصلاح کردم دوباره امتحان کن
اول یه ماژول بساز با و ذخیره کن و این کد ها رو توش بنویس
Option Compare Database
Public Declare Function InternetGetConnectedState Lib "wininet.dll" _
(ByRef dwflags As Long, ByVal dwReserved As Long) As Long
بعد این کد ها رو توی محیط کدنویسی فرم خودت (نه توی ماژول) کپی کن کار میکنه
Private Sub Form_Open(Cancel As Integer)
Me.TimerInterval = 2000
End Sub
Private Sub Form_Timer()
Dim rst As DAO.Recordset
Dim strConnection As String
If InternetGetConnectedState(0&, 0&) Then
strConnection = "Is connected"
Else
strConnection = "Not connected"
DoCmd.quit
End If
End Sub
موفق باشید
اگه مشکلی بود بگین
سلام
سئوالتون خیلی کلی مطرح شده با این وجود چیزی که مشخصه کدهای شما باید در رویداد لود فرم اجرا بشه و ساده ترین راه اینه که بعد از ارسال درخواست اگر موفق نبود با نشان دادن پیام مناسب و بستن فرم از برنامه خارج بشه.
..................
موفق باشید
آخرین ویرایش به وسیله amirzazadeh : یک شنبه 08 فروردین 1400 در 12:40 عصر
مرسی تونستم با این کدی که دادین مشکلمو حل کنم با یکم تغییرات کوچیک
برای دوستامی که مثل من مشکل داشتن
یک ماژول بسازید و کد زیر را تو ماژول کپی کردم
Public Declare Function InternetGetConnectedState Lib "wininet.dll" _
(ByRef dwflags As Long, ByVal dwReserved As Long) As Long
نکته : دوستانی که نسخه 64 بیتی رو دارند .قبل از نوشته Function عبارت PtrSafe رو اضافه کنید . تا مشکل برطرف بشه .که کد از رنگ قرمز در بیاد
بعد تو قسمت انلود تایمر on Timer صفحه اصلی برنامه کد زیر را کپی کنید
Dim rst As DAO.Recordset
If InternetGetConnectedState(0&, 0&) Then
Me.lblnet.Caption = "اینترنت انلاین"
Else
Me.lblnet.Caption = "اینترنت افلاین"
End If
بعد توی کادر پاین timer TimerInterval بنویسید 2000
نکته : تو صفحه اصلی یه lbl لیبل بسازید و نام lbl لیبل رو بزارید lblnet
بله ممنون از راهنماییتون
قبل از اینکه کدهای آماده در اینترنت رو اسفاده کنین، باید مستندات اون رو بخونین بخصوص توابع API .
این تابع InternetGetConnectedState که اینجا استفاده شده مطلقا و به هیچ وجه برای بررسی وضعیت وصل بودن اینترنت قابل استفاده نیست و اصولا کارش این نیست!
خیلی راحت این تابع وقتی اینترنت قطع هست مقدار TRUE برمیگردونه که این رو میگذارم خودتون تحقیق کنین چرا اینجور هست.
جواب درست همونی بود که در پست شماره 6 آمده:
1- مشخص نیست که منظور از وصل بودن اینترنت دقیقا چی هست؟ آیا یک سایت یا سرویس مشخص مورد نظر هست (منطقیش اینه) و یا بطور کلی.
2- وضعیت اینترنت لحظه ای هست یعنی اگر فرض کنیم به روشی بتونیم وضعیت شبکه رو پیدا کنیم، اعتبارش در همون لحظه است و نه حتی یک ثانیه بعدش.
برای همین باید در همون روتین که قرار هست با اینترنت سروکار داشته باشه، با کنترل پاسخ و بررسی وضعیت خطا برنامه رو مدیریت کنیم.
با سلام و احترام
دوست عزیز در فایلی که پیوست کردم با کلیک بر روی دکمه می توانید هم وضعیت شبکه داخلی خود را کنترل کنید و هم وضعیت اتصال به اینترنت را چک کنید. اگر شبکه داخلی قطع باشد پیام جدا می دهد و اگر اینترنت قطع باشد پیام دیگیری میدهد . امیدوارم که مفید باشد
با سلام و احترام
Option Compare Database
Const NETWORK_ALIVE_AOL = &H4
Const NETWORK_ALIVE_LAN = &H1
Const NETWORK_ALIVE_WAN = &H2
Private Declare Function IsNetworkAlive Lib "SENSAPI.DLL" (ByRef lpdwFlags As Long) As Long
Private Sub Command0_Click()
Dim CRes As Long
If IsNetworkAlive(CRes) = 0 Then
"شبکه داخلی قطع است" MsgBox
Else
If CRes = NETWORK_ALIVE_LAN Then
"اینترنت قطع است" MsgBox
Else
"اینترنت وصل است" MsgBox
End If
End If
End Sub
کد به تنهایی موردی نداره (به جز Dim rst As DAO.Recordset که از برنامه مبدا کپی شده و بدون هیچ دلیل و کاربردی هنوز حضور داره!)
این کد فقط نشون میده که شما امکان دسترسی به اینترنت رو دارین یا نه، این فرق میکنه با این که واقعا متصل هستین.
اگر اینترنت از isp و به بعد قطع باشه باز هم true برمیگردونه، شاید این برای شما اهمیت نداشته باشه ولی قطعا برای اینکار کد نادرستی هست!
گذشته از همه این موارد، خود ویندوز روی آیکون شبکه وضعیت اتصال به اینترنت رو هم نشون میده؛
به فرض محال که این کد درست کار میکنه چه نیازی هست که این رو در فرم هم نمایش بدیم.
و باز هم فرض کنیم که کد درست رو هم از یک جایی پیدا و کپی کردیم،
وقتی اعتبار وضعیت اتصال لحظه ای هست نمیشه از این روش برای تصمیم گیری در انجام کاری استفاده کرد.
در همون پست شماره 6 آمده این موضوع.
جناب مزولق روز خوش
این کد در سیستم من که به شبکه سازمانی متصل است به درستی کار می کند زمانی که کابل شبکه را از سیستم جدا می کنم پیغام اول صادر می شود و زمانی که از طریق برنامه ibsengin اینترنت را قطع می کنم پیام دوم ظاهر شده و زمانی که اینترنت را وصل می کنم پیام سوم ظاهر می شود .
IBSNG برنامه ACCOUNTING هست و نمیدونم سازوکارش با اینترفیس شبکه هنگام قطع اینترنت چگونه هست ،
ولی شما یک تست ساده در خانه (یا هر جای دیگه که ADSL دارین) انجام بدین:
سیم تلفن رو از مودم قطع و این کد (یا کد آقای دیندوست) رو اجرا کنین و ببینین قطع بودن اینترنت رو تشخیص میده یا نه.
در تاپیک های مربوط به وب سرویس (تامین اجتماعی، بیمه سلامت، ارسال پیامک) اگر کدهایی رو که گذاشتم بررسی کنین روش کار مشخص شده،
با این وجود یک کد مستقل برای اینکار همینجا پیوست میکنم.
آخرین ویرایش به وسیله mazoolagh : شنبه 21 فروردین 1400 در 14:50 عصر
برای اطمینان از این که به سرویس اینترنت دسترسی داریم، باید یک درخواست به یک آدرس بفرستیم و جواب رو بررسی کنیم.
یک راه این هست که یک آدرس اینترنتی رو باز کنیم (بطور منطقی باید آدرس سایتی باشه که باهاش سروکار داریم)
کد زیر به ما کمک میکنه بدونیم آیا به یک آدرس مشخص دسترسی داریم یا نه،
و اگر دسترسی نداریم دلیل اون چی هست (در صورت نیاز)
Option Compare DatabaseOption Explicit
Public Type Response
OK As Boolean
StatusText As String
StatusCode As String
End Type
Function Check_Url(url As String) As Response
On Error GoTo Error_handler
Dim RQ As New WinHttpRequest
RQ.Open "Get", url, False
RQ.Send
Check_Url.OK = True
Check_Url.StatusText = RQ.StatusText
Check_Url.StatusCode = RQ.Status
Exit Function
Error_handler:
Check_Url.OK = False
Check_Url.StatusCode = Err.Number
Check_Url.StatusText = Err.Description
End Function
برای نمونه کد زیر رو در نظر بگیرین:
Dim r As Response
r = Check_Url("https://google.com")
Debug.Print r.OK, r.StatusCode, r.StatusText
خروجی بصورت زیر خواهد بود:
True 200 OK
ولی اگر آدرسی رو که در سایت وجود نداره بدیم:
Dim r As Response
r = Check_Url("https://google.com/aaaaaa")
Debug.Print r.OK, r.StatusCode, r.StatusText
نتیجه زیر رو داریم:
True 404 Not Found
راه دیگه این هست که یک هاست مشخص رو ping کنیم.
پینگ کردن یک هاست با چک کردن url فرق داره:
1- هر آدرس با هر سرویسی رو میشه پینگ کرد (البته بعضی سرورها به پینگ پاسخ نمیدن به دلایل کاملا مشخص!)
پس برخلاف چک url که فقط برای سرویس http معنی داره، میتونیم dns یا mail server و ... رو هم چک کنیم.
2- پینگ خیلی سریعتر هست چون یک پکت کوچک میفرسته و یک پاسخ کوچک هم میگیره ولی در چک url باید تمام پاسخ خونده بشه و این میتونه زمانبر باشه.
ولی ما به جای این که خروجی دستور رو در فایل بریزیم و اون رو پردازش کنیم از کلاس Win32_PingStatus استفاده میکنیم.
برای آشنایی با این کلاس میتونین به آدرس زیر برین:
https://docs.microsoft.com/en-us/pre...n32-pingstatus
در همین آدرس یک نمونه کد هم هست که من اون رو ساده کردم:
Public Function Ping(Host As String) As Boolean
Dim objPing As Object
Set objPing = GetObject("winmgmts:").Get("Win32_PingStatus.Addre ss='" & Host & "'")
Ping = (objPing.StatusCode = 0)
End Function
----------------------------------
آخرین ویرایش به وسیله Shahramdindoust : یک شنبه 22 فروردین 1400 در 11:40 صبح
با سلام و احترام
ضمن تشکر از راهنمائی های مفید استاد گرامی جناب مازولق
من در فایل پیوست از طریق گرفتن پینگ سایت گوگل می توانم اتصال به اینترنت و یا عدم اتصال را کنترل کنم . امیدوارم که مفید باشد
آخرین ویرایش به وسیله محمد رضا بهبودی : دوشنبه 23 فروردین 1400 در 09:49 صبح
تعداد پک های ارسالی 1 و زمان ارسال 500 میلی ثانیه در نظر گرفته شده است . اگر تعداد پک ها را 3 و زمان ارسال را 1000 میلی ثانیه در نظر بگبرید ، دقت برنامه بیشتر خواهد شد.
سلام و روز خوش
پیوست کدها کار خیلی خوبی هست که بهتره همیشه انجام بشه؛ به این دلیل که در جستجو منظور میشه و دیگران بهتر میتونن به یک مطلب برسن.
در مورد پینگ دائم به یک سرور نکته ای هست که بهتره در نظر داشته باشین که ممکنه به عنوان یک عمل خرابکارانه دیده بشه و بعد از مدتی IP شما بسته بشه.