اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر

السلام عليكم ورحمة الله وبركاته 

عندي برنامج مرتبط بجداول علي سيكوال سيرفر 

اريد جلب تاريخ ووقت   السيرفر في حقل في نموذج بدل من تاريخ ووقت جهاز المستخدم الي عليه البرنامج 

IP _SERVER_ 128.122.1.20

وجزاكم الله خيرا

  • Like 1
قام بنشر (معدل)

شكرا استاذي الفاضل 

للاسف جربته ولم يفلح معي وكان به هذا الملف عند وضع IP في اسم السيرفر يعطيني خطأ 

الجداول مصصمه في قاعدة بيانات سيكوال  ومرتبطه عن طريق ODBC 

 

3.jpg

333.jpg

get time.rar 1176.Network_PC_Time.mdb

تم تعديل بواسطه حسين العربى
قام بنشر

السلام عليكم 🙂

 

لا يكفي ان تكتب رقم IP السيرفر ، بينما يجب ان تكتب اسم المجلد الذي لك فيه صلاحية الكتابة Read/Write ، مثل :

image.png.450accdb7f594ed05680591312333abc.png

.

وعملنا تعديل في الوحدة النمطية ، بحيث تأخذ اسم مجلد السيرفر من حقل النموذج :

Public Function Make_File3(BE_Path As String)
On Error GoTo err_Make_File3

    Dim PauseTime, Start
    
    'we need the path to have a slash at its end
    If Right(BE_Path, 1) <> "\" Then
        BE_Path = BE_Path & "\"
    End If
    
    BE_Path = BE_Path & "dummy.txt"
    
    'make the dummy txt file
    Open BE_Path For Output As #1
        Print #1, "No text required"
    Close #1
    
    'pasue for a second, until file is recognized, for slow networks
    PauseTime = 1    ' Set duration.
    Start = Timer    ' Set start time.
    Do While Timer < Start + PauseTime
        DoEvents    ' Yield to other processes.
    Loop
    
    'get the date created
    Make_File3 = FileDateTime(BE_Path)
    
    'clean up, delete the file
    Kill BE_Path

Exit_Make_File3:

    Exit Function
err_Make_File3:

    If Err.Number = 75 Then
        MsgBox "Access Denied" & vbCrLf & "لا تملك الصلاحية في الكتابة في المجلد"
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If
    
    Resume Exit_Make_File3
    
End Function

.

ونناديها من النموذج هكذا:

Me.srvr_Date_Time = Make_File3(Me.srvr_Domain_Name)

 

جعفر

1176.my_FE_Network_PC_Time.mdb.zip

  • Like 2
قام بنشر

استاذي الفاضل jjafferr  انا جربت التعديل وظبط معي 

طيب ايه رايك لو نضع الجدول الي موجود في الملف  BE الموجود علي السيرفر  في SQL  ونربطه بالواجه FE  عن طريق ODBC 

فما هو التعديل علي الوحده النمطيه 

لا ني بصراحة مش عاوز اعمل ملف شير لاني دي شركة 

قام بنشر

وعليكم السلام 🙂 

9 ساعات مضت, حسين العربى said:

وليس داخل  ملف اومجلد

نعم اعرف هذا ، لهذا السبب لم اذكر كلمة BE او محل تواجدها ، بينما في الرابط اعلاه ذكرت هذا لأن @سلمان الشهراني لم يكن يستعمل SQL Server :

في ١٢‏/٣‏/٢٠٢٠ at 14:25, jjafferr said:

وبما ان ملف الجداول يكون في مجلد يسمح فيه بإنشاء/تعديل/حذف ملف ، فهذه الطريقة المفروض انها تشتغل 🙂

.

 

13 دقائق مضت, حسين العربى said:

لا ني بصراحة مش عاوز اعمل ملف شير لاني دي شركة

انت لن تعمل مجلد مشاركة لتضع فيه اي شيء له علاقة ببرنامجك ، ويمكنك استعمال اي مجلد مشاركة عام في السيرفر ،

حيث ان هذه الطريقة تختاج الى عمل ملف txt على الجهاز الآخر (السيرفر في حالتك).

 

 

اما الآن فاترك كل ما عملناه ، وخلينا نتكلم عن السيرفر 🙂 

انت استلمت رسالتين خطأ :

1. Type mismatch ، وهذا بسبب خطأ في السطر التالي من الكود :

بدلا عن
    If Err.Number = 70 Then
        MsgBox "Permission Denied"
        MachineTimeGet = ""


استعمل
    If Err.Number = 70 Then
        MsgBox "Permission Denied"
        MachineTimeGet = Empty

 

 

