بحث مخصص من جوجل فى أوفيسنا
![]()
Custom Search
|
-
Posts
9975 -
تاريخ الانضمام
-
تاريخ اخر زياره
-
Days Won
406
نوع المحتوي
المنتدى
مكتبة الموقع
معرض الصور
المدونات
الوسائط المتعددة
كل منشورات العضو jjafferr
-
البحث في Listbox داخل نموذج وعرض البيانات في نفس النموذج
jjafferr replied to مصطفي الفيومي's topic in قسم الأكسيس Access
السلام عليكم 🙂 تفضل : بالنسبة للبحث ، اضفت هذا الحقل بالحقول المطلوبة ، فتقدر تضيف وتنقص منها اللي يناسبك : . وهذه الاكواد: Private Sub cmd_New_Student_Click() 'عمل سجل جديد DoCmd.GoToRecord , , acNewRec Me.namestudent.SetFocus End Sub Private Sub SearchList_DblClick(Cancel As Integer) 'عند النقر مرتين، الانتقال الى اسم الطالب Me.Recordset.FindFirst "codestudint=" & Me.SearchList Me.Bookmark = Me.Recordset.Bookmark Me.namestudent.SetFocus End Sub Private Sub srch_txt_AfterUpdate() 'البحث في Listbox Me.SearchList.Requery End Sub . اما زر حفظ ، وحفظ التعديل ، فلم يتم استعمالهم 🙂 جعفر 1488.Microsoft.accdb.zip -
وعليكم السلام 🙂 هذه المعلومة اللي اعطيتنا ، تكفي فقط لكي يكون جوابي: لا لم تمر عليّ مثل هذه الحاله. جعفر
-
مساعدة كيف اقوم بجلب الناس الذين لم يستلمو X مادة
jjafferr replied to SEMO.Pa3x's topic in قسم الأكسيس Access
السلام عليكم دكتور حسنين 🙂 انت قلت في البداية : بينما لاحقا قلت: فأيهما ؟ وبعدين ، خلينا نتفق على بعض الامور ، علشان نقدر نقارن نتائجنا: 1. رجاء تغيير الاختيار الى المواد التالية ، فالمواد السابقة لا يوجد شخص ماخذها معا ، فلا نقدر نحصر الاشخاص بها . 2. خلينا نستعمل التواريخ التالية في العمل: 15/7/2021 الى 13/3/2022 ، وهو مجرد تاريخ ، ولكن فيه نتائج انا قاصدها 🙂 اذا قمنا بالعمل على الطريقة الاولى ، فيكون هناك 3 اشخاص فقط حصلوا على المواد اعلاه معا ، في الفترة بين التاريخين ، وارقامهم 17 و 73 و 364 ، ويكون عدد الشخاص الذين لم يستلموا هو: 982 - 3 = 979 🙂 ومن هنا نقدر نبدأ نشتغل ونقارن النتائج 🙂 جعفر -
هلا والله بالغاليين 🙂 جعفر
-
جرب ، هذا بريدك: qat**@l**.com جعفر
-
تحويل قيمة من جدول رواتب من عمودي الى افقي
jjafferr replied to ابو هاله النبلسي's topic in قسم الأكسيس Access
طريقة تفكيك الجدول الى عدة جداول : 1. هناك حقل اساسي واحد يربط جميع البيانات ، فهذا الحقل يجب ان يكون في كل الجداول ، 2. يجب ان تقسم/توزع الحقول بطريقة ، بحيث كل مجموعة متجانسة من نفس النوع يكون لها جدول خاص ، 3. وبعدين تقدر تجمع احد/بعض/كل الجداول في استعلام ، ويكون هذا الاستعلام مصدر بيانات النموذج 🙂 وبما ان هذا السؤال خارج عن موضوع السؤال ، فرجاء تعمل له سؤال جديد ، وان شاء الله تحصل على مساعدة فيه 🙂 جعفر -
ربط الجداول لمسار المبرمج ، ثم اعادة ربطها بمسار المستخدم
jjafferr replied to jjafferr's topic in قسم الأكسيس Access
انت اصبر دورك جاي🙂 في الواقع كتبت عدة اسطر في المشاركة السابقة ، بعدين اختصرتها في كلمتين 🙂 جعفر -
ربط الجداول لمسار المبرمج ، ثم اعادة ربطها بمسار المستخدم
jjafferr replied to jjafferr's topic in قسم الأكسيس Access
السلام عليكم اخوي ابوخليل 🙂 الهدف من هذا الموضوع: 1. عند عمل المبرمج واجهة برنامجه FE ، فيحتاج الى عمل ربط لجداوله BE في جهازه ، 2. عند ارسال الواجهة للمستخدم ، فيجب ان يعمل البرنامج بدون تدخل المستخدم بإختيار مسار قاعدة البيانات ، 1. عند استلام المبرمج واجهة البرنامج للتعديل/الاضافة ، فيحتاج الى عمل ربط لجداوله BE في جهازه ، 2. عند ارجاع الواجهة للمستخدم ، فيجب ان يعمل البرنامج بدون تدخل المستخدم بإختيار مسار قاعدة البيانات. وهناك تشابه كبير بين طريقتي وطريقتك ، وهناك نقاط قوة وضعف في الطريقتين 🙂 جعفر -
-
انا اعتذر عن اعطائك ملف جاهز ، وارجو من الجميع ذلك ايضا 🙂 اخي الفاضل ، انت تحصل على نصيحة افضل الخبراء ، فقم بعمل الخطوات اللي يعطوك ، وانت قم بالعمل ، شو صعوبة عمل الملف اللي شرحه اخونا Moosak ، اما اذا ما تعرف تعمله ، فانت في المكان الخطأ للحصول على شرح/جواب !! جعفر
-
تحويل قيمة من جدول رواتب من عمودي الى افقي
jjafferr replied to ابو هاله النبلسي's topic in قسم الأكسيس Access
السلام عليكم 🙂 المشكلة ليست في تصدير البيانات الى اكسل ، وانما الصعوبة في عمل مجاميع كل عمود في الاكسل ، وهناك طريقتين لعمل هذا: أ. تصدير البيانات والتعامل مع بيئة الاكسل (Excel Object) برمجيا ، ب. عمل مجاميع الاعمدة من الاكسس وتصديرها جاهزة للاكسل ، وانا اتبعت هذه الطريقة 🙂 عملت 4 طرق ، وانت تختار الافضل لك: . بسبب انه في الاستعلام export_selfa ممكن يكون عندك الاسم مكرر اكثر من مرة () ، فكان لازم نعمل استعلام المجاميع qry_Sum_export_selfa ، بحيث يجمع قيم الموظف في سجل واحد : . الطريقة 3. من هنا عملنا التقرير rpt_Sum_export_selfa والذي مصدر بياناته الاستعلام اعلاه ، وعملنا تجميع الاعمدة في التقرير: . الفكرة الاخرى ، ان نعمل مجموع الاعمدة في الاستعلام نفسه ، والطريقة اللي توصلت لها ، هي عمل استعلام مجاميع الاعمدة فقط qry_Sum_export_selfa_2 : . وتكون نتيجتها . ثم نعمل استعلام توحيد qry_Sum_export_selfa_3 فيه الاستعلام الاول qry_Sum_export_selfa والثاني qry_Sum_export_selfa_2 . فتصبح النتيجة . الطريقة 1. بتصدير الاستعلام qry_Sum_export_selfa_3 الى اكسل عن طريق الامر TransferSpreadsheet ، الطريقة 2. بتصدير الاستعلام qry_Sum_export_selfa_3 الى اكسل عن طريق الامر OutputTo ، الطريقة 4. عمل تقرير من الاستعلام qry_Sum_export_selfa_3 وتصدير التقرير الى اكسل عن طريق الامر OutputTo : . وهذه اكواد الطرق اعلاه: Private Sub cmd_Transffer_Query_Click() '1 Dim File_Name As String File_Name = CurrentProject.path & "\" & "تفصيل سلفة متنوعة" & Format(Date, "---DDDD-DD-mmmm-yyyy") & ".xlsx" DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qry_Sum_export_selfa_3", File_Name, True End Sub Private Sub cmd_Output_qry_Click() '2 Dim File_Name As String File_Name = CurrentProject.path & "\" & "تفصيل سلفة متنوعة" & Format(Date, "---DDDD-DD-mmmm-yyyy") & ".xls" DoCmd.OutputTo acOutputQuery, "qry_Sum_export_selfa_3", acFormatXLS, File_Name, True, , , acExportQualityPrint End Sub Private Sub cmd_Output_rpt_Click() '3 Dim File_Name As String File_Name = CurrentProject.path & "\" & "تفصيل سلفة متنوعة" & Format(Date, "---DDDD-DD-mmmm-yyyy") & ".xls" DoCmd.OutputTo acOutputReport, "rpt_Sum_export_selfa", acFormatXLS, File_Name End Sub Private Sub cmd_Output_rpt_3_Click() '4 Dim File_Name As String File_Name = CurrentProject.path & "\" & "تفصيل سلفة متنوعة" & Format(Date, "---DDDD-DD-mmmm-yyyy") & ".xls" DoCmd.OutputTo acOutputReport, "rpt_Sum_export_selfa_3", acFormatXLS, File_Name End Sub ونصيحة: انت مستعمل 160 حقل في الجدول FILE-1 ، ويجب عليك تفكيكه الى على الاقل 3 جداول ، وتربط بينهم برقم الموظف ، ثم في استعلام تجمعهم جميعا !! جعفر 1486.Database1 (2).accdb.zip -
وعليكم السلام اخوي qathi 🙂 تواصلت مع الادارة ، وان شاء الله نحصل على رد في هذه المشاركة 🙂 جعفر
-
وعليكم السلام 🙂 هذا الرابط به الطرق الصحيحة للتخاطب بين كائنات الاكسس وحتى لمثل حالتك: http://access.mvps.org/Access/forms/frm0031.htm وارفق هنا الملف من الرابط اعلاه. الامر DoCmd.GoToControl قديم (طبعا لا يزال يعمل) ، وتم استبداله بالامر SetFocus. لحصول التركيز على الحقل في النموذج الفرعي الثاني ، يجب ان تبدأ بالتدرج الهرمي في اعطاء التركيز ، هكذا (على اعتبار انك الان في النموذج الرئيسي Form1 ) : me.Form2.setfocus me.Form2!Form3.setfocus me.Form2!Form3!ImagesSubform2.setfocus جعفر Syntax_for_subs (1).zip
-
ربط الجداول لمسار المبرمج ، ثم اعادة ربطها بمسار المستخدم
jjafferr replied to jjafferr's topic in قسم الأكسيس Access
شكرا جزيلا اخوي ابوخليل 🙂 بكرة الصباح اشوف الموضوع من اول وجديد ان شاء الله 🙂 جعفر -
موقع الشركة هو افضل مكان علشان تحصل على جميع ما تريد ان تعرفه عن منتجها: http://www.ammara.com/ جعفر
-
تحويل قيمة من جدول رواتب من عمودي الى افقي
jjafferr replied to ابو هاله النبلسي's topic in قسم الأكسيس Access
اذا تشوف صورة الاكسل في مشاركتي اعلاه ، تشوف انها جمعت مبالغ السجلات الثلاثة في سجل واحد. هل هذا اللي تريده؟ -
تحويل قيمة من جدول رواتب من عمودي الى افقي
jjafferr replied to ابو هاله النبلسي's topic in قسم الأكسيس Access
وعليكم السلام 🙂 اللي فهمته هو ، اذا عندك نفس الاسم مكرر اكثر من مرة ، مثل ازهار مثلا : . ففي الاكسل تريد قيمها مجموعة هكذا : . هل هذا قصدك ؟ جعفر -
السلام عليكم 🙂 الحل اللي توصلت اليه هو: 1. حفظ الصورة في مجلد الوندوز المؤقت ، 2. ثم قراءته وحفظه في الذاكرة ، وعن طريق Ctrl + V تستطيع لصقه في معظم البرامج (هناك برنامج لم يقبل اللصق فيه) . والاكواد : 1. Public Function Export_Attached_Pictures(TQ_Name As String, Record_ID, fld_Name As String, img_Name As String, Export_Folder_Name As String) On Error GoTo err_Export_Attached_Pictures ' TQ_Name = Table or Query Name ' fld_Name = Attachement field name ' Export_Folder_Name = where to export the picture Dim db As dao.Database Dim rst_TQ As dao.Recordset Dim rst_Pictures As dao.Recordset Dim mySQL As String Set db = CurrentDb ' the parent recordset. mySQL = "Select " mySQL = mySQL & fld_Name mySQL = mySQL & " From " mySQL = mySQL & TQ_Name mySQL = mySQL & " Where ID=" & Record_ID Set rst_TQ = db.OpenRecordset(mySQL) ' loop through it While Not rst_TQ.EOF ' the child recordset. Set rst_Pictures = rst_TQ.Fields(fld_Name).Value ' Loop through the attachments. While Not rst_Pictures.EOF If rst_Pictures.Fields("FileName") = img_Name Then ' Save current attachment to disk, with their original names rst_Pictures.Fields("FileData").SaveToFile Export_Folder_Name GoTo Exit_Export_Attached_Pictures End If rst_Pictures.MoveNext Wend rst_TQ.MoveNext Wend Exit_Export_Attached_Pictures: rst_TQ.Close: Set rst_TQ = Nothing rst_Pictures.Close: Set rst_Pictures = Nothing Exit Function err_Export_Attached_Pictures: If err.Number = 3839 Then 'file exists Resume Next ElseIf err.Number = 91 Or err.Number = 3420 Then Resume Next Else MsgBox err.Number & vbCrLf & err.Description Resume Exit_Export_Attached_Pictures End If End Function . 2. Option Compare Database Option Explicit ' Required data structures Private Type POINTAPI x As Long y As Long End Type #If Win64 And VBA7 Then ' Clipboard Manager Functions Private Declare PtrSafe Function EmptyClipboard Lib "user32" () As Long Private Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As LongPtr) As Long Private Declare PtrSafe Function CloseClipboard Lib "user32" () As Long Private Declare PtrSafe Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As LongPtr) As LongPtr Private Declare PtrSafe Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As LongPtr Private Declare PtrSafe Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Long) As Long ' Other required Win32 APIs Private Declare PtrSafe Function DragQueryFile Lib "shell32.dll" Alias "DragQueryFileA" (ByVal HDROP As LongPtr, ByVal UINT As Long, ByVal lpStr As String, ByVal ch As Long) As Long Private Declare PtrSafe Function DragQueryPoint Lib "shell32.dll" (ByVal HDROP As LongPtr, lpPoint As POINTAPI) As Long Private Declare PtrSafe Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As LongPtr) As LongPtr Private Declare PtrSafe Function GlobalFree Lib "kernel32" (ByVal hMem As LongPtr) As LongPtr Private Declare PtrSafe Function GlobalLock Lib "kernel32" (ByVal hMem As LongPtr) As LongPtr Private Declare PtrSafe Function GlobalUnlock Lib "kernel32" (ByVal hMem As LongPtr) As Long Private Declare PtrSafe Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As LongPtr) Dim hGlobal As LongPtr Dim lpGlobal As LongPtr Dim HDROP As LongPtr #Else ' Clipboard Manager Functions Private Declare Function EmptyClipboard Lib "user32" () As Long Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function CloseClipboard Lib "user32" () As Long Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Long) As Long ' Other required Win32 APIs Private Declare Function DragQueryFile Lib "shell32.dll" Alias "DragQueryFileA" (ByVal HDROP As Long, ByVal UINT As Long, ByVal lpStr As String, ByVal ch As Long) As Long Private Declare Function DragQueryPoint Lib "shell32.dll" (ByVal HDROP As Long, lpPoint As POINTAPI) As Long Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Dim hGlobal As Long Dim lpGlobal As Long Dim HDROP As Long #End If ' Predefined Clipboard Formats Private Const CF_TEXT = 1 Private Const CF_BITMAP = 2 Private Const CF_METAFILEPICT = 3 Private Const CF_SYLK = 4 Private Const CF_DIF = 5 Private Const CF_TIFF = 6 Private Const CF_OEMTEXT = 7 Private Const CF_DIB = 8 Private Const CF_PALETTE = 9 Private Const CF_PENDATA = 10 Private Const CF_RIFF = 11 Private Const CF_WAVE = 12 Private Const CF_UNICODETEXT = 13 Private Const CF_ENHMETAFILE = 14 Private Const CF_HDROP = 15 Private Const CF_LOCALE = 16 Private Const CF_MAX = 17 ' New shell-oriented clipboard formats Private Const CFSTR_SHELLIDLIST As String = "Shell IDList Array" Private Const CFSTR_SHELLIDLISTOFFSET As String = "Shell Object Offsets" Private Const CFSTR_NETRESOURCES As String = "Net Resource" Private Const CFSTR_FILEDESCRIPTOR As String = "FileGroupDescriptor" Private Const CFSTR_FILECONTENTS As String = "FileContents" Private Const CFSTR_FILENAME As String = "FileName" Private Const CFSTR_PRINTERGROUP As String = "PrinterFriendlyName" Private Const CFSTR_FILENAMEMAP As String = "FileNameMap" ' Global Memory Flags Private Const GMEM_FIXED = &H0 Private Const GMEM_MOVEABLE = &H2 Private Const GMEM_NOCOMPACT = &H10 Private Const GMEM_NODISCARD = &H20 Private Const GMEM_ZEROINIT = &H40 Private Const GMEM_MODIFY = &H80 Private Const GMEM_DISCARDABLE = &H100 Private Const GMEM_NOT_BANKED = &H1000 Private Const GMEM_SHARE = &H2000 Private Const GMEM_DDESHARE = &H2000 Private Const GMEM_NOTIFY = &H4000 Private Const GMEM_LOWER = GMEM_NOT_BANKED Private Const GMEM_VALID_FLAGS = &H7F72 Private Const GMEM_INVALID_HANDLE = &H8000 Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT) Private Const GPTR = (GMEM_FIXED Or GMEM_ZEROINIT) Private Type DROPFILES pFiles As Long pt As POINTAPI fNC As Long fWide As Long End Type Public Function ClipboardCopyFiles(File As String) As Boolean ' 'From: https://www.developerfusion.com/code/224/copy-files-to-clipboard/ ' 'modified by jjafferr 'Copy one file to clipboad 'call it like this: ClipboardCopyFiles("D:\Les-fruits.jpg") ' Dim data As String Dim df As DROPFILES 'Dim hGlobal As Long 'Dim lpGlobal As Long Dim i As Long ' Open and clear existing crud off clipboard. If OpenClipboard(0&) Then Call EmptyClipboard ' Build double-null terminated list of files. data = File & vbNullChar ' Allocate and get pointer to global memory, ' then copy file list to it. hGlobal = GlobalAlloc(GHND, Len(df) + Len(data)) If hGlobal Then lpGlobal = GlobalLock(hGlobal) ' Build DROPFILES structure in global memory. df.pFiles = Len(df) Call CopyMem(ByVal lpGlobal, df, Len(df)) Call CopyMem(ByVal (lpGlobal + Len(df)), ByVal data, Len(data)) Call GlobalUnlock(hGlobal) ' Copy data to clipboard, and return success. If SetClipboardData(CF_HDROP, hGlobal) Then ClipboardCopyFiles = True End If End If ' Clean up Call CloseClipboard End If End Function Public Function ClipboardPasteFiles(Files() As String) As Long 'Dim HDROP As Long Dim nFiles As Long Dim i As Long Dim desc As String Dim filename As String Dim pt As POINTAPI Const MAX_PATH As Long = 260 ' Insure desired format is there, and open clipboard. If IsClipboardFormatAvailable(CF_HDROP) Then If OpenClipboard(0&) Then ' Get handle to Dropped Filelist data, and number of files. HDROP = GetClipboardData(CF_HDROP) nFiles = DragQueryFile(HDROP, -1&, "", 0) ' Allocate space for return and working variables. ReDim Files(0 To nFiles - 1) As String filename = Space(MAX_PATH) ' Retrieve each filename in Dropped Filelist. For i = 0 To nFiles - 1 Call DragQueryFile(HDROP, i, filename, Len(filename)) Files(i) = TrimNull(filename) Next ' Clean up Call CloseClipboard End If ' Assign return value equal to number of files dropped. ClipboardPasteFiles = nFiles End If End Function Private Function TrimNull(ByVal sTmp As String) As String Dim nNul As Long ' ' Truncate input sTmpg at first Null. ' If no Nulls, perform ordinary Trim. ' nNul = InStr(sTmp, vbNullChar) Select Case nNul Case Is > 1 TrimNull = Left(sTmp, nNul - 1) Case 1 TrimNull = "" Case 0 TrimNull = Trim(sTmp) End Select End Function . والحدث على نقر الزر : Private Sub cmd_Attachment_image_to_Clipboard_Click() Dim myFile As String 'make folder tmp_File in Windows TEMP Directory myFile = Environ("TEMP") & "\tmp_File\" If Dir(myFile) = "" Then MkDir myFile End If 'Save the image to folder Call Export_Attached_Pictures("Query1", Me.ID, "img", Me.img.filename, myFile) 'Copy the image to Clipboard Call ClipboardCopyFiles(myFile & Me.img.filename) End Sub Private Sub cmd_Copy_file_to_Clipboard_with_irfan_view_Click() 'use irfan view to copy the picture in clipboard Dim IV_Path As String, Source_File As String IV_Path = "C:\Program Files\IrfanView\" 'location of i_view32.exe file Source_File = "D:\Les-fruits.jpg" 'Source_File = Me.img.Picture Shell (IV_Path & "i_view64.exe " & Source_File & "/ClipCopy /killmesoftly") MsgBox "This image is copied in the clipboard, you can paste it in any program" End Sub جعفر 1484.Copy attached image to clipboard.accdb.zip
-
ربط الجداول لمسار المبرمج ، ثم اعادة ربطها بمسار المستخدم
jjafferr replied to jjafferr's topic in قسم الأكسيس Access
اخوي ابوخليل ، ويقول المثل قديم البريسم ولا جديد الصوف 🙂 خلينا نشوف الكود لوسمحت علشان اطبق واجرب 🙂 جعفر -
المرفق موجود في المشاركة الاولى ، في آخر سطر
-
تحويل قيمة من جدول رواتب من عمودي الى افقي
jjafferr replied to ابو هاله النبلسي's topic in قسم الأكسيس Access
السلام عليكم 🙂 ابو عبدالرحمن ، يا ريت تعطينا مرفق فيه مجموعة بيانات في الاكسس ، والطريقة التي تريد البيانات تكون في الاكسل ، لأني مو قادر افهم المطلوب من المرفقات وكل مرفق فيه جزئية من الموضوع !! جعفر -
إنشاء QR CODE داخل مربع نص يدعم اللغة العربية
jjafferr replied to صالح حمادي's topic in قسم الأكسيس Access
وعليكم السلام ورحمة الله وبركاته 🙂 اهلا وسهلا بك في المنتدى ، وللاستفادة القصوى من المنتدى ، رجاء مراجعة قوانين المنتدى: اضغط هنـــــــــامن فضلك لقراءة القواعد كاملة بشرائك النسخة الاصلية من الموقع الذي اشر اليه الاستاذ صالح او تقدر تستخدم طريقة اخرى: . جعفر -
ربط الجداول لمسار المبرمج ، ثم اعادة ربطها بمسار المستخدم
jjafferr replied to jjafferr's topic in قسم الأكسيس Access
لا وانت الصادق ، اضطر افكر بهذه الطرق لإنجاز عملي 🙂 لهذا السبب ترى انه ما عندي مشاركات في اخفاء خلفية الاكسس ، او طرق الحمايات ، او ... ، بينما تخصصي في التعامل مع البيانات 🙂 اخوي موسى ، اليك آخر تحديث للموصوع ، وطريقة عملي: لما استلم برنامج جديد مجزأ الى واجهة وخلفية: في الواجهة FE ، امسك مفتاح الشفت وافتح الواجهة في وضع التصميم ، ثم اضع الكائنات التالية: الجدول tbl_ReLink_To_Original (تم عمل تغييرات على الجدول في المرفق) ، مع حذف جميع بياناته ، الماكرو Autoexec ، مع تغيير اسم اول نموذج يتم فتحه ، الوحدة النمطية basJStreetAccessRelinker وبدون المساس بها ، الوحدة النمطية m_Arc_Subs ، مع مراعاة استخدام النسخة الاحدث من الدالة f_ReLink_To_Original (انظر الكود في الاسفل) ، واضافة الدالة الجديدة f_Original_DB_Path_Append ، الدالة الجديدة f_Original_DB_Path_Append تقوم بجميع الخطوات اليدوية التي شرحتها في اول مشاركة ، وتقوم بإدخال مسارات الجداول المرتبطة في VBA في نافذة immediate اكتب (لاحظ ان علامة الاستفهام بالانجيزي) ?f_Original_DB_Path_Append اغلق البرنامج بعد حفظ كل شيء اعلاه ، افتح البرنامج بدون مسك مفتاح الشفت ، وسيسألني البرنامج عن مسار الجداول ، واخبره عن المسار ، ويشتغل البرنامج بالبيانات ، اقوم بجميع التعديلات/الزيادة المطلوبة ، وبعد كل تعديل اغلق البرنامج ، ثم استخدم البرنامج في الرابط التالي ، حتى ينظف برنامجي ويعمل لي نسخة احتياطية (وكثر ما اقول ، ما اوفي البرنامج حقه ، فكثير من الاحيان وبعد ايام او اشهر ، اضطر للرجوع الى احد النسخ القديمة والذي كان فيه كود قديم يشتغل ، ولكني استبدلته بكود جديد وظهر به اخطاء) : وفي النهاية اضغط البرنامج وارسله لصاحبه ، لما صاحبه يفتحه ، تلقائيا البرنامج يفتح بالطريقة العادية وبدون تدخل المستخدم في اي شيء 🙂 هذا هو الكود المعدل: Public Function f_ReLink_To_Original(Optional Seq As Integer = 1) On Error GoTo err_f_ReLink_To_Original ' ' this Function runs from startup, from AutoExec Macro. ' ' The client have his own path to the linked BE tables, ' yet for Development when we want to do changes and modifications on the FE, ' we want to link this FE to our local BE tables, for testing, ' and when we are done, we will send this FE back to the client, which will have our BE path, and that is the problem !! ' ' The Developer: ' since this Function runs from startup, but will NOT find the client BE, ' then the startup will run the Function jstCheckTableLinks_Full, which will prompt for the new BE path, and Link the FE to the BE. ' ' So I added a table tbl_ReLink_To_Original to the FE, and the path to the client BE path, as Seq = 1 , ' and for the Developer BE, the Seq is Not 1. ' ' for the Development BE path, we can run the DB normally, ' and the Function jstCheckTableLinks_Full will prompt asking for the BE path (since the DB will NOT find the BE from this Function), ' ' Or, if entered the DB while holding the Shift key, we can: ' call this Function, from the immediate window: ' ?f_ReLink_To_Original(2) ' ' or call this Function from any Event: ' Call f_ReLink_To_Original(2) ' ' ' The Client: ' And when the FE goes to the client, this Function will call Seq = 1 by default, thus returning their correct Path. ' ' ' by jjafferr ' ' v1.0, 24-Feb-2020 , One BE ' v2.0, 10-Jul-2020 , Multiple BEs ' v2.1, 13-Jul-2020 , Multiple BEs, but each table should be connected to it's owen BE !! ' , the table might be in different BE, so this way we connect it to the right BE ' Dim db As DAO.Database Dim tdf As DAO.TableDef Dim rst As DAO.Recordset Set db = CurrentDb 'assuming it is the Client, loop through his BE path Set rst = CurrentDb.OpenRecordset("Select [tbl_Name], [DB_Path] From tbl_ReLink_To_Original Where [Seq]=" & Seq) For Each tdf In db.TableDefs ' Only make a change if the table is a linked table If Len(tdf.Connect) Then rst.FindFirst "[tbl_Name] = '" & tdf.Name & "'" tdf.Connect = ";DATABASE=" & rst![DB_Path] tdf.RefreshLink ' if the table is not found in the DB Path, the Function will generate error 3011 End If 'Len Next Exit_f_ReLink_To_Original: rst.Close: Set rst = Nothing Exit Function err_f_ReLink_To_Original: If Err.Number = 3170 Then 'MsgBox "رجاء التاكد من مسار القاعدة الموجوده في الجدول" & vbCrLf & "tbl_ReLink_To_Original" 'Resume Next Resume Exit_f_ReLink_To_Original ElseIf Err.Number = 3011 Or Err.Number = 3044 Then 'this Table belonges to another DB, ignore, 'as the other DB Path will be checked too Resume Next Else MsgBox Err.Number & vbCrLf & Err.Description Resume Exit_f_ReLink_To_Original End If End Function Public Function f_Original_DB_Path_Append() Dim mySQL As String DoCmd.SetWarnings False mySQL = "UPDATE tbl_ReLink_To_Original SET Seq = 5, Remarks = 'A different BE Path was added' WHERE Seq=1" DoCmd.RunSQL mySQL mySQL = "INSERT INTO tbl_ReLink_To_Original ( DB_Path, tbl_Name, Seq, Remarks )" mySQL = mySQL & " SELECT Database, Name, 1, 'Client'" mySQL = mySQL & " FROM MSysObjects WHERE Flags = 2097152 ORDER BY Database" DoCmd.RunSQL mySQL DoCmd.SetWarnings True End Function جعفر Relink Tables.zip -
ياااه ، ذكرتني بأيام زماااان 🙂 وانت الصادق مبدع وعبقرى وفنان المهم اني اعرف ان المقصود هو جعفر 🙂
-
دكتور حلبي 🙂 راح اخبرك سر ، وبس اخبره للعزيزين 🙂 تأكد من ان لغة لوحة المفاتيح باللغة العربية عند النسخ . وكذلك عند اللصق 🙂 جعفر