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

jjafferr

أوفيسنا
  • Posts

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

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

  • Days Won

    404

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

  1. الاستاذ احمد قصده : اذا اردت ان تنشر فيديو برنامجك ، فعليك بنشره في الرابط الذي وضعه الاخ احمد ، اما اذا اردت ان يستفيد منه الاعضاء ، ويعطوك تجاربهم ، فأنت في المكان الصحيح هنا 🙂 جعفر
  2. السلام عليكم 🙂 للعلم ، الاداة DBPix تحفظ فقط ملفات الصور ، بصيغة Blob في حقل OLE في جداولك. لإخراج جميع الصور من برنامجك وحفظها في مجلد ، احفظ هذه الوحدة النمطية في برنامجك بإسم mod_Blob_to_File : Option Compare Database Option Explicit ' 'https://www.utteraccess.com/forum/index.php?s=bb0cc83dcb349316e03115efcd24acf4&showtopic=1688201&view=findpost&p=1688652 ' 'modified by jjafferr ' 16-4-2020 ' Public Declare Function apiCreatePath Lib "Imagehlp.dll" _ Alias "MakeSureDirectoryPathExists" (ByVal strPath As String) As Long ' Public Function ExtractFiles() Dim strPath As String, tbl_Name As String strPath = CurrentProject.Path & "\myFiles\" apiCreatePath strPath 'tblItemsTracks tbl_Name = "tblItemsTracks" With CurrentDb.OpenRecordset(tbl_Name) Do Until .EOF If Len(![Picture] & "") <> 0 Then DownloadFieldToFile ![Picture], strPath & tbl_Name & "_" & ![TNo] & "_" & ![Id] & "_Picture.jpg" DownloadFieldToFile ![Thumbnail], strPath & tbl_Name & "_" & ![TNo] & "_" & ![Id] & "_Thumbnail.jpg" End If .MoveNext Loop End With 'tblItemsTracks tbl_Name = "tblItemSubImagesT" With CurrentDb.OpenRecordset(tbl_Name) Do Until .EOF If Len(![imgMain] & "") <> 0 Then DownloadFieldToFile ![imgMain], strPath & tbl_Name & "_" & ![ItemId] & "_" & ![ImageId] & "_imgMain.jpg" DownloadFieldToFile ![imgThumb], strPath & tbl_Name & "_" & ![ItemId] & "_" & ![ImageId] & "_imgThumb.jpg" End If .MoveNext Loop .Close End With MsgBox "Done" End Function Private Sub DownloadFieldToFile(ByRef objFieldName As Object, _ ByVal strFileName As String) Dim intFileNum As Integer intFileNum = FreeFile Open strFileName For Binary As intFileNum Put intFileNum, , objFieldName.GetChunk(0, objFieldName.FieldSize) Close intFileNum End Sub . لتشغيل هذه الوحدة النمطية ، اكتب التالي (رجاء الملاحظة الى ان علامة الاستفهام بالانجليزي وليست بالعربي) ، في النافذة اسفل نافذة الكود (لفتحها اضغط على Ctrl+G) : ?ExtractFiles هذه الوحدة النمطية ستعمل لك مجلد جديد اسمه myFiles داخل مجلدك ، وستحفظ الصور من الجدولين فيه ، لهذا السبب ، رجاء استعمل نسخة من برنامجك للقيام بهذا العمل ، وتأكد بأنه لديك مساحة فارغة على الهارددسك اكثر من 2 جيجا ، وقبل ان تستخدم برنامجك كاملا ، رجاء استعمل ملفات جزء من برنامجك لاصل ، حتى نتفق على اسماء الملفات ، فأنا حاليا حفظت الملفات هكذا : . فقد لا تناسبك التسمية ، وخصوصا اننا يجب ان نربط الصور مع السجلات لاحقا بالاسم الصحيح 🙂 اما بالنسبة لحفظ ملفات الاسكانر بصيغة pdf ، فهناك 3 طرق : 1. الطريقة الاسهل والتي اخبرتك عنها : 2. ان تستعمل الكود في التحكم في الاسكانر (ومنها الطريقة التي طلبتها في تعديل كود المرفق) ، فلا تتعب نفسك ، فلا توجد طريقة سهلة ، 3. ان تجعل الاسكانر يعمل لك صور بصيغة jpg ، وبعدها نستخدم برنامج خارجي ليضم جميع هذه الصور الى ملف واحد بصيغة pdf وطبعا ممكن التحكم بهذا برمجيا ، ولكن العمل يطول والانسب هو الطريقة رقم1 اعلاه : . طبعا بعد ان تخرج الصور من برنامجك ، يجب ان تحذف حقول OLE من جداولك (لا تنسى انك تستعمل نسخة من برنامجك) ، وبعدها اعمل للبرنامج ضغط واصلاح ، وسيرجع الى حجمه الصحيح 🙂 ويجب عليك ان تعيد العمل على برنامجك (ونصيحة ، لا تستعمل الاداة DBPix مرة اخرى في البرنامج ، فانت محتاج الى اظهار الصور فقط في مربع الصور في النموذج/التقرير) ، او اظهر ملف pdf في النموذج/التقرير : جعفر
  3. وعليكم السلام 🙂 اخي ربيع ، لقد حصلت على البرنامج من منتدى الاكسل : فهل هناك شيء آخر تريده من منتدى الاكسس ؟ جعفر
  4. ما هي صيغة الملفات التي كنت تأخذها عن طريق DbPix ، هل كانت jpg او pdf ؟ وها اسم الملف كان بالانجليزي او العربي ؟
  5. معظم الاعضاء يلجؤون للمنتديات لما تواجههم مشكلة في مكان ما ، والبعض الآخر يساعد الباقين ، فلا هذا عنده وقت ، ولا ذاك ، إلا اللي محتاج وعنده مشكلة في المثال اللي تقدمه ، فعلى اساسه تلقاه مستعد يجرب 🙂 جعفر
  6. هل جميع الملفات في برنامجك من نوع pdf ؟ اذا لا ، كيف لنا ان نعرف صيغة الملف ؟
  7. السلام عليكم 🙂 1. الاداة DbPix تحفظ المستندات في الجدولين التاليين: . بصيغة Blob في الحقول اعلاه في الجدولين ، والحقول من نوع OLE ، وهي احد انواع حقول المرفقات (واستخدمتها انا في برنامجي: هدية: إحمل برامجك داخل قاعدة بياناتك ) ، 2. من ضمن اعدادات اجهزة الاسكانر ، حفظ الملفات بمجموعة صيغ ، سواء الاوراق الفردية بصيغة jpg او bmp او الاوراق الجماعية بصيغة pdf او tif ، لهذا السبب فيجب ان تضبط الاسكانر علشان يصور الاوراق بصيغة pdf ، واللي بيأخذ جميع الاوراق اللي في الجهاز ، سواء ورقة واحدة او عدة اوراق ، وكذلك للأرشفة ، تأكد ان دقة التصوير 300dpi (على الاقل) ، ونقاوء الصورة 100% (بدون ضغط) ، وتحفظ الملف في مجلد معين (طبعا اذا عندك اكثر من مستخدم ، فيجب ان تحفظ الملف في ملف مشاركة على الشبكة) ، ومن ثم بزر من النموذج ، يتم حفظ الملف في مكانه الصحيح ، وحذفه من مجلد سكانر المشاركة ، بحيث يكون مجلد سكانر المشاركة دائما فارغ ، إلا لما تعمل سكان 🙂 جعفر
  8. تم ارفاق الملف مرة اخرى ، بعد التعديل 🙂 الاخ اسامة ارفق البرنامج كاملا ، بينما نحن بحاجة الى جداول ونماذج معينة ، علشان نعرف سبب حجم البرنامج 🙂 جعفر
  9. وعليكم السلام 🙂 1. انا لم اشاهد قاعدة بيانات اكسس يصل حجمها الى 2 جيجا ، إلا اذا فيها مرفقات !! فإذا فيها مرفقات ، فيجب عليك اخراج هذه المرفقات من قاعدة البيانات ، وحفظها في احد مجلدات الوندوز : . 2. اذا بالفعل برنامجك مافيه مرفقات ، واستعملت المرفق لتصغير حجمه : . ولا يزال في حدود 2 جيجا ، فيجب عليك نقل قاعدة بياناتك الى SQL Server ، فبياناتك خارج نطاق الاكسس ، وسيكون الاكسس بطيء في العمل. جعفر
  10. وعليكم السلام اخوي عبداللطيف 🙂 هذا الرابط فيه وحدة نمطية لطلبك 🙂 https://www.officena.net/ib/topic/80943-كيفية-حساب-عدد-الاشهر-بين-تاريخين/ جعفر
  11. وعليكم السلام 🙂 نعم هذا صحيح ، فيجب ان لا نستعمل الكلمات المحجوزة للاكسس ، وهنا قام اخوي ابوخليل بوضع مرفق للأسماء المحجوزة ، فيه كذلك رابط مُعرّب : جعفر
  12. لا وانما قصدي اعمل الاستعلام بالطريقة العادية مرة ثانية ، واذا اشتغل ، فيمكنك ان تأخذ جملة الـ SQL للكود 🙂 او طبعا اذا ممكن استعمال الاستعلام ، فلماذا الكود اصلا 🙂 جعفر
  13. السلام عليكم 🙂 مسألة Garbage in, garbage out (اذا تم ادخال بيانات خطأ، فالنتائج تكون خطأ) تنطبق على كل جزئية من بيانات قاعدة البيانات ، وليس التاريخ فحسب ، رجاء انظر في الرابط اللي وضعته انا في مشاركتي اعلاه : وستلاحظ فيه ان المستخدم اخطأ في ادخال تاريخ اليوم ، فسنة 2001 سنة كبيسة ولا يوجد فيها 29 يوم : 1. هذا مستحيل ، والتجارب اثبتت هذا ، فأنت تتعامل مع أناس من مختلف الطبقات ، وانا بنفسي شفت المهمل اللي يرمي مسؤوليه اخطاءه على البرنامج ، 3. وحتى هذه الطريقة لا يمكن الاعتماد عليها ، فالمثال من الموضوع الآخر يثبت هذا الشيء. ستقول يجب ان نتأكد من الادخال ، والذي معناه الرجوع للمادة رقم 2 مرة اخرى 🙂 2. وهذه هي الطريقة الصحيحة ، وهي محور كلام هذا الموضوع ، وهي استعمال الاوامر الصحيحة لقراءة التاريخ بالطريقة الصحيحة ، وهي وكما شرحتها انا بمثال في المشاركة التي وضعت رابطها ، وهي ان الاكسس يتعامل مع التواريخ بالتنسيق الامريكي شهر/يوم/سنه ، فيا نتعامل معها بهذه الطريقة ، وهي كما شرحها اخوي خالد : . او اوامر التاريخ التي تنص على مكان اليوم و الشهر والسنه ، مثل DateSerial : DateSerial(Year_السنة , Month_الشهر , Date_اليوم ) جعفر
  14. وعليكم السلام 🙂 في الاستعلام ، هذا الخطأ ممكن يظهر في مكانين: - المعيار ، وما عندك استعلامك معيار خاص يلزم قيمة كاملة ، - علاقة الربط بين جدولين (او ما شابه ذلك) ، وهنا اعتقد تكمن المشكلة ، فالرابط عندك بين حقل اسم وحقل رقم (طبعا حسب مفهومنا من مصطلحاتك) ، وبعض الاوقات يكون الاستعلام يعمل بطريقة سليمة ، ولكنك لاحقا قمت بتغيير نوع الحقل في الجدول ، فلن يعمل الاستعلام بوجود رسالة الخطأ : جعفر
  15. وهذا يأخذنا الى السؤال الازلي: ايهم جاء قبل ، البيضة او الدجاجة 🙂 فبما ان نظام الكمبيوتر سمح لنا نستعمل تنسيق محلي بصيغة dd/mm/yyyy ، والكود كذلك ، فبديهي ان يستعمل المبرمج هذه الصيغة في برمجته (وخصوصا ان الكود يسمح له) ، وهنا تأتي مشكلة عدم تطابق البيانات مع الكود ، بين كمبيوتر المبرمج وكمبيوتر المستخدم ، والامثلة في المنتدى كثيرة !! وللتخلص من جميع هذه الاشكالات ، لا يكفي ان تستعمل امر مثل CDate ، فسيحوله حسب تاريخ النظام ، لهذا السبب ، وكما ذكرت في هذا الموضوع ، فيجب استخدام اوامر التاريخ التي لها علاقة مباشرة باليوم والشهر والسنه مثل DateAdd او DateDiiff او DatePart او DateSerial : . وشكرا اخوي خالد انك اقتصرت قائمة الاوامر في مشاركتك اعلاه 🙂 جعفر
  16. رحم الله والديك ، كفيت ووفيت 🙂 في الواقع في منها امثلة جديدة علي 🙂 جعفر
  17. احسنت واجدت اخوي ابو ابراهيم ، وسلمت يداك 🙂 هي الفكرة جميلة ، وأجمل من التنفيذ ، وبالفكرة والتنفيذ تكون ولا أجمل 🙂 مرة اخرى ، بالفعل مبدع ، وشكرا جزيلا على الاثراء بالمشاركة 🙂 الحمدلله ، طلعنا بوجوه بيضاء 🙂 يعني تعتقد الكود اللي مقطع بهذه الطريقة الغريبة ، جاي لحاله جعفر
  18. السلام عليكم 🙂 هذه الواجهة : 1. لما تفتح لك نافذة الاختيار ، تقدر تختار ملف واحد ، او عن طريق مسك زر Shift او Ctrl تقدر تختار اكثر من ملف ، 2. ستظهر لك اسماء الملفات اللي اخترتها هنا ، 3. هذا الزر اللي يجلب البيانات الى قاعدة البيانات ، 4. و بهذا الزر تختار المجلد ، ومنها يقوم البرنامج بجلب جميع ملفات الاكسل ، ويضع مسار الملفات في #2 . وهذه الاكواد ، 1. Private Sub Browse_Click() Dim varFile As Variant Me.txtPath = "" With Application.FileDialog(3) .title = "اختار ملف او عدة ملفات" .Filters.Clear .Filters.Add "Excel Files", "*.xls ; *.xlsx" '.Filters.Add "Excel Files", "*.csv" .AllowMultiSelect = True 'False .InitialFileName = "" If .Show = -1 Then 'Loop through each file selected and add them to the textbox For Each varFile In .SelectedItems Me.txtPath = varFile & vbCrLf & Me.txtPath Next End If End With End Sub . 4. Private Sub cmd_All_Files_In_Folder_Click() Dim strPattern As String, myDir As String, varFile As String If MsgBox("هل أنت متأكد من رغبتك في استيراد جميع الملفات" & objName & "؟", vbCritical + vbYesNo + 256, "تأكيد") = vbYes Then 'Important we use msoFileDialogFolderPicker instead of (...)FilePicker With Application.FileDialog(4) 'Optional: FileDialog properties .title = "Select a folder" .InitialFileName = "C:\" If .Show = -1 Then Me.txtPath = "" strPattern = "*.xls" 'Loop through each file selected and add them to the textbox myDir = .SelectedItems(1) & "\" varFile = Dir(myDir & strPattern, vbNormal) Do While varFile <> "" Me.txtPath = myDir & varFile & vbCrLf & Me.txtPath varFile = Dir Loop End If End With End If End Sub . 3. هذا الكود ينادي بقية الوحدات النمطية ، Private Sub Command1_Click() CurrentDb.Execute ("Delete * From Table1") CurrentDb.Execute ("Delete * From Temp4") 'call for multiple WorkBooks Call f_Import_WorkBooks("Temp4") MsgBox "تم استيراد البيانات بنجاح" End Sub f_Import_WorkBooks علشان سهولة استعمال الكود لملفات مثل هذه الملفات ، استيراد جميع الاوراق من الاكسل ، من جميع الملفات في المجلد ، وما له علاقة بكود استيراد البيانات (هذا الكود الذي ينادي الوحدة النمطية لإستيراد البيانات Call f_Import_to_Table(colWorksheets(lngCount)) ) ، مع ملاحظة ان هذا الكود لا يتغير بتغير نوع الملفات من موقع النور : Public Function f_Import_WorkBooks(strTable As String) 'import Sheets Dim blnHasFieldNames As Boolean, blnEXCEL As Boolean, blnReadOnly As Boolean Dim lngCount As Long Dim objExcel As Object, objWorkbook As Object Dim colWorksheets As Collection Dim strPathFile As String Dim strPassword As String 'For Multiple files Dim x() As String x = Split(Me.txtPath, vbCrLf) For i = LBound(x) To UBound(x) - 1 strPathFile = x(i) ' Establish an EXCEL application object On Error Resume Next Set objExcel = GetObject(, "Excel.Application") If Err.Number <> 0 Then Set objExcel = CreateObject("Excel.Application") blnEXCEL = True End If Err.Clear On Error GoTo 0 ' Replace tablename with the real name of the table into which the data are to be imported 'strTable = "Temp4" '"tablename" ' Change this next line to True if the first row in EXCEL worksheet has field names blnHasFieldNames = False ' Replace passwordtext with the real password; ' if there is no password, replace it with vbNullString constant ' (e.g., strPassword = vbNullString) strPassword = vbNullString '"passwordtext" blnReadOnly = True ' open EXCEL file in read-only mode ' Open the EXCEL file and read the worksheet names into a collection Set colWorksheets = New Collection Set objWorkbook = objExcel.Workbooks.Open(strPathFile, , blnReadOnly, , strPassword) For lngCount = 1 To objWorkbook.Worksheets.Count colWorksheets.Add objWorkbook.Worksheets(lngCount).Name Next lngCount ' Close the EXCEL file without saving the file, and clean up the EXCEL objects objWorkbook.Close False Set objWorkbook = Nothing If blnEXCEL = True Then objExcel.Quit Set objExcel = Nothing ' Import the data from each worksheet into the table For lngCount = colWorksheets.Count To 1 Step -1 'Empty Table CurrentDb.Execute ("Delete * From " & strTable) DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ strTable, strPathFile, blnHasFieldNames, colWorksheets(lngCount) & "$" 'save Results to Table Call f_Import_to_Table(colWorksheets(lngCount)) Next_lngCount: Next lngCount 'looping for Multiple files Next i ' Delete the collection Set colWorksheets = Nothing End Function . f_Import_to_Table وهنا نعمل الكود لإستيراد البيانات من الاكسل ، وهو الكود الذي يحتاج الى تغيير ، كلما اردنا استيراد بيانات مختلفة من موقع النور : Public Function f_Import_to_Table(Sheet As String) Dim myField As String Dim rst1 As DAO.Recordset, rst2 As DAO.Recordset Dim i As Long, j As Long Set rst2 = CurrentDb.OpenRecordset("Select * From Table1") 'يوجد عمودين لكل ورقة :F2 AND F8 For j = 2 To 8 Step 6 myField = "F" & j Set rst1 = CurrentDb.OpenRecordset("Select " & myField & " From Temp4 Where " & myField & " Is Not Null") rst2.AddNew Do Until rst1.EOF i = i + 1 If i = 1 Then rst2![Academic Year] = rst1(myField) rst2!Sheet = Sheet ElseIf i = 2 Then rst2![Academic Num] = Mid(rst1(myField), InStrRev(rst1(myField), " ") + 1) ElseIf i = 3 Then rst2![StName] = rst1(myField) ElseIf i = 4 Then rst2![F1] = rst1(myField) ElseIf i = 5 Then rst2![Subjects] = rst1(myField) i = 0 rst2.Update rst2.AddNew End If rst1.MoveNext Loop Next j rst1.Close: Set rst1 = Nothing rst2.Close: Set rst2 = Nothing End Function . بسبب انني فككت الكود اعلاه ، فالكود يفتح ويغلق Recorsets كثيرا ، مما يؤدي الى بطئ البرنامج (انا اعتبره بطيء ، ومو مثل ما اخوي محمد كان يتمناه بسرعته 🙄 ) ، ولكن اذا صار عندي وقت ان شاء الله انظر فيه مرة اخرى 🙂 جعفر 1206.2.Posters.mdb_accdb.zip
  19. السلام عليكم 🙂 السبب اللي سألت هذا السؤال : واخونا الهاوي كل حلوله على اساس ان حقل تاريخ الميلاد DOB عبارة عن تاريخ ، لهذا السبب ، عندك حلين : 1. يا انك تغير حقل تاريخ الميلاد DOB ، الى تاريخ (لأنه رقم الآن) ، وعلى اساسه يمكنك استعمال اي من الحلول اللي اعطاك اخونا الهاوي ، او 2. تشوف طريقة اخرى علشان تعرض نتيجة العمر على اساس تاريخ الميلاد 🙂 جعفر
  20. وعليكم السلام 🙂 شكرا جزيلا على هذا الشرح ، بس لو تكرمت واكملت الشرح بأمثله ، علشان يكون الموضوع واضح ومكتمل 🙂 جعفر
  21. في الواقع صار لي شوية وقت وانا اشوف كود سابق ، ولكني لازم ارجع الى الكود الاصل اللي انا عملته ، لأنه ما يكون فيه زيادات !! الصباح رباح ان شاء الله 🙂 جعفر
  22. الآن انزلت برنامجك ، واتضح انك تحفظ قيمة num3 في الجدول ، لهذا السبب فطريقتي لا تنفعك 🙂 جعفر
  23. الافضل ان تضع مثال علشان نفهمه ، وعلى اساسه نعطيك الجواب 🙂 جعفر
×
×
  • اضف...

Important Information