بعد البحث ، وجدت الطريقة ، ووضعتها في نموذج جديد:

image.png.7bd55eba94fb9e6844ee2cb6d83528e5.png

 

جعفر

1176.my_FE_Network_PC_Time.mdb.zip

  • Like 2
قام بنشر (معدل)

الف شكر استاذي الفاضل علي تعبك معي  بس انا توصلت الي حل اخر بالنسبة للسيرفر  وضعت الجدول في قاعدة بيانات SQL  وجعلة قيمة حقل التاريخ NOW

وعملت ربط من برنامجي بالجدول عن طريق ODBC  وعملت استعلام مرتبط بالجدول ومن خلال النموذج بستدعي التاريخ والوقت عن طريق دالة DLookup  من الاستعلام فيستدعي لي تاريخ السيرفر

وسوف اشرح ذلك بالفيديو ليستفيد الجميع

لاكن طلبي الحين لو تكرمت ليكتمل عملي  

اريد كود مقارنه  يظهر لي رسالة تنبيه  اذا كان حقل وقت السيرفر غير مطابق لحقل وقت كمبيوتر المستخدم

واقصد بالوقت الساعه فقط مع تلاشي الدقائق والثواني لاني احيانا يكون في فرق في الدقائق بين السيرفر وجهاز المستخدم 

وشكر 

واسف علي الاطالة

تم تعديل بواسطه حسين العربى
  • أفضل إجابة
قام بنشر
25 دقائق مضت, حسين العربى said:

وضعت الجدول في قاعدة بيانات SQL

 

وجدت كود ليقرأ من SQL Server مباشرة ، وتركته في البرنامج ، ولكني ام افعّله :

Dim cmd As New ADODB.Command
Dim RS As New ADODB.Recordset

cmd.ActiveConnection = "Provider=SQLOLEDB;DataSource=yourserver;Database=yourDB;UID=test;PWD=test;"
cmd.ActiveConnection.CursorLocation = adUseClient
cmd.CommandText = "Select getdate()"

Set RS = cmd.Execute
Debug.Print RS(0)

RS.Close
cmd.ActiveConnection.Close

.

28 دقائق مضت, حسين العربى said:

ولو امكن التاريخ والساعة فقط

 

استخدم دالة Format ، بحيث time_date_server هو حقل تاريخ السيرفر ، هكذا:



if format(time_date_server ,"dd/mm/yy") <> format(date() ,"dd/mm/yy") then
  msgbox "تاريخ السيرفر لا يطابق تاريخ الكمبيوتر"

elseif format(time_date_server ,"hh") <> format(date() ,"hh") then
  msgbox "ساعة السيرفر لا تطابق ساعة الكمبيوتر"

end if

 

جعفر

  • Like 3
  • Thanks 1
قام بنشر

السلام عليكم

لقد وصلت متأخرا فوجدت الأستاذ جعفر فعل كل شيء ما شاء الله عليه.

لذلك سوف أضع مشاركتي على الرغم أنها تشبه كثيرا كود الأستاذ جعفر

Dim str_conn As New ADODB.Connection
Dim RS As New ADODB.Recordset

str_conn.Open "Provider=SQLOLEDB;Integrated Security=SSPI;Initial Catalog=master;Data Source=" & Me.Comp1

Set RS = str_conn.Execute("select GETDATE()")

MsgBox RS(0)

Set RS = Nothing
str_conn.Close

Me.Comp1 هو اسم مربع اسم السرفر

  • Like 2
  • Thanks 1
قام بنشر (معدل)

استاذي الفاضل jjafferr  لم انتبه لهذا الكود ممكن شرح 

Dim cmd As New ADODB.Command
Dim RS As New ADODB.Recordset

cmd.ActiveConnection = "Provider=SQLOLEDB;DataSource=yourserver;Database=yourDB;UID=test;PWD=test;"
cmd.ActiveConnection.CursorLocation = adUseClient
cmd.CommandText = "Select getdate()"

Set RS = cmd.Execute
Debug.Print RS(0)

RS.Close
cmd.ActiveConnection.Close

 

تم تعديل بواسطه حسين العربى
قام بنشر
2 ساعات مضت, حسين العربى said:

لم انتبه لهذا الكود ممكن شرح 

هذا الكود مثل كود اخوي صالح ، يحاكي قاعدة البيانات SQL Server مباشرة ،

ومثل ما نعرف ، بما ان SQL Server موجودة على السيرفر ، فالسيرفر يكون له اسم دخول وكلمة سر ، 

