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

أبو عبدالله الحلوانى

الخبراء
  • Posts

    1,727
  • تاريخ الانضمام

  • Days Won

    5

كل منشورات العضو أبو عبدالله الحلوانى

  1. السلام عليكم ورحمة الله وبركاته ليس بعد كلام أستاذنا جعفر كلام - ولكن أطرح فكرة أخري من وجهة نظري القاصرة أفظل أستخدام اسكربت يقوم بهذه المهمة بسبب: أولا- حجمه الصغير الذي يكاد يكون معدوم ، ثانيا- لكونه لا يحتاج لاعدادات اضافية لتشغيله؛ بمعني لو قمت بتنفيذ هذا الكود من قاعدة بيانات علي قاعدة بيانات أخري كان لزاما أن يتم تخفيض الأمان لتعمل قاعدة البيانات الأولي أولا حتي تعمل. (خاصة اذا كان هذا الكود سيعمل علي جهاز العميل) ؛ وهذا الشئ غير موجود مع الاسكربت. وأخيرا- هذا هو الكود داخل الاسكربت يمكنك التعديل عليه وفقا لاحتياجاتك. Rem This is the beginning of the code: Call Createadbe Sub Createadbe() On Error Resume Next dim fso dim mePath Set fso = CreateObject("Scripting.FileSystemObject") mePath = fso.GetAbsolutePathName(".") Rem here we test if accde file is exist And delete it if it is exist Rem==================================================================== if fso.FileExists(mePath & "\Write Here Your accde file Name")= True then fso.DeleteFile mePath & "\Write Here Your accde file Name" end if Rem Here Test if our accdb file is Exist and get started Rem====================================================== If fso.FileExists(mePath & "\Write Here Your accdb file Name")= True then With Createobject("Access.Application") .AutomationSecurity = 1 .SysCmd 603, mePath & "\Write Here Your accdb file Name", mePath & "\Write Here Your accde file Name" .Quit End With MsgBox "Conversion Done Successfully!" fso.DeleteFile mePath & "\Write Here Your accdb file Name" Else msgbox "Conversion Not Done; Some file Not Exists!" End If Rem Now kill My silf: Rem================== if err.number <> 0 then with fso If .FileExists(mePath & "\Write Here Your accdb file Name") then .DeleteFile(mePath & "\Write Here Your accdb file Name") If .FileExists(mePath & "\Database.accdb") then .DeleteFile(mePath & "\Database.accdb") If .FileExists(mePath & "\Database.mdb") then .DeleteFile(mePath & "\Database.mdb") If .FileExists(mePath & "\ConversionAccdbToAccde.vbs") then .DeleteFile(mePath & "\ConversionAccdbToAccde.vbs") end with end if End sub اذا كنت لا تدري عن صناعة الاسكربت فهو ملف txt عداي تقوم بنسخ الكود بأعلاه مع تغير الجمل Write Here Your accdb file Name الي اسم الملف الخاص بحضرتك Write Here Your accde file Name الي اسم الملق الخاص بحضرتك ثم تقوم بحفظ الملف txt بصيغة vbs وفقط وانتهي الأمر لحظة ضع ملف الاسكربت مع الملف المراد تحويله في نفس الفولدر ثم قم بالضغط عليه مرتين وانظر ماذا يحدث ولا تنسي تأخذ نسخة احتياطية من ملف الاسكربت لأنه سيقوم بحذف نفسه بعد الانتهاء. هذا كل شىء مع تمنياتي بالتوفيق هذا هو الاسكربت ConversionAccdbToAccde.rar
  2. الحمد لله أولا وآخرا ليس هذا كل ما تم تعديله بالكود هل لاحظت كتابة الكود داخل Trim ولكن أين تمت الاجابة
  3. ما أري بين الأول والثاني فرق سوي أنك وضعت نسبة الخصم بجوار نسبة الربح انظر العملية الحسابية وفقا لما ذكرته لك بالمشاركة الأولي ستكون بهذا الشكل 3000 * (1+(0.4*0.25))=3300 6000* (1+(0.30*0.25))=6450 2000* (1+(0.10 *0.25))=2050 وبذلك يكون المجموع=11800 ولكن علي ما فهمت من كلام حضرتك أن الاشكالية الآن في حال ارتجاع صنف داخل فاتورة مستفيدة من خصم معين (اليس كذلك) بأي سعر سوف يتم ارتجاع هذا الصنف!! وفقا لتجربتي الشخصية ولربما لاساتذتي رأي آخر: 1- يتم خصم نسبة الخصم من اجمالي الفاتورة. 2- يتم تخزين نسبة الخصم بالفاتورة ضمن بيانات فاتورة البيع 3- عند ارتجاع الصنف يتم تحديد رقم الفاتورة التي سيتم منها ارتجاع الأصناف 4- اذا كان هناك نسبة خصم بالفاتورة يتم خصم نفس النسبة من سعر بيع الصنف وارتجاع باقي قيمة الصنف للعميل. يعني بمثال رقمي: الصنف1 قيمته الشرائية 3000 + 0.4 هامش ربح = قيمة البيعية للصنف = 4200 الصنف2 قيمته الشرائية 6000 + 0.3 هامش ربح = قيمة البيعية للصنف = 7800 اجمالي قيمة الفاتورة(رقم الفاتورة10101) هو 12000 لنفترض الأن انه تم منح العميل خصم 0.25 اذا صافي ما سيتم استلامه من العميل هو 9000 جنيه (أليس كذلك) لو افترضنا ان العميل قام بارجاع الصنف 1 من الفاتورة (10101) تري كم سنرد له!! في فاتورة الارتجاع رقم (20201) عن فاتورة بيع رقم (10101) يتم تسجيل قيمة الصنف 1 بقيمته البيعية 4200 - نسبة الخصم بفاتورة البيع 0.25 اذا صافي قيمة المبلغ المسترد هو 3150 وفقط هذا كل شئ الخلاصة: يجب أن يتم ربط فاتورة الارتجاع بفاتورة البيع عند ادخال البيانات.
  4. تفضل جرب هذا ووافنا بالنتائج الادارية - Copy.rar
  5. جرب هذا اذا ووافنا بالنتائج تجربة.rar
  6. ممكن مرفق للتوضيح فلا علاقة بين اختبار خلو الحقل من البيانات ونوع البيانات التي من المحتمل أن توضع به (سواء نص أو رقم) علي حسب فهمي أنك تريد أن تقول لو أن الحقل كذا أو الحقل كذا أو ... فارغ فاخبر المستخدم الرسالة كذا والا فافعل كذا أليس هذا هو مضمون الكود
  7. يبدو أن الكود معكوس فأعتقد أن التحديد قبل النسخ جرب هذا أولا: With Rst1 If .RecordCount <> 0 Then .MoveFirst objWorkbook.Sheets(shetNo).range("C5").Select objWorkbook.Sheets(shetNo).range("C5").CopyFromRecordset Rst1 End If End With أو أرفق المرفق النهائي بعدالتعديل للاتمكن من رؤية المشكلة تمنايتب بالتوفيق
  8. أخي أنا كتبت Text0 ,text1 أسماء وهمية لحقل النص الذي به مسار الشيت والذي لا أدي ماذا تسميه أنت وكذلك حقل اسم الشعبة والذي لا أدري ما اسمه لديك غير كلمتي Text0 ,text1 باسماء مربعات النص التي لديك أنت ملاحظة: يجب أن يكون حقل الشعبة رقم
  9. السلام عليكم الخطأ علي ما أعتقد هو في استخدام OR داخل دالة Trim فالأخيرة تتعامل مع نص ولا لايصلح معها العوامل المنطقية عدل الكود بهذا الشكل: If len(text0 & "") =0 OR len(text1 & "") =0 OR len(text3 & "") =0 Then عدل اسماء الـ Text الي ما تريد تمنايتي بالتوفيق أو ان كنت مصمما علي استخدام Trim فليكن بهذا الشكل If IsNull(Trim(text0)) OR IsNull(Trim(text1)) OR IsNull(Trim(text2)) Then رغم أني أري أن الكود الأول أقصر 😁
  10. اضافة الي ما تفضل به أستاذي الجليل لاحظت أن هناك خطأ بالجملة التي أشرت اليه حضرتك مختلف عن كود أستاذنا أبو خليل حيث أن الكود الأصلي مكتوب هكذا أما كود حضرتك هو I=dt2-dti. (لاحظ حرف الـ i بدل رقم 1) ربما كان هذا هو سبب الخظأ لديك
  11. مرحبا بك اخي أبي عبدالرحمن هل سيتم تصدير الشعب بشكل متتالي اليا أم أنك ستقوم بتصدير البيانات بعد تحديد الشعبة أولا مبدأيا سأفترض أنك ستقوم بتحديد الشعبة ثم تقوم بالضغط علي زر ترحيل البيانات. أولا - سنقوم باضافة البرمتر الجديد رقم الشيت في تعريف دالة التصدير بهذا الشكل Public Function barnaExcelFile(sXlsFile As String, ByVal ShabaNo as Integer) ثانيا - لا حظت أنك تصدر الشعبة 2 في شيت 4 وكذلك شعبة 3 في شيت 6 أي أن رقم الشيت المستهدف ضعف رقم الشعبة علي هذا سيكون التعديل داخل الكود بهذا الشكل: dim shetNo as Integer shetNo = ShabaNo*2 objWorkbook.Sheets(shetNo).range("B1").Value = "اسماء طلاب الصف " & "(" & [Forms]![FORM2]![text1] & ")" & " -- " & "(" & [Forms]![FORM2]![text2] & ")" & " المادة " & "(" & [Forms]![FORM2]![text3] & ")" & " معلم المادة / " & "(" & [Forms]![FORM2]![text4] & ")" With Rst1 If .RecordCount <> 0 Then .MoveFirst objWorkbook.Sheets(shetNo).range("C5").CopyFromRecordset Rst1 objWorkbook.Sheets(shetNo).range("C5").Select End If End With وعند مناداة دالة الترحيل لا تنسي تحديد بارمتر الشعبة الي اسم الحقل الذي ستختار منه الشعبة هكذا: Call barnaExcelFile(text0,text1) تمنايتي بالتوفيق
  12. وعليكم السلام ورحمة الله وبركاته أولا- لاختصار عملية الجمع والضرب لاستخراج ناتج الربح يمكنك اختصار العمليتين في هذه العملية (3000* 1.4 =4200) ثانيا- ان كنت تعني أنك تريد الخصم من ربح كل سلعة علي حدي يمكنك استخدام هذا (3000 * (1+(0.4*0.25))) = 3300 هذا علي قدر ما فهمت من السؤال ان كان طلبك غير هذا فرجاء تفضل علينا بمزيد من التوضيح
  13. بعد البحث عن سبب المشكلة التي ظهرت لدي وبعد تنبيهي من أخي أبي جودي هنا ظهر معي الخلل بهذا الكود المستخدم في فتح البرنامج With accessApp .Visible = True .UserControl = True .RunCommand acCmdAppMaximize DoCmd.RunCommand acCmdAppMaximize Set db = .DBEngine.OpenDatabase(strPathAppDB, False, False, ";PWD=" & strPasswordDB) .OpenCurrentDatabase strPathAppDB End With وقد قمت بتعديل الكود بهذا الشكل وانتهت المشكلة بفضل الله تعلي With accessApp .Visible = True .UserControl = True .RunCommand acCmdAppMaximize .OpenCurrentDatabase strPathAppDB, False, strPasswordDB End With وجزاكم الله عنا خيرا
  14. جزاكم الله عنا خيرا هل من شرح مبسط لها وطريقة استعمالها أيضا لعموم الفائدة فيكون قد تم الجمع بين الطريقتين في هذا الموضوع شكرا أبا جودي متميز دوما كالعادة فليس هذا عليكم بجديد
  15. أعلم أن الموضوع قديم ولكن فعلا لا أذكر أني رأيت سؤالك هذا إلا الآن!!! بعد أن جائتني رسالة علي البريد الالكتروني من الموقع بنشاط الموقع خلال الأيام الماضية. نعم ربما تم حل المشكل بالنسبة للسائل ولكن لتعم الفائدة ويصير الأمر أوضح بالنسبة لمبتدأ مثلي مر من هنا يوما اليك خطوات الوصول الي شاشة المراجع بالصور: هذا والله أعلم وله وحده الحمد والمنة
  16. جرب هذا لعله يكون موافق لمرادك ووافنا بالنتائج حضور وانصراف.accdb
  17. كان لأستاذنا @jjafferr كلمة مميزة لطالما أثرت بي حيث يقول: في اعتقادي ، مشاركة أكثر من شخص في الرد على السؤال ، يفتق الاذهان ويدمج التجارب ويبلور الافكار وفائدة للجميع ، فمنه نتعلم الطرق الاخرى للإجابة على السؤال. أخي أرجو أن يكون أجر ما كتبت في موازين حسناتك ولا تنسي أن ما عند الله أعظم أجرا فلا تبتئس. فلعل صاحب الموضوع كان منشغلا بالبحث عن الحل بأماكن أخري وكذلك أنا كنت منشغلا بامور أخري بالاضافة لوضع حل للموضوع ، فلم نلحظ حلك للموضوع عن غير قصد ولابد والا فقد وفرت علينا عناء البحث والرد والكتابة شكرا لك مجددا ونأسف لجعلك تحزن ولو قليلا - ابتسم فان الحياة قصيرة
  18. السلام عليكم ورحمة الله وبركاته الحمد لله وحده تم حل المشكلة وجدت هذا الكلام 2 Missing primary key or timestamp Make sure the SQL-Server table has a primary key as well as a timestamp column. The timestamp column helps Access to determine if the record has been edited since it was last selected. Access does this by inspecting all fields, if no timestamp is available. Maybe this does not work well with null entries if there is no timestamp column (see 3 Null bits issue). The timestamp actually stores a row version number and not a time. Don't forget to refresh the table link in access after adding a timestamp column, otherwise Access won't see it. (Note: Microsoft's Upsizing Wizard creates timestamp columns when converting Access tables to SQL-Server tables.) في هذا الرابط https://stackoverflow.com/questions/13993301/editing-record-issues-in-access-sql-write-conflict وخلاصة الموضوع أنه كان يجب وضع عمود يسمي الطابع الزمني بالجدول الموجود بالسرفر يبدو أن التحول الي الـ SQL server ليس بالأمر السهل كما كنت أتوقع - ربنا يستر علي اللي جاي 😀 🙃 - وأشكر جميع أساتذتي الأفاضل وجزاكم الله عني خيرا
  19. ياهلا ويا مرحبا بأخي وأستاذي وجعل الله أجر ما سطرتم وما تعبتم في موازين حسناتكم ومن باب الاعتراف بالحق أني أنا هنا طالب العلم بساحة أساتذتي الكرام الأفاضل وبعد أخي النموذج الذي به المشكلة لا يوجد به نموذج فرعي بل هو كما ذكرت بوصف المشكلة بالمشاركة الأولي هو نموذج مستمر فقط وكما ذكرت بالمشاركة الأخيرة أني تفاجأت عند تحويل مصدر الفورم من جدول السرفر الي جدول محلي أن المشكلة قد حلت فيبدو أن هناك مشكلة ما في تعامل السرفر مع النماذج المستمرة وجزاكم الله عنا خيرا أتعبتاكم كثيرا معي.
  20. نعم المشكلة كما هي والخطأ يظهر علي سطر كود العملية الحسابية تظهر رسالة تعارض الكتابة ملاحظة: قمت باستخلاص النموذج الذي به المشكلة والجدول والاستعلام المرتبط به بقاعدة فارغة لأرفقه بالموضوع ثم قمت بالتجربة فعمل الكود بدون أي مشاكل فهل هذا يعني أن المشكلة بالسرفر فقط !! آسف علي تعب حضرتك كنت أريد رفع مرفق ولكن الظاهر أني محتاج أرفع الجهاز كله 😀 🤔
  21. لا Recordset تستعمل الاستعلام ولكن يوجد Recordset داخل الزر تستعمل جدول آخر مختلف تماما عن مصدر بيانات النموذج ولا حتي مرتبط به نعم نفس المشكلة
  22. جزاكم الله عنا خيرا ولكن كما أسلفت سابقا أن النموذج واحد والزر الذي يتم من خلاله تعديل القيمة موجود علي نفس النموذج والكود المستخدم خلف الزر هو كود بسيط بهذا الشكل Me.EnzarKbl = Val(Nz(Me.EnzarKbl, 0)) + 1 فاعتقدت أنه لا يوجد جهات متعددة تعدل البيانات علي حسب ظني ولكن مصدر بيانات النموذج هو استعلام فهل يعتقد الأكسس أن الاستعلام داخل النموذج جهة والنموذج الذي يحوي الاستعلام جهة أخري!! سأطلع علي الموضوع الذي أشرتم اليه وأوافيكم بالنتائج ان شاء الله
×
×
  • اضف...

Important Information