اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

Foksh

أوفيسنا
  • Posts

    4307
  • تاريخ الانضمام

  • Days Won

    181

Foksh last won the day on ديسمبر 3

Foksh had the most liked content!

السمعه بالموقع

2421 Excellent

عن العضو Foksh

  • تاريخ الميلاد 07/02/1982

البيانات الشخصية

  • Gender (Ar)
    ذكر
  • Job Title
    فني صيانة موبايل وكمبيوتر
  • البلد
    الأردن ♥
  • الإهتمامات
    برمجة وصيانة الموبايل والكمبيوتر

اخر الزوار

9666 زياره للملف الشخصي
  1. دعنا نناقش الجوهر فقط . ففي النقطة السابقة المقتبسة ، إن كان خط سيرك بإضافة تاريخ داخل الأكواد ، فهي فعلاً معضلة وقد يكون الشخص الذي حمل النسخة بعد 25 يوم قد بقي لديه 5 أيام ( على افتراض ان النسخة التجريبية 30 يوم من تاريخ مدرج في الأكواد . لكن !!!! إن كانت المدة 30 يوم من تاريخ التشغيل الأول فهنا سيكون لكل مستخدم 30 يوماً كاملةً . وبالتالي ستستغني عن هذه العبارة التالية :- ستدخل في متاهة أن التفعيل هو للنسخة التجريبية أو للنسخة المفعلة الكاملة ( سنة على سبيل المثال ) ؟؟؟؟ بالتالي سيكون في ملف التفعيل المدمج أو الجدول رقمي تفعيل الأول للتجريبية والثاني عند التفعيل الكامل . ( إذا كان ما فهمته صحيحاً 😅 ) . تطرقنا سابقاً مع الأستاذ @ابو جودي في تجارب بهذا الخصوص ( فكرة التمديد ) . فلنفترض أنني كعميل أعجبني عملك ومشروعك ويخدمني بكل تفاصيله وقد اشتريت أو تم التفعيل لمدة 3 اشهر بعد الفترة التجريبية . وأردت قبل انقضاء مدة الـ 3 شهور هذه أن أقوم بتجديد الإشتراك مدة 3 شهور أخرى ، كتحليل :- الـ 3 شهور الأولى تنتهي بتاريخ 31-01-2026 ، وانا طلبت منك بتاريخ 10-01-2026 كود تفعيل لـ 3 شهور أخرى . أي سينتهي اشتراكي بتاريخ 30-04-2026 ( إن صحت حساباتي ) فهل التاريخ صحيح أم سيتم احتساب التمديد والتجديد من 10-01-2026 !!!!!! عادةً أفكر عند هذا العمل بأن يكون هناك معامل لعدد أيام التشغيل ( الفرق بين أول تشغيل أو تفعيل وتاريخ اليوم ، بحيث يكون العدد كأيام مطابق لفترة الإشتراك ) . وهنا ستكون الحاجة لأن يكون إجمالي عدد أيام منذ التفعيل الأول إلى نهاية الإشتراك = هذا العدد . أي ان في المثال السابق سيكون مجموع أيام الإشتراك أو تفعيل البرنامج = 90 يوماً وليس 70 يوماً . هذه الجزئية تعود لك كمبرمج ولآلية عملك التي تفضلها . ولكن انظر لها مستقبلاً . أفضّل بالنسبة لي أن يكون النموذج الخاص بالتمديد أو التفعيل هو نفسه الوحيد . وليس له داعي لتفعيل النسخة التجريبية . فيكفي أن يظهر لأول مرة للمستخدم أن البرنامج نسخة تجريبية مدتها 30 يوماً كرسالة . وسيكون هناك زر خاص بالتفعيل يفتح النموذج الوحيد هذا . ستختلف الأفكار وتترامى بين هنا وهناك ( وهذا ما وقعت فيه سابقاً ) وما دعاني لتجربة التفعيل الهوائي . فوجدت أنه محكم جداً إلى حد ما . ولا مانع لدي من مشاركتك الفكرة مفتوحة المصدر وشرحها إن تطلب الأمر 🤗 .
  2. تمام يا صديقي ، للنظر في السطر حال وصولي للكمبيوتر .
  3. وعليكم السلام ورحمة الله وبركاته .. وكما هو الحالي في جميع المواضيع التي طُرحت وتحدثت بهذا الخصوص ، وكان لكثير من الخبراء والمعلمين والأساتذة مشاركة - وأنت معلمي أحد أبرز هذه الشخصيات - حول أساليب وطرق تنفيذ هذه الخطوة في مشاريعهم التي تتعلق بقواعد بيانات آكسيس أو حتى بأي برنامج بلغة آخرى . وتلخصت جميع الحوارات على عدة نقاط وركائز أساسية منها باختصار :- طبيعة البصمة التي سيتم توليدها لكل جهاز ، وضمان عدم تكرارها عند عميل آخر . وطبعاً ستعتمد وكما هو معروف على عدة عوامل ومكونات لجهاز الكمبيوتر نفسه الذي سيعمل عليه البرنامج . رغم التحديات التي قد تواجه المطور ( المبرمج ) من حيث ، ماذا لو اختلفت قيمة أحد هذه العوامل التي يتكون منها معرف أو بصمة العميل ؟ لذا من الجيد والمهم إيجاد طريق مرن للتعامل مع هذه النقطة ( سبق أن تعاملت معها باعتماد 3 قيم من أصل 4 ) . فكرة النسخة التجريبية والتي كما ذكرتم أعلاه ، أن لها عدة أوجه للتعامل معها . حيث إما نسخة تعمل فقط لمدة محددة غير قابلة للتفعيل ( واجهة المشروع بدون الجداول حتماً ) ولاحظ أن ما بين قوسين سيكون بمثابة ثغرة وفجوة كبيرة . وإما أن تكون النسخة نفسها ذات المدة المحددة وبعد انتهائها تطلب من العميل التفعيل من خلال عدم عملها ؛ مع الأخذ بعين الإعتبار تلك الثغرات وعدم أخذ الحيطة لجميع الإحتمالات والسيناريوهات التي قد تحدث ، أو الأخذ بعين الإعتبار التلاعب بالتاريخ ( بما أن التفعيل والنسخة لا تعتمد على اتصال الإنترنت لضمان التاريخ الحقيقي عند تشغيل النسخة لأول مرة ... أو لاحقاً ) . عن تجربتي الشخصية وحيث أنني لا أشجع على أن تكون بصمة أو معرف العميل ظاهراً له ( قهراً وعناداً بأخصائيي الهندسة العكسية ) ، فقد توجهت لتنفيذ التفعيل من خلال الانترنت حصراً ؛ حالي كحال الشركات الكبيرة التي تعتمد على الإنترنت عند التفعيل . وهذا يجعل العميل محصوراً في خانة اليَّك أن برنامجه قد تفعل وأن مدة ونوع التفعيل ظاهراً له فقط لا غير بدون الكشف عن أي رقم يعرف عن جهازه . وهنا قد يكون وكما ذكرتم أن من حقه الحصول على مفتاح التفعيل الخاص بجهازه والإحتفاظ به بين يديه لاستعماله متى أراد . الإحتفاظ ببيانات التفعيل أو معلومات عن التفعيل داخل الجداول فقط قد تكون قابلة للحصول عليها أو الحقن أو غيرها من محاولات الإختراق . ليس المقصود أننا نتعامل مع بيانات آكسيس وليس معلومات عن البيت الأخضر أو الأبيض أو أي لون كان 😁 . ولكن بما أننا نتحدث عن الحماية فيجب الإلمام بجميع النواحي ( إلى حد ما ) . من المهم برأيي المتواضع إعلام المستخدم أن هذه النسخة تجريبية ومدتها س يوم . أو حتى على الأقل أن لا يتفاجئ المستخدم بأن النسخة التي تم تفعيلها لمدة عام مثلاً قد انتهت فجأة دون إشعاره بانتهاء مدة التفعيل . فيجب وضع إشعار قبل 15 يوم مثلاً من اقتراب انتهاء التفعيل . أما النسخة التجريبية فجيد أن يكون الإشعار ظاهراً دائماً في الواجهة الرئيسية . هذا ملخص ما خطر ببالي من أفكار قد تطرقتم لبعضها فيما سبق ، و وجهات النظر لا بد من أن تلتقي يوما ما . أما بخصوص الأسئلة التي طرحتها فمن خلال تجاربي وجدت أن التفعيل الـ Offline غير آمن وغير مجدي وغير مستقر . لذا توجهت إلى التفعيل الـ Online .
  4. أخي بشار ، هذه محاولة بعدما حاولت فهم آلية العمل رغم توضيحاتك لي سابقاً بالفيديو 😅 تفضل جربه وأخبرني بالنتيجة Bashar_Jo.zip
  5. الملف المرفق يطلب كلمة مرور لقاعدة البيانات
  6. وعليكم السلام ورحمة الله وبركاته.. أعتقد أن الموضوعين المشار إليهما قد مضى عليهما تقريباً 10 سنوات ، وأصبحت قديمة وذات عبئ على سيرفر المنتدى . لذا لا مانع من فتح موضوع جديد مستقل تطرح فيه مشكلتك وبإذن الله ستجد الحلول الجديدة. إلا إذا كان لإدارة المنتدى رأي آخر 😇 .
  7. وعليكم السلام ورحمة الله وبركاته هل قمت بتغيير تنسيق الخلية ؟؟ اضغط بزر الفأرة الأيمن على الخلية التي تحتوي التاريخ . ثم اختر تنسيق الخلايا (Format Cells) . ثم من التبويب Number اختر Cust ، وبعدها السطر الذي تفضل به الأستاذ @بن علية حاجي .
  8. وعليكم السلام ورحمة الله وبركاته .. أخي بلال أنت عضو فضي ( نتمنى لك المزيد من الدرجات ) ، وما زلت - متأسفاً منك - لا تهتم لأي ملاحظات يتم طرحها خلال المشاركات أو قوانين المنتدى . العنوان :- نكتشف أن مقصده ومعناه مختلف عما تريده أنت . الشرح :- تبخل على أخوانك في المنتدى بالشرح وتكتفي بكلمات لا تتعدى أصابع اليد . إرفاق ملف :- برأيك هل الصورة و 8 كلمات كافيات لتوصيل ما تفكر به لمن يقرأ الموضوع دون ارفاق ملف !!! شكراً لك على رحابة صدرك مراراً وتكراراً في تقبل الملاحظات التي ليس لها هدف إلا أن تحظى بطريق سليم لتوصيل معلومتك
  9. كفكرة خطرت ببالي وقد حدثتها الى ما يلي :- أن تكون الدالة عامة شاملة ويمكن استخدامها في أكثر من موضع أو جدول أو حقل أو سجل أو حتى عدد مرفقات . بحيث جعلتها تقبل استقبال اسم الجدول ، واسم حقل المرفقات ، واسم حقل لتحديد السجل ، ومربع النص = تحديد اي سجل ، ورقم المرفق لو كان الحقل متعدد المرفقات . فآكسيس يتعامل مع أول مرفق كقيمة تسلسلية = 0 ( كما هو الحال في الأعمدة داخل الكومبوبوكس مثلاً أو الليست بوكس ) . لذا حدّثتها لتكون بهذا الشكل :- Public Sub OpenSpecificAttachment(ByVal TableName As String, _ ByVal AttachmentField As String, _ ByVal PKFieldName As String, _ ByVal RecordID As Long, _ Optional ByVal AttachmentIndex As Integer = 0) Dim rs As DAO.Recordset Dim rst As DAO.Recordset2 Dim filePath As String Dim cachePath As String Dim subFolder As String cachePath = Environ("LOCALAPPDATA") & "\Microsoft\Windows\INetCache\" Randomize subFolder = "Foksh" & Int((9999 * Rnd) + 1) If Dir(cachePath & subFolder, vbDirectory) = "" Then MkDir cachePath & subFolder CreatedFolders.Add cachePath & subFolder End If Set rs = CurrentDb.OpenRecordset("SELECT " & AttachmentField & " FROM " & TableName & _ " WHERE " & PKFieldName & "=" & RecordID) Set rst = rs.Fields(AttachmentField).Value If AttachmentIndex > 0 Then rst.Move AttachmentIndex Else rst.MoveFirst End If If Not rst.EOF Then filePath = cachePath & subFolder & "\" & rst.Fields("FileName").Value If Dir(filePath) = "" Then rst.Fields("FileData").SaveToFile filePath End If FollowHyperlink filePath End If rst.Close: Set rst = Nothing rs.Close: Set rs = Nothing End Sub بحيث تم تمرير باراميتر افتراضي القيمة للمرفق الأول لسهولة الإستدعاء ، حيث سيكون الإستدعاء متعدد الأشكال كما يلي :- Call OpenSpecificAttachment("tblEnDc", "progIcon", "ID", Me.ID) 'المرفق الأول أو الوحيد Call OpenSpecificAttachment("tblEnDc", "progIcon", "ID", Me.ID, 0) ' المرفق الأول أو الوحيد أيضاً Call OpenSpecificAttachment("tblEnDc", "progIcon", "ID", Me.ID, 1) ' المرفق الثاني اذا كان عدد المرفقات أكثر من واحد Call OpenSpecificAttachment("tblEnDc", "progIcon", "ID", Me.ID, 2) ' المرفق الثالث اذا كان عدد المرفقات أكثر من واحد وعند الخروج من النموذج ، ولحذف المجلد بشكل آمن ، قمت بجعل الدالة التي تفتح المرفق تقوم بتسجيل اسم المجلد الذي أنشأته في قائمة ( Collection ) . وعند إغلاق النموذج ، تمر على هذه القائمة فقط وتحذف المجلدات التي أنشأناها عند استعراض المرفقات . حيث تم تعريف المتغير التالي في أول المديول :- Public CreatedFolders As New Collection وإضافة الدالة التالية التي تقوم على حذف المجلد بما يحتويه :- Public Sub SafeDeleteFolder(ByVal folderPath As String) Dim f As String On Error Resume Next f = Dir(folderPath & "\*.*", vbNormal) Do While f <> "" Kill folderPath & "\" & f f = Dir Loop RmDir folderPath End Sub وبالتالي عند إغلاق النموذج ، تم استخدام الكود التالي لتمرير الحذف للمجلدات :- Private Sub Form_Close() Dim folderPath As Variant On Error Resume Next For Each folderPath In CreatedFolders Call SafeDeleteFolder(folderPath) Next Set CreatedFolders = Nothing End Sub ليصبح المرفق كالتالي كاملاً متكاملاً :- DbTest.zip
  10. وعليكم السلام ورحمة الله وبركاته .. فقط وضح لنا أخي بشار عن آلية إضافة السجلات في النموذج enar_dman حتى نتتبع الخلل .
  11. اخي الكريم ، وعليكم السلام ورحمة الله وبركاته ... ارجو منك الإهتمام بتنسيق موضوعك ليسهل قراءته لمن يمر به ويحاول مساعدتك .. المطلوب غير واضح حتى من خلال الصور. ثم انك تستخدم مسميات عربية + من عدة مقاطع ..... إلخ ، وهذا لا يشجع البعض على المساهمة في المساعدة ، لأن التعامل مع المسميات العربية للعناصر والمكونات له تبعات مزعجة ومتعبة في الحلول . شكراً لك
  12. انظر الصورة المرفقة للتأكد . لذالك ، وتحقيقاً لنفس الفكرة من زر Open .. استخدمت الدالة التالية :- Public Sub OpenAttachmentFile(ByVal RecordID As Long, Optional ByVal PKFieldName As String = "ID") Dim rs As DAO.Recordset Dim rst As DAO.Recordset2 Dim filePath As String Dim cachePath As String Dim subFolder As String cachePath = Environ("LOCALAPPDATA") & "\Microsoft\Windows\INetCache\" Randomize subFolder = "ACC" & Int((9999 * Rnd) + 1) If Dir(cachePath & subFolder, vbDirectory) = "" Then MkDir cachePath & subFolder End If Set rs = CurrentDb.OpenRecordset("SELECT progIcon FROM tblEnDc WHERE " & PKFieldName & "=" & RecordID) Set rst = rs.Fields("progIcon").Value If Not rst.EOF Then filePath = cachePath & subFolder & "\" & rst.Fields("FileName").Value If Dir(filePath) = "" Then rst.Fields("FileData").SaveToFile filePath End If FollowHyperlink filePath End If rst.Close: Set rst = Nothing rs.Close: Set rs = Nothing End Sub واستدعيها حسب رقم السجل من خلال الزر كما يلي :- Call OpenAttachmentFile(Me.ID) طبعاً اسم المجلد عشوائي لمحاكاة نفس اسلوب آكسيس في السطر subFolder = "ACC" & Int((9999 * Rnd) + 1)
  13. طبعاً المجلد ACC9BE9 هو مجلد عشوائي
  14. اعتذر عن مقاطعتك ومخالفتك الرأي .. فآكسيس يستخدم المسار التالي في مربع حوار المرفقات عند النقر على الزر Open C:\Users\Foksh\AppData\Local\Microsoft\Windows\INetCache\ACC9BE9 المسار من جهازي الشخصي باستبدال اسم المستخدم Foksh في جهازك للتجربة
  15. متابع عن بعد 😊 لأن ما يفعله آكسيس هو استخراج المرفق إلى مجلد Temp ثم فتحه باستخدام :- FollowHyperlink filePath
×
×
  • اضف...

Important Information