ولكن هناك طريقة بأن تقدر ان تعمل اسم المستخدم وكلمة السر في قاعدة بيانات SQL Server مباشرة ، ودون حصولك على اسم المستخدم وكلمة سر السيرفر ،

فهذا الكود يقوم بهذا العمل :

cmd.ActiveConnection = "Provider=SQLOLEDB	 هذا ثابت ولا يتغير
  ;DataSource=yourserver  او اسم السيرفر IP
    ;Database=yourDB      اسم قاعدة البيانات
      ;UID=test           اسم المستخدم
        ;PWD=test;"       كلمة السر
          
          
مثلا
          
cmd.ActiveConnection = "Provider='SQLOLEDB';DataSource='\\192.168.1.125';Database='PersonnelDB';UID='jjafferr';PWD='NoWayToExposeIT';"          

 

 

 

---------------------------------------

ولكن ، ايش لك في البحر واهواله ورزق الله على السيف !!

 

جميع هذه الطرق للاشخاص الذين يريدون عمل مقارنة لساعة الجهاز مع ساعة السيرفر ،

بينما انت تريد وقت السيرفر في برنامجك المرتبط بالـ SQL Server مباشرة ، فخلينا نعمل شيء انت تعرفه ومتعود عليه وما بتحتاج الى مساعدة ،

فبدلا عن استعمال Dlookup ، اعمل جدول فيه 3 حقول: حقل الرقم التلقائي ، وحقل التاريخ التلقائي (وتكون القيمة الافتراضية: ()Now او ()getdate ) ، وحقل مؤقت ، واعمل نموذج له ،

وعند تحميل النموذج ، اعمل كود للذهاب الى سجل جديد ( docmd.GoToRecord,,acNewRec ) ، وسترى قيمة حقل التاريخ التلقائي (وهو المطلوب 🙂 ) ، ومن غير ان تضيف اي سجل 🙂 

 

جعفر

قام بنشر

الف شكر استاذي الفاضل

بالعكس انا هدفي هو المقارنه

لكي لايتلاعب المستخدم في وقت وتاريخ الجهاز

ولاكن لي استفسار 

المقصود  ب اسم المستخدم 

وكلمة السر 

الي هما خاصين ب SQl

ولا ايه

 

قام بنشر (معدل)

استاذي الفاضل jjafferr لوتكرمت تظبط لي الكود علي الفورم انا وضعت الكود والبيانات المطلوبه 

ولاكن في اي مكان اضع اسم الحقل الذي يستدعي فيه  الوقت

TEST.mdb

تم تعديل بواسطه حسين العربى
قام بنشر

وعليكم السلام 🙂 

 

قمت بتغيير الكود ليناسب اسم الحقل 🙂

 

ولكن ومثل ما اخبرتك في آخر مشاركتي السابقة ، عملت جدول بإسم tbl_DateTime ، ونموذج يأخذ بياناته من الجدول ، ومن الجدول نأخذ وقت وتاريخ السيرفر ،

فرجاء حوّل هذا الجدول الى SQL Server (بحيث انه لا يكون جدول اكسس) ، و اربطه مع النموذج ، ورجاء اخبرنا بالنتيجة :

 

image.png.d79d5116b6110557af0c0036d3e6b41d.png

.

اما المقارنة ، فهي بدون الثواني.

 

جعفر

1250.Server_DateTime.mdb.zip

قام بنشر (معدل)

استاذي الفاضل جعر اسف جدا تعبتك معي التعديل علي الكود الذي ارسلته لك لايعمل معي

اما المثال الثاني الذي تفضلت به يعمل بس لا يحدث الوقت انا ضفت سجل وبقي عليه لاياتي بجديد 

ملوحظه في جدول SQL  لابد من اضافة سجل لعطيك تاريخ وقت جديد ليس مثل الاكسس يظهر لك تحت السجل تاريخ وقت جديد 

تم تعديل بواسطه حسين العربى
قام بنشر
4 ساعات مضت, حسين العربى said:

التعديل علي الكود الذي ارسلته لك لايعمل معي

رحم الله إمرء عرف قدر نفسه 🙂 

فأنا لا علم لي بأوامر SQL Server ، وحاولت ، لهذا السبب اخبرتك بأني :

في ٢٦‏/٨‏/٢٠٢٠ at 23:45, jjafferr said:

بعد البحث ، وجدت الطريقة ، ووضعتها في نموذج جديد

.

لذا انصحك ان تستجدم كود اخي @صالح حمادي ، ويكون هكذا بمعلوماتك ،

مع مراعاة ان تكون

Dim str_conn As New ADODB.Connection
Dim RS As New ADODB.Recordset

