jjafferr قام بنشر يوليو 9, 2023 قام بنشر يوليو 9, 2023 السلام عليكم 🙂 لما يكون فيه مجموعة كمبيوترات تعمل على نفس البرنامج في الشبكة ، وتكون البيانات/الجداول سواء على السيرفر او على احد الكمبيوترات في الشبكة ، ولأنه تاريخ/وقت هذه الكمبيوترات يختلف من كمبيوتر الى آخر ، فهذا يعمل لنا اختلاف في قيمة وقت ادخال السجل ، من كبيوتر الى آخر. احد المؤسسات تشتغل على برنامج يستخدمه حوالي 6 اشخاص ، ويتم ادخال حوالي 2000 سجل يوميا ، والجدول فيه حقل رقم تلقائي ، وحقل التاريخ/الوقت وفيه قيمة افتراضية Now ، طبعا بالاضافة الى بقية الحقول. حقل الرقم التلقائي ما فيه اشكالية في تسلسل الارقام ، ولكن حقل التاريخ/الوقت لا يأخذ قيمة Now من السيرفر ، وانما يأخذه من الكمبيوتر الذي يعمل السجل ، واذا تاريخ/وقت اي من الكمبيوترات خطأ ، مما يعني انه من الصعب/المستحيل معرفة متى تم ادخال هذا السجل بوقته الصحيح مقارنة مع باقي السجلات. قد لا يشكل هذا مشكلة عند البعض ، ولكنه يشكل مشكلة ومعضله عندما تكون البيانات حساسة ومهمة ، ومعرفة من ادخل المعلومة و متى. توصلت الى الاستعانة بالدوال التالية ، واستعملها اول ما افتح البرنامج (ولمرة واحدة فقط) ، و اضع في المتغير Diff_Sec فرق التاريخ/الوقت بالثواني ، بين السيرفر والكمبيوتر ، ولما اضيف السجل اضيف قيمة هذا المتغير الى Now الكمبيوتر ، مما يعطي السجل وقت السيرفر ، وعليه تكون جميع السجلات تعمل على نفس التوقيت 🙂 اقوم بمناداة الدالة هكذا: call Get_Remote_PC_Time("\\192.168.100.88") Option Compare Database Option Explicit 'Fetch and display Net Remote Time Of Day from a 'remote Windows system. Supply a UNC hostname '(or a DNS name), or empty string for the local 'host's time and date. ' Private Const NERR_SUCCESS As Long = 0 Private Type TIME_OF_DAY_INFO tod_elapsedt As Long tod_msecs As Long tod_hours As Long tod_mins As Long tod_secs As Long tod_hunds As Long tod_timezone As Long tod_tinterval As Long tod_day As Long tod_month As Long tod_year As Long tod_weekday As Long End Type #If Win64 Or VBA7 Then Dim lngBufPtr As LongPtr Private Declare PtrSafe Function NetApiBufferFree Lib "netapi32" _ (ByVal lpBuffer As LongPtr) As Long Private Declare PtrSafe Function NetRemoteTOD Lib "netapi32" _ (UncServerName As Byte, BufferPtr As LongPtr) As Long Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ (pTo As Any, uFrom As Any, ByVal lSize As LongPtr) #Else Dim lngBufPtr As Long Private Declare Function NetApiBufferFree Lib "netapi32" _ (ByVal lpBuffer As Long) As Long Private Declare Function NetRemoteTOD Lib "netapi32" _ (UncServerName As Byte, BufferPtr As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ (pTo As Any, uFrom As Any, ByVal lSize As Long) #End If ' Public Diff_Sec As Double ' Public Function GetTOD(ByVal Server As String) As Date Dim bytServer() As Byte 'Dim lngBufPtr As Long Dim todReturned As TIME_OF_DAY_INFO bytServer = Trim$(Server) & vbNullChar If NetRemoteTOD(bytServer(0), lngBufPtr) = NERR_SUCCESS Then CopyMemory todReturned, ByVal lngBufPtr, LenB(todReturned) NetApiBufferFree lngBufPtr With todReturned GetTOD = DateAdd("n", _ -.tod_timezone, _ DateSerial(.tod_year, .tod_month, .tod_day) _ + TimeSerial(.tod_hours, .tod_mins, .tod_secs)) End With Else Err.Raise vbObjectError + 2000, _ "GetTOD", _ "Failed to obtain server time" End If End Function Public Function Get_Remote_PC_Time(txtServer As String) ' ' calling it: 'Get_Remote_PC_Time("\\192.168.100.88") ' Dim dtServerTime As Date 'Dim Diff_Sec As Double On Error Resume Next dtServerTime = GetTOD(txtServer) Diff_Sec = DateDiff("s", Now, dtServerTime) Debug.Print "Diff=" & Diff_Sec Debug.Print "Server=" & dtServerTime Debug.Print "Local ok= " & DateAdd("s", Diff_Sec, Now) ' If Err.Number <> 0 Then ' Debug.Print Err.Description ' Else ' Debug.Print CStr(dtServerTime) ' End If ' On Error GoTo 0 '' txtServer.SetFocus End Function . جعفر 4 2
ابو جودي قام بنشر يوليو 9, 2023 قام بنشر يوليو 9, 2023 ما شاء الله الله أكبـــــر سلمت يمناكم استاذى الجليل ومعلمى القدير و والدى الحبيب 1
عمر ضاحى قام بنشر يوليو 9, 2023 قام بنشر يوليو 9, 2023 اولا تسلم ايدك على هذا العمل الرائع ثانيا لى سؤال اخر هل الكود ايضا ممكن يجلب لي الوقت من على موقع او سيرفر معين ؟
jjafferr قام بنشر يوليو 9, 2023 الكاتب قام بنشر يوليو 9, 2023 44 دقائق مضت, عمر ضاحى said: هل الكود ايضا ممكن يجلب لي الوقت من على موقع او سيرفر معين ؟ المنتدى به الكثير من المواضيع لجلب الوقت من الانترنت ، ولكن لم ارى موضوع لتوحيد تاريخ/وقت كمبيوترات الشبكة ، وهذا هو صلب الموضوع 🙂 قمت بإضافة شرح لسبب استخدامي لهذا الموضوع 🙂 جعفر 1
AbuuAhmed قام بنشر يوليو 14, 2023 قام بنشر يوليو 14, 2023 مجهود تشكر عليه عزيزي، عملت شيء مشابه للفكرة قديما للشركات التي عملت بها بس لا أتذكر الطريقة ولا عندي نسخ من تلك البرامج. ما جربت الكود، ولكن لفت نظري أنك تقوم بعد الحصول على وقت الخادم/السيرفر بعمليات حسابية لمعرفة الفرق. وملاحظتي "إن كنت فهمت صح" لماذا لا تعتمد تاريخ الخادم مباشرة بعيدا عن المقارنات وحساب الفرق؟
jjafferr قام بنشر يوليو 14, 2023 الكاتب قام بنشر يوليو 14, 2023 السلام عليكم اخوي ابو احمد 🙂 عندي سببين اللي ما خلوني استعمل تاريخ/وقت الخادم مباشرة: الشبكة ضعيفة ، وكل ثانية في البرنامج مهمة ، فمناداة وقت الخادم حوالي 1000 مرة خلال ساعة ، وبواسطة بين 2-3 مستخدمين ، كان بيشكل بطئ في البرنامج ، ايام زمان كنا نقدر وبكل بساطة تغيير وقت الكمبيوتر المحلي ، اما هذه الايام ، فيجب ان يكون عندك صلاحية مسؤول ، وبالتالي تجيك رسالة تسألك اذا اردت تغيير التاريخ/الوقت ، واذا نقرت على لا ، ضاع الشغل كله 😁 ولا تنسى اني انادي هذه الدوال مرة وحدة فقط ، عند فتح البرنامج فقط 🙂 هل فيه شيء آخر ممكن اكون سهوت عنه ، ويمكنك تفيدني فيه 🙂 جعفر 1
AbuuAhmed قام بنشر يوليو 14, 2023 قام بنشر يوليو 14, 2023 44 دقائق مضت, jjafferr said: هل فيه شيء آخر ممكن اكون سهوت عنه ، ويمكنك تفيدني فيه 🙂 ممتاز، إذا عرف السبب بطل العجب 🙂 يبقى احتمال لو أن الموظف غير متعود على غلق البرنامج.
jjafferr قام بنشر يوليو 14, 2023 الكاتب قام بنشر يوليو 14, 2023 صارت معانا😁 بس بوجه عام حتى في مثل الحالات، وقت الكمبيوتر المحلي ووقت السيرفر لن يتغيروا، إلا إذا بطارية motherboard الحاسبة المحليةخربانه، بس هذا كذلك يؤثر على الوقت عند تشغيل الكمبيوتر، فلما نفتح البرنامج يتصلح الوضع اثناء عمل البرنامج😊 جعفر
ابوخليل قام بنشر يوليو 14, 2023 قام بنشر يوليو 14, 2023 السلام عليكم ايضا من الحلول اذا كان الانترنت متاح في الاجهزة .. (( مع مراعاة كونه شرطا في تحرير البيانات .. )) وكما نعلم وما هو حاصل الآن اذا تعطل الانترنت .. توقف كل شيء : الهواتف وغيرها ولما قرأتم تعليقي هذا الحل ان يتم ادراج تاريخ ووقت الانترنت الحالي .. بعيدا عن السيرفر والاجهزة الأخرى 1
jjafferr قام بنشر يوليو 14, 2023 الكاتب قام بنشر يوليو 14, 2023 وعليكم السلام اخوي ابوخليل 🙂 نعم هذا البديل موجود ويمكن استعماله كذلك ، وتنفيذ فارق الوقت على الحاسبات سيكون بنفس الطريقة اعلاه 🙂 جعفر
دروب مبرمج قام بنشر يوليو 14, 2023 قام بنشر يوليو 14, 2023 فنااااااااااااان كنت ابحث عن الطريق من وقت طويل و عجزت اوصل لها شكرا شكرا شكرا من القلب على هذه الهدية الرائعة 1
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.