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

أبو إبراهيم الغامدي

أوفيسنا
  • Posts

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

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

  • Days Won

    13

كل منشورات العضو أبو إبراهيم الغامدي

  1. أهلا بك @حميد المعزبي الفكرة هي إيجاد مكان ما نقوم بتخزين عناوين حقول البيانات باللغات المطلوبة، وأنسب مكان في نظري هو موضع وصف حقول الجدول في عرض التصميم. عند عمل تصميم نموذج مبني على جدول البيانات سوف يقوم المعالج بإدراج مربع نص مع العنوان لكل حقل بيانات ويسميه بنفس اسم حقل البيانات. قمت باستغلال هذه الميزة في استدعاء موضع وصف حقول الجدول وجعلت بياناته قيمة لعنوان مربع النص.. إذا كانت موضع الوصف يحتوي بيانات متعددة يتم تحويلها إلى مصفوفة. .. لكن يبقى السؤال المهم! لماذا نريد استخدام واجهة متعددة اللغات لبيانات لا تكتب إلا بلغة واحدة! في الغالب العام الواجهات متعددة اللغات تكون في البرامج والمواقع التي يكون الجمهور طرفا فيها وهم من يقوم بإدخال البيانات.. وهذا بالتأكيد الواجهات متعددة اللغات أمر ضروري فيها. أما واجهات برامج البيئة الوظيفية فهي تعتمد على البيانات المدخلة من قبل الموظفين.. فلا يتصور بيانات عربية تكون واجهات برامجها باللغة الانجليزية.. والعكس صحيح.. لأن هذا يعد أمرا مَعيبا في هكذا برامج...
  2. وعليكم لسلام ورحمة الله وبركاته من مراجعتي لقاعدة البيانات.. أستطيع القول فهمك للفكرة سليم جدا، وبداية عملك موفقة! لكن انغلق تفكيرك فيما يبدو لي عند الأمور التالية - تسمية مربعات النص التي والبيانات التي تحملها. - أدوار الفندق وكيفية تمثيلها في النموذج. - البيانات المتعلقة بالتاريخ وكيفية تمثيلها في مربعات التاريخ. لن أقوم بحل هذه الإشكالات لكن أضعك أمام هذا التعديل وأنا متأكد تماما أنه سوف ينقدح ذهنك وتكون قادرا بإذن الله على إكمال مشروعك بكل اقتدار.. ** سوف تجد أن بيانات الغرفة رقم (103) ليست في مكانها الصحيح وذلك لأني لم أقم بإعادة تسمية مربعات النص الخاصة بهذه الغرفة. ** في اعتقادي أن عنصر التحكم: عنوان (Label) أفضل من مربعات النص (TextBox). Hotel_.zip
  3. يعني هل في طريقه بحكم خبرت الاخوه الاعضاء في المنتدي وجزاك الله خيرا على الرد وهذا لطف منكم اعتقد أن الأمر يحكمه اعتبارات فنية كثيرة.. لكن لابأس بشيء من التسلية. إليك هذه البداية مع بعض الأخطاء! Inventory.zip وهذه شفرتها Sub LengSelect(L) On Error Resume Next Dim Ctl As Control Dim RS As Recordset Dim PCN, NLC Set RS = Me.RecordsetClone For Each Ctl In Me.Detail.Controls If Ctl.ControlType = acLabel Then PCN = Ctl.Parent.Name NLC = Split(RS(PCN).Properties("description"), "|")(L) Ctl.Caption = NLC End If Next End Sub Private Sub FraLeng_Click() LengSelect (Me.FraLeng) End Sub
  4. جرب التعديل التالي وسوف تتضح الصورة لديك اختر Admin أو A.Salah UsersAutho.zip
  5. لماذا تبحث في جدول Users! من المفترض أن تبحث في Table1
  6. وعليكم السلام ورحمة الله أنت بحاجة إلى وسيط ثالث يقوم بتحديد هوية المستخدم أولا حتى تتمكن من تطبيق الفكرة. يمكن تحديد هوية المستخدم بأحد الطرق التالية: * الطريقة التقليدية.. وهي عمل نموذج إدخال لهوية المستخدم وبعد ذلك تقوم بمطابقة هوية المستخدم مع الهوية في جدول التوجيه بالطريقة التالية DoCmd.OpenForm Dlookup("[Wanted]","Table1",UserName='" & Me.UserName & "'"), acNormal * الطريقة غير التقليدية.. وهي الاستفادة من هوية مستخدم ووندوز كوسيط للدحول، لكن هذه الطريقة تحتاج إلى أن تكون قاعدة البيانات في مجلد مشترك وفي بيئة متعددة المستخدمين، إما على جهاز واحد، أو أجهزة شبكية متعددة بالطريقة التالية DoCmd.OpenForm Dlookup("[Wanted]","Table1",UserName='" & Environ("UserName") & "'"), acNormal لتطبيق هذا الخيار بشكل أفضل يستحسن عمل وظيفة للقلاع مع الميكرو Autoexec
  7. نعم أستاذ شيفان.. إليك الوظيفة التالية Function GetNumbersOnly(SText) Dim Numbers For i = 1 To Len(SText) If IsNumeric(Mid(SText, i, 1)) Then Numbers = Numbers & Mid(SText, i, 1) End If Next GetNumbersOnly = Trim(Numbers) End Function New Microsoft Access Database.zip
  8. وعليكم السلام ورحمة الله وبركاته لم أر في الشفرة التي أرفقتها ما يريب سوى سطرين فقط DoCmd.GoToRecord , "", acNewRec استبدل هذه الصيغة بالصيغة التالية أين ماوجدت DoCmd.GoToRecord , , acNewRec
  9. وعليكم السلام ورحمة الله يمكنك أيضا استخدام الوظيفة التالية في استعلام Function GetNumbers(SText) For i = 1 To Len(SText) If Not (IsNumeric(Left(SText, i))) Then GetNumbers = Left(SText, i - 1) Exit Function End If Next End Function New Microsoft Access Database.zip
  10. تأكد من أنك تستورد في قاعدة بيانات خالية ثم قم باستيراد جميع الجداول حتى جداول النظام. جداول النظام فيها بيانات العلاقات الخاصة بالجداول
  11. هذا الرسالة لمكتبة مرجع مفقودة.. إذهب لمكتبة المراجع وحرر ارتباط المكتبة المفقود فقط.. المكتبة لا علاقة لها بالتعديل. إليك التعديل Linked tables.zip
  12. وعليكم السلام من الممكن اعادة استثمار رسالة الخطأ برسالة مخصصة من قبلك إليك التعديل Linked tables.zip
  13. السلام عليكم جميعا يمكنك فعل ذلك عن طريق الحشر بالطريقة التالية Object.[event]="=MsgBox('Say Something')" يمكنك استخدام جميع وظائف أكسس، أو إنشاء وظائف خاصة، كما يمكنك استخدام الميكرو أيضا تنبيه الإجراءات ()SUB لا يعمل هنا لأنه لا يقبل الاسناد! إليك مرفق الاستاذ أبو خليل بعد التعديل db1.zip
  14. وعليكم السلام ورحمة الله وبركاته أهل هيثم.. النموذج الموجود في المرفق لا يدعم الفكرة التي تريد طبيقها من جميع النواحي! النموذج يوجد به عناصر تحكم غير التي تظهر في الواجهة سببت بعض الإرباك الشفرة في النموذج مبهمة وغير مرتبة وهي بحاجة إلى تحليل وتبسيط الهدف من استيراد شرائح البيانات غير واضح؛ ولذلك لن يكون بالإمكان اقتراح حلول متقدمة تخدمك هدفك إليك المرفق مع بعض الترقيع.. excel to access.zip
  15. إليكم طريقة أخرى للحل Public Function Last2Records(id, Position) On Error Resume Next Dim RS As Recordset, L2R Set RS = CurrentDb.OpenRecordset("Select emp_id,CInt(rep_year) as RepYear,rep From report " _ & "Where emp_id=" & id _ & " ORDER BY emp_id,Cint(rep_year) Desc") L2R = RS.GetRows(2) Last2Records = L2R(1, Position) End Function بعد فرز البيانات تنازليا من السجلات العائدة من الاستعلام بشرط معرف الموظف نأخذ أول سجلين منها (تمثل أعلى قيمتين) عن طريق ()GetRows يعيد هذا المنهج مصفوفة ثائية الآبعاد؛ البعد الأول يمثل حقل البيانات، والآخر يمثل سطر البيانات تأخذ الوظيفة متغيرين الأول معرف الموظف، والثاني موضع السجل قيمة؛ بين (0 و 1) يصدر عن الوظيفة الخطأ (Out Of Range) إذا كانت اسطر البيانات أقل من أثنين.. يمكن تجاوزه بـ (Resume Next) استخدمت هذه الوظيفة في استعلام لجدول الموظفين؛ اسندت السجل الأول (0) إلى Rep_last باعتباره أعلى قيمة والسجل الثاني(1) إلى Rep_before باعتباره أدنى قيمة الرجاء مراجعة الاستعلام Last2Years db2.zip
  16. السلام عليكم جميعا أعجبني طرحكم وتناولكم لطرق حل إعادة آخر سنتين! إليكم طريقة أخرى عن طريق محرر الاستعلام SELECT report.emp_id, report.rep_year, report.rep, * FROM report WHERE (((report.rep_year) In (select top 2 rep_year from report ORDER BY emp_id, rep_year DESC))); db1.zip
  17. أنت على الطريق الصحيح والوظيفة التي أنشأتها 90% لكن تحتاج إلى تبسيط بعض الشيء.. فقط اتبع الخطوات التالية قم بنقل الوظيفة إلى وحدة نمطية عامة إذا لم تكن كذلك غير السطر الأول إلى التالي // لاحظ أنا غيرنا نوع البيانات إلى متنوع بدلا من تاريخ، ثم جعلنا الوظيفة تعيد قيمة منطقية Public Function LTDYS(LftDate As Variant, MyPtNm As String) As Boolean احذف السطر التالي // البيانات من نوع تاريخ تعيد سلسلة طويلة من التاريخ والوقت // DateSerial() ولذلك لجأت إلى MyDate = DateSerial(Year(LftDate), Month(LftDate), Day(LftDate)) غير السطر التالي // البيانات من نوع متنوع تعيد التاريخ كما هو وبالتالي لا حاجة إلى إعادة تركيبه //LValue = DateDiff("d", MyDate, Date) LValue = DateDiff("d", LftDate, Date) غير الأسطر التالية // MyCancel = False // Else // MyCancel = True // DoCmd.RunCommand acCmdUndo // False إذا كانت الإجابة العائدة من الرسالة تكون القيمة الراجعة من الوظيفة LTDYS = False Else // True وإذا كانت نعم تكون القيمة الراجعة LTDYS = True انتهت الوظيفة.. والقيمة الراجعة تسند إلى متغير الحدث قبل التحديث كا التالي // في حدث قبل التحديث // في نظري المتغير الثاني زائد Cancel=LDays(Me.YourDate,MyPtNm) هناك أشياء في الوظيفة لا تدعم الفكرة التي ذكرتها في مشاركتك؛ ولذلك تجاهلتها.. إذا كنت ترى أنها ضرورية قم بتفسيرها
  18. صيغة الشفرة السابقة فيها بعض الطول! وهذا اختصارها Public Function ULast(Expr As String, Domain As String, Optional Criteria) Dim RS As Recordset If IsMissing(Criteria) Then Criteria = "1=1" End If Set RS = CurrentDb.OpenRecordset("Select Top 1 " & Expr & " From " & _ Domain & " Where " & Criteria & " Order By " & Expr & " Desc") ULast = RS(0) End Function Public Function UFirst(Expr As String, Domain As String, Optional Criteria) Dim RS As Recordset If IsMissing(Criteria) Then Criteria = "1=1" End If Set RS = CurrentDb.OpenRecordset("Select Top 1 " & Expr & " From " & _ Domain & " Where " & Criteria & " Order By " & Expr & " Acs") UFirst = RS(0) End Function
  19. يمكن أن نصور ما قرره الاستاذين @جعفر و @رمهان بالدالتين التاليتين Public Function ULast(Expr As String, Domain As String, Optional Criteria) Dim RS As Recordset If IsMissing(Criteria) Then Set RS = CurrentDb.OpenRecordset("Select Top 1 " & Expr & " From " & _ Domain & " Order By " & Expr & " Desc") ULast = RS(0) Else Set RS = CurrentDb.OpenRecordset("Select Top 1 " & Expr & " From " & _ Domain & " Where " & Criteria & " Order By " & Expr & " Desc") ULast = RS(0) End If End Function Public Function UFirst(Expr As String, Domain As String, Optional Criteria) Dim RS As Recordset If IsMissing(Criteria) Then Set RS = CurrentDb.OpenRecordset("Select Top 1 " & Expr & " From " & _ Domain & " Order By " & Expr & " Asc") UFirst = RS(0) Else Set RS = CurrentDb.OpenRecordset("Select Top 1 " & Expr & " From " & _ Domain & " Where " & Criteria & " Order By " & Expr & " Acs") UFirst = RS(0) End If End Function
  20. أستاذ رمهان.. برجاء قراءة هذين المقالين 64-bit editions of Office 2013 64-Bit Visual Basic for Applications Overview
  21. بل مشاركاتك واطروحاتك مثار اهتمام واعجاب بالنسبة لي.. دم في تألقك أستاذ عبد الفتاح
  22. نعم العبارة فضة بعض الشيء.. والمقصود منها لفت الانتباه نأتي للتعليل.. الأولى .. القيمة الافتراضية.. هي قيمة في سجل جديد فقط .. قد تكون جديدة وقد تكون متكررة.. لكن لا يعتبرها أكسس افتراضبة الإ إذا كانت بصيغة الإسناد الذي أشرتُ إليه، وليس الإسناد المباشر! يمكن استخدام القيمة الافتراضية كما فعلتُ في يجب الثانية أو وضعها في خصائص الحقل الحامل للقيمة الافتراضية؛ في النموذج أو الجدول أيضاً. ** السجل الحالي: هو السجل الذي يقع عليه المؤشر .. هذا السجل إما أن يكون جديداً، أو مغلقاً! ** السجل المحرر: هو السجل الذي بدأ للتو الكتابة فيه إما بالإدخال، أو التعديل! .. .. هنا يبرز الحدثان [قبل التحديث]، [بعد التحديث].. ** الحدث قبل التحديث ينقدح عند بدء انتقال المؤشر من (الحقل.. السجل.. بالتسلسل) ** الحدث بعد التحديث ينقدح بعد انتقال المؤشر من (الحقل.. السجل.. بالتسلسل) أي إسناد للقيم في هذين الحدثين لا يتوقع ظهورهما إلا في الفترة بين بدء الانتقل وبعده .. ولهذا بالكاد تُرى القيم العائدة من ذلك الإسناد أما لماذا على مستوى الحقل وليس على مستوى النموذج على مستوى النموذج.. يتحتم انتقال المؤشر من السجل بالكامل.. وبالتالي لن تتمكن من التحقق الإ عند مغادرة السجل.. فلو كانت البيانات المطلوب التحقق منها في أو ل حقل فقد يترسل المستخدم في الإدخال حتى يخرج من السجل.. وعندها يضطر للتراجع عن جميع المدخلات لنها تتبع سجلا موجوداً بالفعل.. وهذا هدر للوقت! أما على مستوي الحقل فلأن بيانات هذا الحقل هي المطلوب فحصها بالفعل.. ومن المفترض عدم مغادة الحقل الإ إذا كانت البيانات صحيحة.. ثم إنه أحيانا يكون هناك أكثر من حقل يحمل بيانات فريدة مثل (الرقم الوظيفي مع الرقم القومي) أو (الرقم الطبي مع الرقم القومي) وهكذا.. فلو كان التحقق على مستوى السجل لن يكون بالإمكان معرفة أين وقع التكرار! والأسلوب الأول هو أسلوب أكسس عند تعريف البيانات على أنها بيانات فريدة !! تنبيه.. الاستخدام التالي خطأ! والصيحيح أحد الصيغتين التاليتين Me.TelName Me.TelName.Value
  23. القيمة الافتراضية للحقل يجب أن تكون بهذا النسق Me.TelID.DefaultValue = DMax("[eqamaid]", "tbleqama") + 1 ثانيا.. يجب أن تكون العبارة السابقة السابقة في حدث السجل الحالي للنموذج Form_Current event مع وضعها ضمن جملة شرطية Private Sub Form_Current() If NewRecord Then Me.eqamaid.DefaultValue = DMax("[eqamaid]", "tbleqama") + 1 End If End Sub ثالثا أن يكون حدث التحقق على مستوى الحقل وليس على مستوى النموذج Private Sub eqama_BeforeUpdate(Cancel As Integer) If DCount("eqama", "[tbleqama]", "[eqama]= '" & Me.eqama & "'") > 0 Then MsgBox "محل إقامة موجود مسبقا....", , "تنبيه" Cancel = True Me.Undo End If End Sub إليكم التطبيق منع التكرار.zip
  24. أجل من خصائص شريط الأدوات قم بتعديل خيار ظهور الأيقونة إلى always، أظن هذه طريقتها في Win7
×
×
  • اضف...

Important Information