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

كل الانشطه

هذه الصفحة تحدث تلقائياً

  1. Today
  2. مطلوب فتح مرفق داخل قاعدة البيانات بدون مسار خارجي هذا هو الطلب الاساسي وأنا أعطيتك الحل الامثل من قبل !!!!!
  3. استاذ @بلال اليامين اليك الشرح والمرفق حسب مافهمت . فتح النماذج والتقارير بنفس النموذج . Bilal_Yamen.rar
  4. VBaccess ::: اريد مساعدتك في انشاء استعلام Formulaire أرى أن لديك عدة ملفات تمثل جداول قاعدة بيانات، وأحتاج إلى مساعدتك في إنشاء استعلام أو نموذج (Form) في Microsoft Access. لكن البيانات المقدمة غير منظمة بوضوح، ويبدو أن هناك أخطاء في تنسيق الجداول. سأحاول مساعدتك بافتراض أنك تريد ربط هذه الجداول وإنشاء استعلام يدمج البيانات، أو نموذج لإدخال بيانات التدخلات (Intervention). 📌 الخطوات المقترحة: 1️⃣ تنظيم الجداول أولاً: ستحتاج إلى الجداول التالية: 1. Equipement (الآلات) o code_eq o nom_eq o marque o prix_achet 2. Piece (القطع) o code_piece o designation o cout_unitaire o stock 3. Composition (تركيب الآلة) o code_eq o code_piece o quantite 4. Intervenant (الفنيون) o code_iter o nom o prenom o specialite o tel 5. Intervention (التدخلات) o num_interv o date_interv o code_eq o code_iter 6. BonSortie (أذونات الخروج) o num_bon o date_emis o validation o usage o code_iter o code_eq 7. BonSortiePiece (تفاصيل قطع أذونات الخروج) o num_bon o code_piece o quantite_so 2️⃣ استعلام نموذجي يربط التدخلات مع الفنيين والآلات: SELECT Intervention.num_interv, Intervention.date_interv, Equipement.nom_eq, Intervenant.nom, Intervenant.prenom FROM (Intervention INNER JOIN Equipement ON Intervention.code_eq = Equipement.code_eq) INNER JOIN Intervenant ON Intervention.code_iter = Intervenant.code_iter; 3️⃣ نموذج (Form) لإدخال تدخل جديد: يمكنك إنشاء Form يعتمد على جدول Intervention، مع إضافة Combo Box لاختيار: · code_eq (من جدول Equipement) · code_iter (من جدول Intervenant) 4️⃣ استعلام لحساب تكلفة قطع الآلة: SELECT Composition.code_eq, Sum(Piece.cout_unitaire * Composition.quantite) AS CoutTotalPieces FROM Composition INNER JOIN Piece ON Composition.code_piece = Piece.code_piece GROUP BY Composition.code_eq; سأعطيك كل استعلام وتقرير بشكل منفصل مع اسم مناسب لكل واحد: 📋 أسماء وتفاصيل الاستعلامات: 1. الاستعلام: Qry_Interventions_Details الوصف: يعرض كل التدخلات مع معلومات الفني والآلة SELECT Intervention.num_interv, Intervention.date_interv, Equipement.nom_eq, Equipement.marque, Intervenant.nom & " " & Intervenant.prenom AS Intervenant_Complet, Intervenant.specialite, Intervenant.tel FROM (Intervention INNER JOIN Equipement ON Intervention.code_eq = Equipement.code_eq) INNER JOIN Intervenant ON Intervention.code_iter = Intervenant.code_iter ORDER BY Intervention.date_interv DESC; 2. الاستعلام: Qry_Cout_Par_Equipement الوصف: يحسب تكلفة القطع لكل آلة SELECT Composition.code_eq, Equipement.nom_eq, Sum(Piece.cout_unitaire * Composition.quantite) AS CoutTotalPieces, Count(Composition.code_piece) AS NombrePiecesDifferentes FROM (Composition INNER JOIN Piece ON Composition.code_piece = Piece.code_piece) INNER JOIN Equipement ON Composition.code_eq = Equipement.code_eq GROUP BY Composition.code_eq, Equipement.nom_eq; 3. الاستعلام: Qry_BonsSortie_Complets الوصف: يعرض أذونات الخروج مع تفاصيل القطع والتكاليف SELECT BonSortie.num_bon, BonSortie.date_emis, BonSortie.validation, BonSortie.usage, Equipement.nom_eq, Intervenant.nom & " " & Intervenant.prenom AS Intervenant_Complet, BonSortiePiece.code_piece, Piece.designation, BonSortiePiece.quantite_so, Piece.cout_unitaire, (BonSortiePiece.quantite_so * Piece.cout_unitaire) AS CoutTotalLigne FROM ((BonSortie INNER JOIN BonSortiePiece ON BonSortie.num_bon = BonSortiePiece.num_bon) INNER JOIN Piece ON BonSortiePiece.code_piece = Piece.code_piece) INNER JOIN Equipement ON BonSortie.code_eq = Equipement.code_eq INNER JOIN Intervenant ON BonSortie.code_iter = Intervenant.code_iter; 4. الاستعلام: Qry_Stock_Critique الوصف: يعرض القطع التي كمية المخزون فيها أقل من 10 SELECT Piece.code_piece, Piece.designation, Piece.cout_unitaire, Piece.stock, "إعادة التموين مطلوبة" AS Etat FROM Piece WHERE Piece.stock < 10 ORDER BY Piece.stock ASC; 5. الاستعلام: Qry_Intervenants_Activite الوصف: إحصاء عدد التدخلات لكل فني SELECT Intervenant.code_iter, Intervenant.nom & " " & Intervenant.prenom AS Intervenant_Complet, Intervenant.specialite, Count(Intervention.num_interv) AS NombreInterventions, Min(Intervention.date_interv) AS PremiereIntervention, Max(Intervention.date_interv) AS DerniereIntervention FROM Intervention INNER JOIN Intervenant ON Intervention.code_iter = Intervenant.code_iter GROUP BY Intervenant.code_iter, Intervenant.nom & " " & Intervenant.prenom, Intervenant.specialite ORDER BY Count(Intervention.num_interv) DESC; 📊 أسماء وتفاصيل التقارير: 1. التقرير: Rpt_Interventions_Mensuelles مصدر البيانات: Qry_Interventions_Details الوصف: تقرير شهري للتدخلات مصنفة حسب الفنيين 2. التقرير: Rpt_BonsSortie مصدر البيانات: Qry_BonsSortie_Complets الوصف: تقرير مفصل لأذونات الخروج مع التكاليف 3. التقرير: Rpt_Stock_Alerte مصدر البيانات: Qry_Stock_Critique الوصف: تقرير تنبيهي للقطع التي تحتاج لإعادة تموين 4. التقرير: Rpt_Activite_Intervenants مصدر البيانات: Qry_Intervenants_Activite الوصف: تقرير إحصائي لنشاط الفنيين 5. التقرير: Rpt_Cout_Equipements مصدر البيانات: Qry_Cout_Par_Equipement الوصف: تقرير تكاليف القطع لكل آلة 🎯 توصية ترتيب التنفيذ: 1. ابدأ بـ: Qry_Interventions_Details 2. ثم: Qry_Stock_Critique (للمراقبة اليومية) 3. ثم: Rpt_Interventions_Mensuelles (للتقارير الشهرية) لو شايف الموضع شرحه طويل ... عدل الجداول كما اسلفت واملأها بالبيانات ثم ا كتب ماتريده بالضبط باللغة العربية كي أفهمك وانشاء الله بسوي طلبك .
  5. Yesterday
  6. وعليكم السلام ورحمة الله وبركاته .. أخي بلال أنت عضو فضي ( نتمنى لك المزيد من الدرجات ) ، وما زلت - متأسفاً منك - لا تهتم لأي ملاحظات يتم طرحها خلال المشاركات أو قوانين المنتدى . العنوان :- نكتشف أن مقصده ومعناه مختلف عما تريده أنت . الشرح :- تبخل على أخوانك في المنتدى بالشرح وتكتفي بكلمات لا تتعدى أصابع اليد . إرفاق ملف :- برأيك هل الصورة و 8 كلمات كافيات لتوصيل ما تفكر به لمن يقرأ الموضوع دون ارفاق ملف !!! شكراً لك على رحابة صدرك مراراً وتكراراً في تقبل الملاحظات التي ليس لها هدف إلا أن تحظى بطريق سليم لتوصيل معلومتك
  7. السلام عليكم اريد فتح التقرير عن طريق البدياف داخل النموذج اليكم الشرح
  8. السلام عليكم ورحمة الله وبركاته اريد مساعدتك في انشاء استعلام Formulaire لقد وجهت صعوبة في إنشاءه لذا أرجوا من الإخوة الكرام مساعدتي med.rar
  9. 1. النموذج الفرعي المسمى dm_b هوه نموذج عمل تحضير مؤقت ويأخذ بياناته من جدول subcar_b وجدول subcar_b ياخذ بياناته من جدول cars / بعد التحديث من خانة xc / حساب الايراد 2. عند الضغط على زر حفظ .. يعمل النموذج الفرعي على اللحاق البيانات الموجود به الى جدول recept و enar_dman 3. بعد الالحاق الى الجدولين يقوم نموذج الفرعي dm_b بحذف سجلاته عند اغلاق النموذج 4. وأخيرا النموذج الفرعي المسمى m_a هوه يعرض السجلات الخاصه به عند البحث في خانة ek ملاحظه : النموذج يعمل بشكل جيد ولكن عند تغيير التاريخ بعد عدد من السجلات واعادة تغيير التاريخ يحصل الخطاء New Microsoft Access Database - Copy.accdb
  10. كفكرة خطرت ببالي وقد حدثتها الى ما يلي :- أن تكون الدالة عامة شاملة ويمكن استخدامها في أكثر من موضع أو جدول أو حقل أو سجل أو حتى عدد مرفقات . بحيث جعلتها تقبل استقبال اسم الجدول ، واسم حقل المرفقات ، واسم حقل لتحديد السجل ، ومربع النص = تحديد اي سجل ، ورقم المرفق لو كان الحقل متعدد المرفقات . فآكسيس يتعامل مع أول مرفق كقيمة تسلسلية = 0 ( كما هو الحال في الأعمدة داخل الكومبوبوكس مثلاً أو الليست بوكس ) . لذا حدّثتها لتكون بهذا الشكل :- Public Sub OpenSpecificAttachment(ByVal TableName As String, _ ByVal AttachmentField As String, _ ByVal PKFieldName As String, _ ByVal RecordID As Long, _ Optional ByVal AttachmentIndex As Integer = 0) Dim rs As DAO.Recordset Dim rst As DAO.Recordset2 Dim filePath As String Dim cachePath As String Dim subFolder As String cachePath = Environ("LOCALAPPDATA") & "\Microsoft\Windows\INetCache\" Randomize subFolder = "Foksh" & Int((9999 * Rnd) + 1) If Dir(cachePath & subFolder, vbDirectory) = "" Then MkDir cachePath & subFolder CreatedFolders.Add cachePath & subFolder End If Set rs = CurrentDb.OpenRecordset("SELECT " & AttachmentField & " FROM " & TableName & _ " WHERE " & PKFieldName & "=" & RecordID) Set rst = rs.Fields(AttachmentField).Value If AttachmentIndex > 0 Then rst.Move AttachmentIndex Else rst.MoveFirst End If If Not rst.EOF Then filePath = cachePath & subFolder & "\" & rst.Fields("FileName").Value If Dir(filePath) = "" Then rst.Fields("FileData").SaveToFile filePath End If FollowHyperlink filePath End If rst.Close: Set rst = Nothing rs.Close: Set rs = Nothing End Sub بحيث تم تمرير باراميتر افتراضي القيمة للمرفق الأول لسهولة الإستدعاء ، حيث سيكون الإستدعاء متعدد الأشكال كما يلي :- Call OpenSpecificAttachment("tblEnDc", "progIcon", "ID", Me.ID) 'المرفق الأول أو الوحيد Call OpenSpecificAttachment("tblEnDc", "progIcon", "ID", Me.ID, 0) ' المرفق الأول أو الوحيد أيضاً Call OpenSpecificAttachment("tblEnDc", "progIcon", "ID", Me.ID, 1) ' المرفق الثاني اذا كان عدد المرفقات أكثر من واحد Call OpenSpecificAttachment("tblEnDc", "progIcon", "ID", Me.ID, 2) ' المرفق الثالث اذا كان عدد المرفقات أكثر من واحد وعند الخروج من النموذج ، ولحذف المجلد بشكل آمن ، قمت بجعل الدالة التي تفتح المرفق تقوم بتسجيل اسم المجلد الذي أنشأته في قائمة ( Collection ) . وعند إغلاق النموذج ، تمر على هذه القائمة فقط وتحذف المجلدات التي أنشأناها عند استعراض المرفقات . حيث تم تعريف المتغير التالي في أول المديول :- Public CreatedFolders As New Collection وإضافة الدالة التالية التي تقوم على حذف المجلد بما يحتويه :- Public Sub SafeDeleteFolder(ByVal folderPath As String) Dim f As String On Error Resume Next f = Dir(folderPath & "\*.*", vbNormal) Do While f <> "" Kill folderPath & "\" & f f = Dir Loop RmDir folderPath End Sub وبالتالي عند إغلاق النموذج ، تم استخدام الكود التالي لتمرير الحذف للمجلدات :- Private Sub Form_Close() Dim folderPath As Variant On Error Resume Next For Each folderPath In CreatedFolders Call SafeDeleteFolder(folderPath) Next Set CreatedFolders = Nothing End Sub ليصبح المرفق كالتالي كاملاً متكاملاً :- DbTest.zip
  11. لحظه سأقوم بتحويل الاستعلامات من sql الى استعلام عادي واشرحلك عمل الجداول والية عمل النموذج استاذ فادي
  12. وعليكم السلام ورحمة الله وبركاته .. فقط وضح لنا أخي بشار عن آلية إضافة السجلات في النموذج enar_dman حتى نتتبع الخلل .
  13. السلام عليكم ,,, عندي مشكلتين في الملف المرفق بعد اضافة عدد من سجلات الى جدولين والامور تمشي تمام ولكن عند الانتهاء (وقبل الخروج من النموذج ) و عند الاستعلام والبحث في خانة ek الخاصه بالبحث اواجه مشكلتين 1. يتم اضافة سجل جديد لاحاجه له ويلخبط مسلسل السجلات/ السبب انه ياخذ سجل جديد بسبب كود التاريخ 2. اجد في خانة المسميه ssa بالنموذج (ان الرقم تغير في بعض السجلات) الى رقم آخر ممايسبب مشكله في التنقل بين السجلات والحسابات ارجو المساعد من الخبراء مع العلم ان هناك اكواد , عملها سابقا الاستاذ القدير فوكش وقمت انا بالتحديث عليها الا ان وصلت الى هذه المشكلتين 😟 acc.rar
  14. اضافة الى ما تفضل به اخي @Foksh آمل ان تأخذ هذه التوجيهات والملاحظات بصدر رحب .. لأنها تصب في صالحك اولا : هذا المنتدى تعليمي برمجي يلجأ اليه الأعضاء عندما يواجهون مشكلة في تنفيذ فكرة ما برمجية ايضا هو منتدى تعليمي لمن اراد التعلم و زيادة خبرته في كيفية انشاء مشاريع اكسس اذا الطالب الحريص يبدأ من اول درجات السلم ويعمل بجد حتى يرى نفسه متقنا للصنعة مشاريع اكسس تبدأ من : 1- الجداول // دراستها والطرق الصحيحة العلمية لإنشائها قبل الشروع في اعداد الجداول يجب تحليل بيانات المشروع وتصور ابعاده( المدخلات بانواعها / المخرجات بانواعها ) عند الاحاطة بابعاد المشروع (على اعتبار انه يعمل على الارض وعلى الورق) يمكن تحديد الجداول المطلوب انشاءها هذه الخطوات الاولية تعتبر اساس ومخ المشروع .. اذا تم اعداده بطرق سليمة فقد انهيت 75% الى 80% من القاعدة الأساسية للمشروع وحينها سيصبح استكمال بقية المشروع ممتعا للمبرمج ____________________________ لذا ان كنت جادا في التعلم فاعرض موضوعك بطريقة اخرى وعلى مراحل كثيرة : اول مرحلة : تفتح موضوعا جديدا تعرض فيه فكرة البرنامج وبتفاصيل دقيقة وتطلب رأي الخبراء عن الجداول الاساسية التي يجب عملها حين تعمل هذه الجداول حسب التوجيه تعرضها مرة اخرى للتصحيح والمتابعة استمر بعملك هذا خطوة خطوة .. بعد فترة قصيرة ستجد نفسك على المسار الصحيح .. وتسعى للاحتراف
  15. هذا الكود تم تداوله في موضوعنا السابق وكنت اريد تجاوز الوسيط جزاك الله خيرا تمام ارفع يدي استسلاما اخي فادي .. وان ما تفضلت به عين الحقيقة وهو الذي يقوم به اكسس ايضا لاحظت بالتتبع انه يحذف المرفق بعد الاغلاق .. وهذا جيد .. سوف اطبقها
  16. وعليكم السلام ورحمة الله وبركاته ليست هناك اي مشكلة ComboBox المزايا: يعرض قائمة جاهزة من القيم (مثل التواريخ الفريدة من العمود B). يمنع الأخطاء الإملائية أو إدخال صيغة خاطئة للتاريخ. المستخدم يختار فقط من القائمة → أسرع وأدق. عملي جدًا إذا كانت البيانات محدودة أو متكررة (تواريخ، أسماء، أصناف) TextBox عرضة للأخطاء (مثلاً كتابة التاريخ بصيغة خاطئة). يحتاج تحقق إضافي بالكود للتأكد أن القيمة صحيحة الملف المرفق به الخياران التكستبكس والكمبوبكس لك الخيار ما يتاسب عملك تحياتي ليست بوكس2.xlsm
  17. اخي الكريم ، وعليكم السلام ورحمة الله وبركاته ... ارجو منك الإهتمام بتنسيق موضوعك ليسهل قراءته لمن يمر به ويحاول مساعدتك .. المطلوب غير واضح حتى من خلال الصور. ثم انك تستخدم مسميات عربية + من عدة مقاطع ..... إلخ ، وهذا لا يشجع البعض على المساهمة في المساعدة ، لأن التعامل مع المسميات العربية للعناصر والمكونات له تبعات مزعجة ومتعبة في الحلول . شكراً لك
  18. انظر الصورة المرفقة للتأكد . لذالك ، وتحقيقاً لنفس الفكرة من زر Open .. استخدمت الدالة التالية :- Public Sub OpenAttachmentFile(ByVal RecordID As Long, Optional ByVal PKFieldName As String = "ID") Dim rs As DAO.Recordset Dim rst As DAO.Recordset2 Dim filePath As String Dim cachePath As String Dim subFolder As String cachePath = Environ("LOCALAPPDATA") & "\Microsoft\Windows\INetCache\" Randomize subFolder = "ACC" & Int((9999 * Rnd) + 1) If Dir(cachePath & subFolder, vbDirectory) = "" Then MkDir cachePath & subFolder End If Set rs = CurrentDb.OpenRecordset("SELECT progIcon FROM tblEnDc WHERE " & PKFieldName & "=" & RecordID) Set rst = rs.Fields("progIcon").Value If Not rst.EOF Then filePath = cachePath & subFolder & "\" & rst.Fields("FileName").Value If Dir(filePath) = "" Then rst.Fields("FileData").SaveToFile filePath End If FollowHyperlink filePath End If rst.Close: Set rst = Nothing rs.Close: Set rs = Nothing End Sub واستدعيها حسب رقم السجل من خلال الزر كما يلي :- Call OpenAttachmentFile(Me.ID) طبعاً اسم المجلد عشوائي لمحاكاة نفس اسلوب آكسيس في السطر subFolder = "ACC" & Int((9999 * Rnd) + 1)
  19. طبعاً المجلد ACC9BE9 هو مجلد عشوائي
  20. اعتذر عن مقاطعتك ومخالفتك الرأي .. فآكسيس يستخدم المسار التالي في مربع حوار المرفقات عند النقر على الزر Open C:\Users\Foksh\AppData\Local\Microsoft\Windows\INetCache\ACC9BE9 المسار من جهازي الشخصي باستبدال اسم المستخدم Foksh في جهازك للتجربة
  21. يجب ان تتابع عن قرب افتح مجلد التيمب بعد اظهار المجلدات المخفية واجعله مفتوحا من اجل تتأكد عند الاجراء انا اعتقد انه يستخدم جدولا مخفيا
  22. متابع عن بعد 😊 لأن ما يفعله آكسيس هو استخراج المرفق إلى مجلد Temp ثم فتحه باستخدام :- FollowHyperlink filePath
  23. وعليكم السلام اهلا بك استاذي القدير @ابوخليل في حالة المرفق داخل قاعدة البيانات ..... دائما التعامل يكون بحيلة سواءا لفتح المرفق او عرض المرفق مباشرة .... والحيله هي تصدير المرفق ثم التعامل معه .... في مثالك مثلا والطلب بفتح المرفق مباشرة .... الكود يقوم اولا بتصديره ثم فتحه .... جرب هذا الكود لاني لم افتح القاعدة التي لديك Private Sub cmdOpenAttachment_Click() Dim rs As DAO.Recordset2 Dim rsA As DAO.Recordset2 Dim fld As DAO.Field2 Dim tmpPath As String Dim fileName As String 'افتح السجل الحالي Set rs = Me.Recordset 'اسم الحقل الذي يحتوي على المرفق Set fld = rs.Fields("MyAttachmentField") '← غيّر الاسم حسب جدولك If fld.Value Is Nothing Then MsgBox "لا يوجد مرفق لفتحه.", vbExclamation Exit Sub End If 'افتح المرفق داخل الحقل Set rsA = fld.Value If rsA.RecordCount = 0 Then MsgBox "لا يوجد مرفق.", vbExclamation Exit Sub End If rsA.MoveFirst 'الاسم الأصلي للمرفق fileName = rsA.Fields("FileName").Value 'حدد مسار مجلد مؤقت tmpPath = Environ("TEMP") & "\" & fileName 'احفظ المرفق كملف مؤقت rsA.Fields("FileData").SaveToFile tmpPath 'افتح الملف بالبرنامج الافتراضي FollowHyperlink tmpPath End Sub
  24. سلام عليكم ورحمة الله تعالى وبركاته اخي عبد الله شكرا على الجواب وجزاك الله خيرا الان الجواب كافي وشافي ولي سؤال فقط عند استبدال TextBox1 بـ COMOBOX1 هل هناك مشكلة في TextBox1 ام خيار فقط لان في بعض الاحيان قد استعمل TextBox مرة اخرى شكرا وجزاك الله خيرا على هذا الرد الكافي والسلام عليكم ورحمة الله تعالى وبركاته
  25. السلام عليكم المرفق ادناه يحتوي مثل ما في الصورة المعروضة عند النقر على الزر يفتح مربع حوار اكسس ، وعند النقر على Open يتم فتح المرفق المطلوب : لا اريد ظهور مربع حوار اكسس اريد ان يتم فتح المرفق من الزر مباشرة DbTest.rar
  26. شكرا لكم احبتي لقد استوفيتم جميع الطرق الموصلة .. أحسن الله اليكم وجزاكم خيرا الأستاذ فادي استخدم مربع مرفقات منضم لعرض الصورة والاستاذ خليفة استخدم المشبك للغرض ذاته وعلى كل حال وبعد اذنكم .. ارى ان نكتفي الى ما وصلنا اليه في هذا الطرح .. فقد كفيتم ووفيتم انا السبب في اطالة الموضوع وعدم فهم المطلوب حيث لم اوفق بطرح سؤالي في البداية بدقة .. ضنا مني ان الامر يسير .. فسامحوني كل ما في الامر اني اريد فتح المرفق داخل قاعدة البيانات فقط . مثال الاستاذ خليفة الاقرب الى تحقيق الهدف المرجو .. وعليه سأفتح موضوعا جديدا بناء عليه اوضح فيه المطلوب بدقة غير قابلة للنقاش
  1. أظهر المزيد
×
×
  • اضف...

Important Information