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

jjafferr

أوفيسنا
  • Posts

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

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

  • Days Won

    406

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

  1. وعليكم السلام 🙂 الشيء الوحيد الذي يمكنك عمله هو التنسيق الشرطي : . وللأسف ، اخفاء الحقل مو من ضمن القائمة !! ليش ما تغير لونه الى لون مميز لما يكون فاضي !! انا تركت لك المعادلة في الصورة اعلاه 🙂 جعفر
  2. الشكر لله على ما انعم ، ولك ولمن احببت مثل ما دعوت لي ، والشكر لك اخوي العود ابوخليل على جميل كلماتك 🙂 جعفر
  3. السلام عليكم 🙂 هذه طريقتي لتفكيك الحقل الى حقول 🙂 نأخذ المرفق كالمثال من هذا الرابط : . هكذا تبدو السجلات ، بالعين المجردة : . والمطلوب ان نقسم بيانات السجل الواحد الى: الاسم ورقم التسلسل (وخلينا نستخدم السجل الاول كمثال) ، ونريد النتيجة تكون : . هناك طريقتين لفرز هذه البيانات : عن طريق كود ليقرأ الحروف/الارقام/العلامات واحدا واحدا ، ثم بوضع شروط اذا جصلنا على رقم ، فنتوقف ونحفظ الجزء الاول ، ثم نواصل ... ، وهذه العملية مرهقة وتحتاج الى تفاصيل كثيرة ، عن طريق الكود ، ولكن بإستخدام الدالة Split ، ويشترط فيها ان نعرف اين (بعد اي حرف/رقم/علامات) نقسم السطر ، ولنسمية شرط القطع . سنتعامل مع الطريقة الثانية وهي الاسهل 🙂 لمعرفة شرط القطع ، يمكننا ان نتعامل مع الحروف/الارقام/العلامات مباشرة ChrW ، او نتعامل مع ارقام هذه (الحروف/الارقام/العلامات) AscW ، وانا لا استغني عن هذه الصورة المرفقة لعملي ، الحرف Chr ، ومقابله رقمه Dec : . وبالنسبة للحروف العربية ، هذا رابطها : https://sites.psu.edu/symbolcodes/languages/mideast/arabic/arabicchart/ او https://www.ssec.wisc.edu/~tomw/java/unicode.html#x0600 وقد قمت باخذ البيانات من الموقع ورتبتها في صفحة واحد : فمثلا اول حروف اسم ابراهيم : ا = 1575 ، ب = 1576 ، ر = 1585 ، بمعنى AscW(ا) = 1575 , AscW(ب) = 1576 , AscW(ر) = 1585 والعكس يكون ChrW(1575) = ا , ChrW(1576) = ب , ChrW(1585) = ر . للحصول على الاسم ، نريد ان يكون لدينا شرط القطع بعد الاسم وقبل بداية الرقم (اي في المنطقة 1) ، للحصول على التسلسل ، نريد ان يكون لدينا شرط القطع بعد التسلسل وقبل بداية الاسم التالي (اي في المنطقة 2) ، لمعرفة شرط القطع يجب علينا ان نحلل البيانات التي يراها الكمبيوتر ، وذلك بتحويل الحروف/الارقام/العلامات الى AscW ، هذا الكود يقوم بهذه العملية: Public Function Split_Names() Dim rst As DAO.Recordset Dim x() As String Dim i As Long Dim a As String Set rst = CurrentDb.OpenRecordset("Select * From MyTxt_from_pdf") Do Until rst.EOF For i = 1 To Len(rst!Field1) a = Mid(rst!Field1, i, 1) 'الحروف/الارقام/العلامات a = a & "(" & AscW(a) & ") " 'رقمها AscW Debug.Print a Next i Loop rst.Close: Set rst = Nothing End Function ونناديه من نافذة الكود هكذا (يجب ان يكون الكيبور باللغة الانجليزة عند كتابة علامة الاستفهام) : . ونرى ان النتيجة للسجل الاول فقط : . وبعد التدقيق ، نلاحظ ان في نهاية الارقام نرى ان AscW التالية متكررة 8236 ثم 8236 ثم 32 ثم 32 ، وبذلك يمكننا استعمال هذه كشرط القطع بعد الاسم ا(1575) ق(1602) ل(1604) ح(1581) ا(1575) د(1583) م(1605) ح(1581) ي(1610) ا(1575) م(1605) و(1608) د(1583) د(1583) س(1587) ه(1607) ?(8236) ?(8236) ?(8236) -32 -32 -32 -32 -32 -32 . بعد الرقم 3(1635) 2(1634) ?(8236) ?(8236) ?(8236) ?(8236) -32 -32 -32 -32 . وعليه نستعمل هذا الكود ، ونرى نتيجته (للسجل الاول) : Do Until rst.EOF x = Split(rst!Field1, ChrW(8236) & ChrW(8236) & ChrW(32) & ChrW(32)) 'Name + ID For i = LBound(x) To UBound(x) Debug.Print x(i) Next i rst.MoveNext Loop ونتيجته ?ابراهيم احمد يحيى احمد? ??3 ?ابتهاج سامح نسيم اقلديوس? ??2 ?ابتسام محمد عبدا حماده? ??1?? . والآن خلينا نفكك الاسم من الرقم : Do Until rst.EOF x = Split(rst!Field1, ChrW(8236) & ChrW(8236) & ChrW(32) & ChrW(32)) 'Name + ID For i = LBound(x) To UBound(x) 'Debug.Print x(i) x2 = Split(x(i), ChrW(8236) & ChrW(32) & ChrW(32)) For j = LBound(x2) To UBound(x2) Debug.Print x2(j) Next j Next i rst.MoveNext Loop والنتيجة ?ابراهيم احمد يحيى احمد ??3 ?ابتهاج سامح نسيم اقلديوس ??2 ?ابتسام محمد عبدا حماده ??1?? . ونلاحظ من القائمة اعلاه ، ان علامات الاستفهام ارقامها ?(8235) ?(8234) ?(8236) . الخطوة الاخيرة هي تنظيف النتيجة من علامات الاستفهام هذه عن طريق الامر Replace ، والتخلص من المسافة الزائدة قبل وبعد النتيجة عن طريق الامر Trim ، وبعدها نريد ان نحفظ الاسم في اول حقل ، والرقم في الحقل الثاني: LBound دائما تساوي صفر Do Until rst.EOF x = Split(rst!Field1, ChrW(8236) & ChrW(8236) & ChrW(32) & ChrW(32)) 'Name + ID For i = LBound(x) To UBound(x) 'Debug.Print x(i) x2 = Split(x(i), ChrW(8236) & ChrW(32) & ChrW(32)) For j = LBound(x2) To UBound(x2) 'Debug.Print x2(j) a = Replace(x2(j), ChrW(8234), "") a = Replace(a, ChrW(8235), "") a = Replace(a, ChrW(8236), "") a = Trim(a) 'If j / 2 = Int(j / 2) Then If j = 0 Then 'even Debug.Print "Name: ", a Else 'odd Debug.Print "ID: " & a End If 'Debug.Print a Next j Next i rst.MoveNext Loop والنتيجة Name: ابراهيم احمد يحيى احمد ID: 3 Name: ابتهاج سامح نسيم اقلديوس ID: 2 Name: ابتسام محمد عبدا حماده ID: 1 Name: احمد السيد على محمد ID: 6 Name: ابراهيم كمال ابراهيم محمد ID: 5 Name: ابراهيم سمير عياد عطاا ID: 4 Name: احمد حسن احمد رسلن ID: 9 Name: احمد حجازى على محمد ID: 8 Name: احمد السيد محمد عبدالرحمن ID: 7 . -------------------------------------------------------- وفي سياق هذا الموضوع ، كان عندي مشروع القرآن الكريم ، وحفظه في قاعدة البيانات بعدة طرق: كل صفحة عبارة عن سجل ، وفي جدول آخر ، كل سطر في سجل ، وفي جدول آخر ، كل آية في سجل وقمت بتنزيل القرآن الكريم من مجمع الملك فهد لطباعة المصحف الشريف : https://fonts.qurancomplex.gov.sa/wp02/حفص والمرفق يحتوي على الخط العثماني ، والذي تم عمله في المجمع ، ولذا فهو يحتوي على حروف/ارقام/علامات AscW تختلف عن غيرها من الخطوط ، والطريقة الوحيدة لتفكيك الاسطر كانت بإتباع خطوات شبيهه بالخطوات اعلاه 🙂 جعفر
  4. السلام عليكم 🙂 هذا احد البرامج 🙂 الموقع : http://www.xpdfreader.com/about.html رابط التحميل : https://dl.xpdfreader.com/xpdf-tools-win-4.02.zip رابط البرامج في ملف التنزيل : http://www.xpdfreader.com/support.html وتوجد في الملف اوامر كل برنامج منهم ، وهذه اوامر البرنامج pdftoText الذي تريد العمل عليه : http://www.xpdfreader.com/pdftotext-man.html تجربتي قبل ان اكتب هذه المشاركة : استعملت احدى هذه الاوامر : pdftotext -enc UTF-8 -table M.pdf M.csv pdftotext -enc UTF-8 -table -nopgbrk M.pdf M.txt . وبالاكسس يصبح (رجاء مراعاة اسماء مجلدات مكان البرنامج ، وملف pdf ، وملف النتيجة txt ) : Dim App_Name As String Dim Input_File As String Dim Output_File As String Dim Command_Line As String App_Name = Chr(34) & Application.CurrentProject.Path & "\Data\pdftotext.exe" & Chr(34) Input_File = Chr(34) & Application.CurrentProject.Path & "\pdf_Files\abc.pdf" & Chr(34) Output_File = Chr(34) & Application.CurrentProject.Path & "\txt_Files\myTxt_from_pdf.txt" & Chr(34) Command_Line = App_Name & " -enc UTF-8 -table -nopgbrk " & Input_File & " " & Output_File 'Debug.Print Command_Line Shell_n_Wait Command_Line, vbHide . والوحدة النمطية Shell_n_Wait موجودة في البرنامج في هذا الرابط : https://www.officena.net/ib/topic/90906-كارنيهات-باستخدام-باركود-ماتركس-qr-code/ ثم لما نستورد/نربط ملف txt او csv لآول مرة الى الاكسس ، يجب ان نخبره بأن بتنسيق وصيغة البيانات : . . . ومثل ما اخبرتك في مشاركتي السابقة ، النتيجة لن تكون بالتنسيق الذي تريده ، فيجب عليك استعمال مجموعة من الاستعلامات في الاكسس ، لتفريق البيانات على الحقول الصحيحة 🙂 جعفر
  5. ملفات pdf نوعين: - نوع النص ، ويمكن استخلاص النص عن طريق بعض البرامج الصغيرة بأوامر Command Line من الاكسس ، وقد جربت احد البرامج فأعطاني النص حسب الحقول في الملف (اي انها مبعثرة بدون مسميات الحقول) ، - نوع الصور ، مثل الملفات اللي ينتجها السكانر ، ولإستيراد البيانات منها ، يجب تحويلها اولا الى نص عن طريق برامج OCR ، ولا توجد برامج صغيرة لعمل هذا للغة العربية 🙂 للعلم ، انا كنت من ضمن فريق عمل Abbyy في تجربة استعمال برنامجها Fine Reader لتحويل الصور الى نص عن طريق OCR في بداية مشوارهم ، واذكر اني اقترحت عليهم بعض الملاحظات التي كان لها دور في عمل قفزة لعمل البرنامج (لا اتكلم برمجيا ، وإنما بملاحظاتي كوني اتحدث واكتب العربية) ، ولكني ولشدة ضغط العمل في اوقات معينة ، فلم استطع تلبية طلباتهم ، وتوقفت عنهم 🙂 جعفر
  6. ممكن تختصرها الى : dl = Nz(DMax("idym", "tblNum", "(year([ddate]) & month([ddate]))='" & Format(Me.dDate, "yyyym") & "'"), 0) rd = int(Right([dl],3)) + 1 Me.IdYM = Format(Me.dDate, "yyyy/mm") & "/" & Format(rd, "000") ولكن تذكر ، انك تأخذ التاريخ من الحقل الآخر ، وليس من نفس الحقل الذي فيه الرقم. جعفر
  7. وعليكم السلام 🙂 في سنة 2009 كان لي تجربة مع برنامج https://www.abbyy.com/ والظاهر الآن اسمه https://pdf.abbyy.com/ كان الافضل (في اللغة الانجليزية) في تحويل الصور (صور الرسائل التي تم ادخالها في الكمبيوتر بالماسح الضوئي scanner ، او ملفات pdf التي تحتوي على صور) الى ملف وورد بصيغة كلمات يمكن التعديل عليها ، ويمكن بنسخة Corporate ، ان يقوم البرنامج بالعمل تلقائيا ، وممكن ان يقوم الاكسس بإعطاء التعليمات ، وفي النهاية يكون عندك ملف txt وتأخذ بياناته الى جدول الاكسس. للغة العربية ، وقتها كانت نسبة صحّة/دقة البيانات المأخوذة من الصور تساوي حوالي 30-50% ، ولا علم لي بها الآن 🙂 جعفر
  8. رحم الله إمرء عرف قدر نفسه 🙂 فأنا لا علم لي بأوامر SQL Server ، وحاولت ، لهذا السبب اخبرتك بأني : . لذا انصحك ان تستجدم كود اخي @صالح حمادي ، ويكون هكذا بمعلوماتك ، مع مراعاة ان تكون Dim str_conn As New ADODB.Connection Dim RS As New ADODB.Recordset str_conn.Open "Provider=SQLOLEDB;Integrated Security=SSPI;Initial Catalog=master;Data Source=\\128.122.1.130" Set RS = str_conn.Execute("select GETDATE()") 'MsgBox RS(0) Me.srvr_Date_Time = RS(0) Set RS = Nothing str_conn.Close او نمشي في طريق اكسس : جرب هذا الكود ، فهو يقوم بإضافة سجل ، ثم يقوم بالمقارنة : Private Sub Form_Load() 'Me.iCompare = IIf(Format([Server_Time], "dddd, dd-mm-yyyy, hh:nn AM/PM") = Format([Local_Time], "dddd, dd-mm-yyyy, hh:nn AM/PM"), "OK", "Not OK") DoCmd.GoToRecord , , acNewRec Me.Temp = Now() If Format([Server_Time], "dddd, dd-mm-yyyy, hh:nn AM/PM") = Format([Local_Time], "dddd, dd-mm-yyyy, hh:nn AM/PM") Then Me.iCompare = "OK" Me.iCompare.ForeColor = vbBlack Else Me.iCompare = "Not OK" Me.iCompare.ForeColor = vbRed End If End Sub جعفر
  9. شكرا لك اخي محمد ، ولكن الاستاذ عبدالله يقول استعمل DMax ولا تستعمل DCount ، للسبب رقم 2 في ملاحظتي اعلاه 🙂 جعفر
  10. هنا ملاحظة من الاستاذ المحاسب عبدالله قدور ، لما استعملت Dcount 🙂 جعفر
  11. هولولولولولو وي (انا ازغرد ) الحمدلله 🙂 بس طلب الآن ، بما انك عرفت المشكلة ، فرجاء تجرب بقية البرامج ، لأننا جميعا بذلنا الوقت والجهد ، ونستحق ان نعرف اذا برامجنا اشتغلت (اعتبرها ضريبة وعليك دفعها 🙂 ) جميعنا جربنا برامجنا بالمرفقات اللي وضعتها انت ، واشتغلت ، فالظاهر انك تتكلم عن ملف آخر لم ترفقه !! وشكرا اخوي kanory على إحسانك وتفضلك 🙂 جعفر
  12. وعليكم السلام 🙂 قمت بتغيير الكود ليناسب اسم الحقل 🙂 ولكن ومثل ما اخبرتك في آخر مشاركتي السابقة ، عملت جدول بإسم tbl_DateTime ، ونموذج يأخذ بياناته من الجدول ، ومن الجدول نأخذ وقت وتاريخ السيرفر ، فرجاء حوّل هذا الجدول الى SQL Server (بحيث انه لا يكون جدول اكسس) ، و اربطه مع النموذج ، ورجاء اخبرنا بالنتيجة : . اما المقارنة ، فهي بدون الثواني. جعفر 1250.Server_DateTime.mdb.zip
  13. العفو اخوي ابو ابراهيم ، فأنا من المتابعين لعملك دائما ، وبالتفصيل 🙂 جعفر
  14. اهلا وسهلا بك اخي الكريم في المنتدى 🙂 كنت سأتغاضى عن مخالفتك لقوانين المنتدى ، بوضع عنوان للسؤال لا يعطي مدلول للموضوع ، ولكن الواضح انك تعدمت بوضع عنوان لا علاقة له اصلا بالموضوع. يُغلق. ومرحبا بك بعمل موضوع آخر ، بمراعاة شروط المنتدى 🙂 جعفر
  15. احسنت ، ورحم الله والديك دنيا وآخرة 🙂 جعفر
  16. الموضوع سهل واخذ اكثر بكثير من حجمه 🙂 استعمل المرفق كالتالي: . . جعفر برنامج تصدير الطلاب للسجل الالكتروني حسب المادة معتمد.zip
  17. مسار الملف موجود في الكود : TESTFILE = Application.CurrentProject.Path & "\Template.csv" TESTFILE = Application.CurrentProject.Path معناه مسار البرنامج ، واذا كانت قاعدة بياناتك قسمين ، فهذا مسار برنامج الواجهة وليس الجداول & "\Template.csv" اسم الملف
  18. شوف اذا مشكلتك مثل هاي : جعفر
  19. هذا الكود مثل كود اخوي صالح ، يحاكي قاعدة البيانات SQL Server مباشرة ، ومثل ما نعرف ، بما ان SQL Server موجودة على السيرفر ، فالسيرفر يكون له اسم دخول وكلمة سر ، ولكن هناك طريقة بأن تقدر ان تعمل اسم المستخدم وكلمة السر في قاعدة بيانات SQL Server مباشرة ، ودون حصولك على اسم المستخدم وكلمة سر السيرفر ، فهذا الكود يقوم بهذا العمل : cmd.ActiveConnection = "Provider=SQLOLEDB هذا ثابت ولا يتغير ;DataSource=yourserver او اسم السيرفر IP ;Database=yourDB اسم قاعدة البيانات ;UID=test اسم المستخدم ;PWD=test;" كلمة السر مثلا cmd.ActiveConnection = "Provider='SQLOLEDB';DataSource='\\192.168.1.125';Database='PersonnelDB';UID='jjafferr';PWD='NoWayToExposeIT';" --------------------------------------- ولكن ، ايش لك في البحر واهواله ورزق الله على السيف !! جميع هذه الطرق للاشخاص الذين يريدون عمل مقارنة لساعة الجهاز مع ساعة السيرفر ، بينما انت تريد وقت السيرفر في برنامجك المرتبط بالـ SQL Server مباشرة ، فخلينا نعمل شيء انت تعرفه ومتعود عليه وما بتحتاج الى مساعدة ، فبدلا عن استعمال Dlookup ، اعمل جدول فيه 3 حقول: حقل الرقم التلقائي ، وحقل التاريخ التلقائي (وتكون القيمة الافتراضية: ()Now او ()getdate ) ، وحقل مؤقت ، واعمل نموذج له ، وعند تحميل النموذج ، اعمل كود للذهاب الى سجل جديد ( docmd.GoToRecord,,acNewRec ) ، وسترى قيمة حقل التاريخ التلقائي (وهو المطلوب 🙂 ) ، ومن غير ان تضيف اي سجل 🙂 جعفر
  20. لا انا ما عندي من هاي ، لا في الموقع ولا غيره ، فالحمدلله طمئنتني جعفر
  21. بس انا اسمي موجود ، وانا انسان حساس جعفر
  22. انت اخبرتني انك تريد الكود على هذا الزر ، فوضعته هناك 🙂 وللعلم ، علشان الكود يشتغل ، يجب ان يكون الملف Template.csv في نفس مجلد البرنامج. جعفر
  23. تفضل 🙂 ونماذج برنامجك فيها خطأ لما تفتحها في وضع التصميم ، فقمت بإستيراد كائنات برنامجك الى برنامج جديد ، وانتهت المشكلة ، فرجاء استعمل هذا الملف من الآن ، والسؤال الآخر ، ليش لازلت تستعمل صيغة mdb ، انتقل الى accdb ، إلا اذا المستخدمين عنهم اكسس 2003 فما دون !! جعفر برنامج تصدير الطلاب للسجل الالكتروني حسب المادة معتمد.zip
  24. 🙂 هذا الكود الكامل : Dim TextLine Dim x() As String Dim TESTFILE As String Dim rst As DAO.Recordset Set rst = CurrentDb.OpenRecordset("Select * From Mobaile") TESTFILE = Application.CurrentProject.Path & "\Template.csv" Open TESTFILE For Input As #1 ' Open file. Do While Not EOF(1) ' Loop until end of file. Line Input #1, TextLine ' Read line into variable. 'Debug.Print TextLine ' Print to the Immediate window. x = Split(TextLine, ";") If x(0) <> "IdentificationID" Then rst.AddNew rst!IdentificationID = x(0) rst!FullName = x(1) rst!MobileNumber = x(2) rst!ClassName = x(3) rst.Update End If Loop Close #1 ' Close file. rst.close: set rst = nothing جعفر
×
×
  • اضف...

Important Information