str_conn.Open "Provider=SQLOLEDB;Integrated Security=SSPI;Initial Catalog=master;Data Source=\\128.122.1.130"

Set RS = str_conn.Execute("select GETDATE()")

'MsgBox RS(0)
  Me.srvr_Date_Time = RS(0)

Set RS = Nothing
str_conn.Close

 

او نمشي في طريق اكسس :

4 ساعات مضت, حسين العربى said:

بس لا يحدث الوقت انا ضفت سجل وبقي عليه لاياتي بجديد 

ملوحظه في جدول SQL  لابد من اضافة سجل لعطيك تاريخ وقت جديد

 

جرب هذا الكود ، فهو يقوم بإضافة سجل ، ثم يقوم بالمقارنة :

Private Sub Form_Load()

    'Me.iCompare = IIf(Format([Server_Time], "dddd, dd-mm-yyyy, hh:nn AM/PM") = Format([Local_Time], "dddd, dd-mm-yyyy, hh:nn AM/PM"), "OK", "Not OK")
    
    DoCmd.GoToRecord , , acNewRec
    Me.Temp = Now()
    
    If Format([Server_Time], "dddd, dd-mm-yyyy, hh:nn AM/PM") = Format([Local_Time], "dddd, dd-mm-yyyy, hh:nn AM/PM") Then
        
        Me.iCompare = "OK"
        Me.iCompare.ForeColor = vbBlack
        
    Else
        
        Me.iCompare = "Not OK"
        Me.iCompare.ForeColor = vbRed
        
    End If
        
End Sub

 

جعفر

قام بنشر

السلام عليكم

معذرة لتأخري لأنني صرت أعمل في المزرعة عوضا عن أبي المريض في هذه الأيام. الله يشفيه.

أخي حسين الكود الأول الذي تقدم به أستاذنا جعفر و كذلك الذي تقدمت به أنا يقومان بالواجب.

فكل ما عليك هو إضافة كود استخراج تاريخ الجهاز ثم المقارنة بينهما

أما بالنسبة لشرح الأكواد فهو كالتالي:

في ٢٦‏/٨‏/٢٠٢٠ at 22:42, صالح حمادي said:

str_conn.Open "Provider=SQLOLEDB;Integrated Security=SSPI;Initial Catalog=master;Data Source=" & Me.Comp1

هذا الكود يقوم بفتح الإتصال مع sql server مع العلم أن master هي قاعدة بيانات النظام في sql server

في ٢٦‏/٨‏/٢٠٢٠ at 22:42, صالح حمادي said:

Set RS = str_conn.Execute("select GETDATE()")

هنا قمنا بتنفيذ إستعلام داخل السرفر و أسندنا النتيجة لمصدر السجلات RS

GETDATE() هو كود يقوم بجلب التاريخ الحالي في sql server و تستطيع كتابة العبارة التالية في sql server لترى النتيجة select GETDATE()

MsgBox RS(0)

هنا قمنا بعرض السجل الأول في المصدر RS مع العلم أن بها سجل واحد فقط

في ٢٦‏/٨‏/٢٠٢٠ at 22:42, صالح حمادي said:

str_conn.Close

هنا قمنا بإعلاق الإتصال مع SQL SERVER

  • Like 1
  • Thanks 1
قام بنشر

الف شكر استاذي الفاضل صالح حمادي وجزاك الله خيرا ولكل اساتذتي الفاضل الذين قامو بمساعدتي وانا توصلت الي حل بطريقه بسيطه جدا 

والف سلامة علي الوالد وشفاه الله وعفاه من كل شر 

قام بنشر

السلام عليكم

حياكم الله جميعا

كيف لى من الاستفاده من هذا الموضوع فى ملفى

لدى قاعدة بيانات سيكول سيرفر مرطبة بملف اكسيس

والوجهات موزعه على المستخدمين

جميع الشاشات فى الاكسيس بتاخد التاريخ من فورم واحد menu  والذى به مربع نص والقيمه الافتراضية له date()
وكل الفورمز بتجلب التاريخ من مربع النص هذا

فكيف لى اطب ما فعلتم من اكود لجعل مربع النص اللى فى فورم menu يقرأ من تاريخ السيرفر
ملحوظه استخدم استاتك اى بى فى البرنامج

قام بنشر
1 ساعه مضت, صالح حمادي said:

صرت أعمل في المزرعة عوضا عن أبي

الله ان شاء الله يقويك على هذا العمل ، ويعطي الوالد الصحة والعافية ، 

 

22 دقائق مضت, حسين العربى said:

وانا توصلت الي حل بطريقه بسيطه جدا

ياريت تتفضل علينا بهذا الحل 🙂 

 

جعفر

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information