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

jjafferr

أوفيسنا
  • Posts

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

  • تاريخ اخر زياره

  • Days Won

    404

كل منشورات العضو jjafferr

  1. انا لا اعرف الشركة ، ولكن بما ان خبير أكسس مثل Allen Brown قام بتزكيتهم في موقعه وموقعهم ، فهذا الضمان الذي اعتمد عليه وهذا البرنامج غير متوفر في السوق حسب علمي ، فالشركة قامت بعمل برنامج تحويل MDE الى MDB والمتوفر في السوق ، ولكن بدون استخراج الكود ، والظاهر انهم لما نجحوا في الحصول على الكود كذلك ، فأوقفوا بيع البرنامج ، وجعلوا هذا التحويل بمقابل 450$ للبرنامج جعفر
  2. السلام عليكم بالاضافة الى طريقة اخي شفان ، هناك طريقتين بحثت عنهم: 1. https://msdn.microsoft.com/en-us/library/aa211469(v=office.11).aspx 2. كما في المرفق نستعمل الوحدة النمطية من الرابط التالي: http://access.mvps.org/access/api/api0068.htm والتي تمسك مفتاح الشفت برمجيا ، ومنه لا يعمل الماكرو Autoexec جعفر 609.zip
  3. للعلم اذا اردت ان تنادي عضو لموضوعك ، فهناك طريقة لإرسال تنبيه له ، هكذا: اكتب @ وبعدها اكتب الاسم مباشرة ، واذا اردت التنبيه لأكثر من عضو ، فاترك مسافة بينهم مثلا ، سأرسل تنبيه اليك والى اخي أوس واخونا العود ابوخليل: @Shivan Rekany @sandanet @ابو خليل
  4. كسر حماية الوحدة النمطية متوفر، والقصد من commercial معناه بأنهم يقومون بالعمل بأجر مادي شو المشكلة اخي الو عبدالله !! الموضوع ليس بجديد وصار له سنين ، والحمدلله ، مافي شئ من برامجنا تأثر واللي يريد يسرق ، يحصل له الف طريقة !! جعفر
  5. بالعكس اخي أوس ، انا اتعمد فك الكود الى اسطر بالتفصيل ، حتى يكون الكود سهل الفهم (بس الظاهر جبت اسمي وقصدك @رمهان بكوده المختزل) واليك شرح الكود: Dim rst1 As DAO.Recordset Dim rst2 As DAO.Recordset نحتفظ ببيانات الجدول1 في هذا المتغير#1 في ذاكرة الكمبيوتر المؤقته Set rst1 = CurrentDb.OpenRecordset("Select * From tbl1") بينما نحتفظ ببيانات الجدول2 في هذا المتغير #2 في ذاكرة الكمبيوتر المؤقته Set rst2 = CurrentDb.OpenRecordset("Select * From tbl2") من الآن ، تقريبا كل شغلنا على #1 ، حيث سنقرأ سجلات الجدول جميعها ، ثم نقارن حقلي الاسم والشهادة فاذا وجدنا القيم متساوية في #2 ، فاننا نحذف سجل #2 علشان نبدأ من اول سجل ، يجب ان نذهب الى آخر سجل ، ثم نرجع لأول سجل rst1.MoveLast: rst1.MoveFirst الآن نستطيع حساب عدد السجلات الموجودة في #1 RC1 = rst1.RecordCount الآن سنقرأ جميع سجلات #1 For i = 1 To RC1 اسم حقل الاسم يختلف في الجدولين ، فانتبه له ، بينما اسم الشهادة هو نفسه بين الجدولين لذا الذي نعمله هنا هو اننا نقارن حقلي الاسم والشهادة في السجل في #1 ، ونختبر وجودهما في الجدول #2 rst2.FindFirst "[degree]='" & rst1!degree & "' And [names]='" & rst1!fullnames & "'" اذا "عدم المطابقه" خطأ ، معناه انه في مطابقة بين الحقلين في هذا السجل ونستخدم هذه الطريقة ، لأنها الاسهل If rst2.NoMatch = False Then اذن ، احذف هذا السجل من #2 rst2.Delete End If انتقل الى السجل التالي في الجدول #1 rst1.MoveNext Next i هذه الجزئية جدا مهمة ، لأننا جعلنا الجدولين في ذاكرة الكمبيوتر المؤقته ولكي نُخلي الذاكرة ، يجب عمل التالي rst1.Close: Set rst1 = Nothing rst2.Close: Set rst2 = Nothing جعفر
  6. تفضل: http://www.everythingaccess.com/mdeconversion_example.htm وسترى: Original source code Reverse engineered source code وفي الرابط التالي ، اسمهم مذكور من شخص ثقة ، Allen Browne http://allenbrowne.com/links.html جعفر
  7. وبدون تعليق : http://www.pruittfamily.com/paul/MDE2MDB.htm http://www.everythingaccess.com/mdeconversion.asp جعفر
  8. وعليكم السلام أخي أبو الآء الظاهر الحياة اخذتك بعيدا عن الاكسس جعفر
  9. اخي شفان هل تستعمل الاكسس 2016؟ وهل عملت القفل على الاكسس 2016؟ جعفر
  10. يعني لما تمسك الشفت وتفتح البرنامج ، هل تستطيع ان ترى الجداول وبقية الكائنات؟ جعفر
  11. السلام عليكم أخي ابوجاسم ، اعتقد فيه عدم فهم للموضوع!! لما اباجودى قال: 1 و 2 لحل مشكلة ماقبل التحويل ، ولم يصل للنتقطة 3 بعد !! بالنسبة للنقاط 1 و 2 ، فانت تؤكد على عمل البرنامج بطريقة صحيحة: ولكن اباجودى لم يعمل النقطة رقم 3 بعد ، لذلك تقدر تعمل اللي قلت عنه لوسمحت اباجودى ، اكمل مشوار الخطوة 3 ، والتي ستكون قفل الشفت ، وتسليم المرفق بصيغة accde جعفر
  12. حياك الله اخوي شفان وملاحظتك كانت في مكانها لهذا السبب ، انا اقول : انت وضعت مشاركتك قبل ان ترى ردي الاخير والذي وضعت فيه الكود ، والكود موجود فيه جعفر
  13. اها ، لم التفت للشرط الاول اذن الاستعلام سيكون: . والكود سيصبح: Dim rst1 As DAO.Recordset Dim rst2 As DAO.Recordset Set rst1 = CurrentDb.OpenRecordset("Select * From tbl1") Set rst2 = CurrentDb.OpenRecordset("Select * From tbl2") rst1.MoveLast: rst1.MoveFirst RC1 = rst1.RecordCount For i = 1 To RC1 rst2.FindFirst "[degree]='" & rst1!degree & "' And [names]='" & rst1!fullnames & "'" If rst2.NoMatch = False Then rst2.Delete End If rst1.MoveNext Next i rst1.Close: Set rst1 = Nothing rst2.Close: Set rst2 = Nothing جعفر
  14. وعليكم السلام اخي شفان الرابط بين الجدولين معناه ان Degree يجب ان تكون متساوية بين الجدولين ، فيعرض النتائج تلك فقط واليك طريقة اخرى بالكود ، وبنفس النتائج: Dim rst1 As DAO.Recordset Dim rst2 As DAO.Recordset Set rst1 = CurrentDb.OpenRecordset("Select * From tbl1") Set rst2 = CurrentDb.OpenRecordset("Select * From tbl2") rst1.MoveLast: rst1.MoveFirst RC1 = rst1.RecordCount For i = 1 To RC1 rst2.FindFirst "[degree]='" & rst1!degree & "'" If rst2.NoMatch = False Then rst2.Delete End If rst1.MoveNext Next i rst1.Close: Set rst1 = Nothing rst2.Close: Set rst2 = Nothing جعفر
  15. السلام عليكم ثلاثة من عمالقة الموقع تدخلوا في هذا الموضوع ، ولم يتم الوصول الى حل شو يا شباب ، الهمّه الهمّه يا شباب والا يعني تريدون الشباب الكبار (ما بقول الشياب) يتدخلون جعفر
  16. وعليكم السلام أخي ابوجاسم ، ماشاءالله عليك انت في مشاركتك الـ 204 . لقد فتحت 4 مواضيع بمسميات مختلفة لنفس السؤال !!! لماذا ؟ انت تعرف انك تستطيع ان "تعدل" الموضوع (بما فيها اسم الموضوع ومكوناته) ، بعد وضعك الموضوع ، وقبل ان يضع احد رد عليك. وهذا الجزء من المنتدى ، منتدى الاكسس موجود لكي نتبادل الخبرات ، ونساعد بعض ، اما ان يساعدك احد على الخاص ، فالرجاء وضع مثل هذا الطلب في إعلانات شخصية للاعضاء بمقابل مادي بالاضافة الى انه عندك موضوع مفتوح نشط هنا: يُقفل. جعفر
  17. وعليكم السلام الطريقة الصحيحة انك تعمله في النموذج ، هكذا جعفر
  18. السلام عليكم الحمدلله في الكثير من الاحيان ، يحتاج صاحب السؤال الى الامساك بطرف الخيط ، ويُكمل المشوار ، وهذا ما حصل هنا انا توقفت لثلاثة اسباب: 1. وجود خبير محترف ومتخصص ، الاستاذ رمهان ، وفي انتظار مرفق فيه جميع ما توصل اليه ، 2. كنت على ثقة ان أخي أوس (وكم مرة ناديتك أنس وانت ساكت عني ، شكرا) سيستفيد من عمل الاستاذ رمهان وعملي وسيخطو للخطوة التالية ، 3. وكان يجب ان ابدأ من المرفق الاصل من اول وجديد ، للوصول الى مجموعة الشروط التي اعطانا إياها اخي أوس ، فلم تكن الفكرة في البداية تشتمل على كل هذه الشروط (حسب فهمي حينها) جعفر
  19. السلام عليكم اخي كريمو يجب اولا ان نصل الى الحل الصحيح ، ومنها نعمل المعادله / المعادلات ، في المرفق ملف اكسل ، وفيه حساب يدوي لكل يوم من تاريخ التوظيف ، لموظفين اثنين ، رجاء التدقيق على العمل ، واذا كانت النتائج صحيحة ، فعليه ان شاء الله نقوم بترجمة الخطوات الى معادلات في الاكسس جعفر 600.xlsx.zip
  20. وعليكم السلام مع تعديل أخي صالح ، استعمل الكود في الحدث "قبل التحديث" جعفر
  21. تم حذف المرفق بناء على طلب صاحب الموضوع جعفر
  22. موضوع المقارنه انتهينا منه ، وطبعا هناك الطريقة التي تفضلت انت بها ، ولكن المشكلة كانت في تطويع الكود ولف ذراعه لعمل اللي نريده والحمدلله تم ذلك جعفر
  23. السلام عليكم هذه النسخة: ستفحص الجداول الخلفية في BE ، واذا كانت تختلف من عن جداول برنامج الواجهة FE (اذا اي من الجداول غير موجود ، او قيمة الرقم 12 غير موجود في جدول tblMonths) ، فسيخبرك بذلك ، وهذا هو الكود حاليا: Option Compare Database Option Explicit Function AreLinkedDBs() On Error GoTo MyErr Dim IsThereDBs As Long IsThereDBs = Nz(DCount("[DBID]", "BackDBs"), 0) If IsThereDBs = 0 Then DoCmd.OpenForm "LinkDBsMain" Exit Function End If Dim NoDBSCount As Long If IsThereDBs <> 0 Then CodeDb.Execute "UPDATE BackDBs SET BackDBs.[Found] = IIf(CheckFile(BackDBs.[DBPathANDName])=1,True,False);" NoDBSCount = Nz(DCount("[DBID]", "BackDBs", "[Found]=False"), 0) If NoDBSCount = 0 Then DoCmd.OpenForm "Background" Else: DoCmd.OpenForm "LinkDBsMain" Exit Function End If MyErr: If Err.Number <> 0 Then MsgBox Err.Number & " - " & Err.Description End If End Function Function AutoLink() On Error GoTo MyErr ' حذف الجداول المرتبطة الموجودة بقاعدة البيانات الامامية أي الحالية Dim FrontObj As AccessObject, FrontDB As Object Set FrontDB = Application.CurrentData For Each FrontObj In FrontDB.AllTables If left(FrontObj.NAME, 4) <> "MSys" And FrontObj.NAME <> "BackDBs" Then DoCmd.DeleteObject acTable, FrontObj.NAME End If Next FrontObj ' إعادة ربط الجداول مرة أخرى Dim MinDBID As Long, MaxDBID As Long, i As Long Dim BackObj As TableDef, BackDB As Database, BackFile As String, PW As String, PWD As String MinDBID = Nz(DMin("[DBID]", "BackDBs"), 0) MaxDBID = Nz(DMax("[DBID]", "BackDBs"), 0) For i = MinDBID To MaxDBID BackFile = Nz(DLookup("[DBPathANDName]", "BackDBs", "[DBID]=" & i), Null) PW = Nz(DLookup("[MyPass]", "BackDBs", "[DBID]=" & i), "") PWD = ";" & "PWD" & "=" & PW Set BackDB = DBEngine.Workspaces(0).OpenDatabase(BackFile, True, False, PWD) For Each BackObj In BackDB.TableDefs If left(BackObj.NAME, 4) <> "MSys" Then DoCmd.TransferDatabase acLink, "Microsoft Access", BackFile, acTable, BackObj.NAME, BackObj.NAME End If Next BackObj Next i Set FrontDB = Nothing Set BackDB = Nothing ' هنا ، نكتب اسم النموذج الخاص بالشاشة الافتتاحية ' اذا لم تكن ترغب في ان يتم فتح نموذج ما ، بعد عملية ربط الجداول ، امسح السطر التالي 'j DoCmd.OpenForm "Background" DoCmd.OpenForm "frm" MyErr: If Err.Number <> 0 Then MsgBox Err.Number & " - " & Err.Description End If End Function Function CheckFile(DBPath) As Integer ' هذه الدالة تقوم بالتأكد من وجود قاعدة البيانات الخلفية On Error GoTo MyErr: Open DBPath For Input As #1 Close CheckFile = 1 Exit Function MyErr: Exit Function End Function Function Compare_FE_BE_Tables(BackFile) On Error GoTo Err_Compare_FE_BE_Tables Dim stDocName As String Dim stLinkCriteria As String 'j DoCmd.Close 'j stDocName = "frm" 'j DoCmd.OpenForm stDocName, , , stLinkCriteria ' BackFile = GetOpenFile() If Len(BackFile & "") = 0 Or BackFile = 1 Then 'this is a start up test BackFile = DLookup("[DBPathANDName]", "BackDBs", "[DBID] = 3") Dim Start_Up As Integer Start_Up = 1 End If Dim FrontObj As AccessObject, FrontDB As Object Dim BackObj As TableDef, BackDB As Database, PW As String, PWD As String Set FrontDB = Application.CurrentData 'the Selected BE Set BackDB = DBEngine.Workspaces(0).OpenDatabase(BackFile, True, False, PWD) 'Start with a table to look for For Each FrontObj In FrontDB.AllTables If left(FrontObj.NAME, 4) <> "MSys" And FrontObj.NAME <> "BackDBs" Then ' FE = FrontObj.NAME 'look for that table in BE For Each BackObj In BackDB.TableDefs If left(BackObj.NAME, 4) <> "MSys" Then ' BE = BackObj.NAME If BackObj.NAME = FrontObj.NAME Then 'check if tblmonths contain the value 12 in Month_No If BackObj.NAME = "tblMonths" Then Dim dbsNew As Database Dim rst_TQ As DAO.Recordset Dim msg As Integer Set dbsNew = OpenDatabase(BackFile) Set rst_TQ = dbsNew.OpenRecordset("SELECT * FROM tblMonths IN '" & BackFile & "'") rst_TQ.FindFirst "[Month_No]=12" If rst_TQ.NoMatch Then 'MsgBox "Didn't find 12" msg = 1 Compare_FE_BE_Tables = 1 Else 'MsgBox "OK" Compare_FE_BE_Tables = 0 GoTo Found_It End If rst_TQ.Close: Set rst_TQ = Nothing: Set dbsNew = Nothing Else Compare_FE_BE_Tables = 0 GoTo Found_It End If ' Compare_FE_BE_Tables = 0 ' GoTo Found_It Else Compare_FE_BE_Tables = 1 End If End If 'BackObj Next BackObj If Compare_FE_BE_Tables = 1 Then GoTo Not_Same Found_It: End If 'FrontObj Next FrontObj 'All Good If Start_Up = 0 Then MsgBox "All FE tables exist in BE" Else DoCmd.OpenForm "Background" End If Set FrontDB = Nothing Set BackDB = Nothing 'update the field in the table 'DoCmd.SetWarnings False ' DoCmd.RunSQL ("UPDATE BackDBs SET DBPathANDName = " & BackFile & " WHERE DBID = 3") 'DoCmd.SetWarnings True 'link the tables 'Call AutoLink Exit Function Not_Same: 'No Good If msg = 0 Then MsgBox "The FE table : " & FrontObj.NAME & vbCrLf & _ "Is Not in the BE" Else MsgBox "Didn't find 12 in tblMonths" End If Set FrontDB = Nothing Set BackDB = Nothing If Start_Up = 1 Then DoCmd.OpenForm "LinkDBsMain" End If Exit_Compare_FE_BE_Tables: Exit Function Err_Compare_FE_BE_Tables: MsgBox Err.Description Resume Exit_Compare_FE_BE_Tables End Function جعفر 605.3.test.mdb.zip
  24. هذا طلب غريب !! واشوف شو اللي اقدر عليه ان شاء الله جعفر
×
×
  • اضف...

Important Information