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

تصفية البيانات في استعلام


عفرنس
إذهب إلى أفضل إجابة Solved by jjafferr,

الردود الموصى بها

السلام عليكم .. 

في المرفق أريد من الاستعلام أن يظهر لي اسم الطالب والمادة التي درجته فيها أقل من 50 غير مجتاز(راسب) .. 

وللتوضيح أكثر .. عندما أضع جملة "*غير مجتاز*" Like يظهرلي الطلاب الذين حصلوا على أقل من 50 درجة لكن لا يظهر أسماءهم لأن الطالب لديه أكثر من مادة كما ترون بالصورة المرفقة .

 

شاكر لكم ومقدر

1.jpg

2.jpg

Database2.rar

رابط هذا التعليق
شارك

بنية القاعدة أصلا خطأ 

المفروض المواد كلها ب جدول  والاسماء بجدول

هل حضرتك مصمم على هاد الوضع 

اذا ما بدك تعدل ع  التصميم يبقى لابد من كتابة الاسم مع كل صف لكل مادة مقل الصورة اذا بدك تحصله فى نتيجو الفرز والتصفية

 

000.jpg.d90d492cc66a9735ff34167e0c89631f.jpg

تم تعديل بواسطه ابا جودى
  • Like 1
رابط هذا التعليق
شارك

14 دقائق مضت, ابا جودى said:

بنية القاعدة أصلا خطأ 

المفروض المواد كلها ب جدول  والاسماء بجدول

هل حضرتك مصمم على هاد الوضع 

اذا ما بدك تعدل ع  التصميم يبقى لابد من كتابة الاسم مع كل صف لكل مادة مقل الصورة اذا بدك تحصله فى نتيجو الفرز والتصفية

 

000.jpg.d90d492cc66a9735ff34167e0c89631f.jpg

شكرا لك على مرورك أخي @ابا جودى 

البيانات مستوردة من ملف اكسل وهي موجودة بهذا الشكل .. 

 

الان, عفرنس said:

شكرا لك على مرورك أخي @ابا جودى 

البيانات مستوردة من ملف اكسل وهي موجودة بهذا الشكل .. 

 

اذاً . نحتاج تكرار اسم الطالب أمام كل مادة .. لكن كيف السبيل إلى ذلك ؟؟ 🤔🤔

رابط هذا التعليق
شارك

السلام عليكم 🙂

 

استاذ فايز ، اذا تذكر الاكواد الطويلة اللي كتبتها لك عند استيراد اكثر من صفحة من ملفات الاكسس ، او اكثر من ملف اكسس ،

هذه الاكواد كانت لتنظيف البيانات من السجلات الفارغة (مثل السجل الاول الذي به الاسم ، ثم اخذ الاسم وبقية البيانات من السجل الاول واتسجيله لبقية السجلات التابعة للطالب 🙂

 

اما وقد رجعنا الى كود استيراد البيانات من الاكسل كما هي ، فوجب علينا ، ومثل ما قال اخي اباجودي ، فعلينا بتعبئة هذه البيانات ،

لذا عملت استعلام تحديث ، ليقوم بتعبئة هذه البيانات ، بعد استيرادها مباشرة من ملف الاكسل ، هكذا :

Private Sub command1_Click()
    Dim ImportFileName As String
    ImportFileName = CurrentProject.Path & "\CS_FinalMarksReport" & ".xlsx"
    CurrentDb.Execute ("Delete * From Tabl_1")
If MsgBox("هل تريد استيراد البيانات من جديد ؟", vbYesNo + vbMsgBoxRight, "تنبيه") = vbYes Then
    DoCmd.TransferSpreadsheet acImport, 8, "Tabl_1", ImportFileName, True
    DoCmd.SetWarnings False             '|
        DoCmd.OpenQuery "qry_Filled"    '| <-------
    DoCmd.SetWarnings True              '|
    MsgBox "تم استيراد البيانات بنجاح"
Else
    MsgBox "تم إلغاء عملية الاستيراد "
End If

End Sub

.

وهذا هو الاستعلام :

image.png.928d790e776ee1dacda81568ed7cb4f2.png

.

وهذه جملة SQL الاستعلام:

UPDATE Tabl_1 SET Tabl_1.A1 = f_A1(Nz([A1],"|")), Tabl_1.A2 = f_A2(Nz([A2],"|")), Tabl_1.A3 = f_A3(Nz([A3],"|")), Tabl_1.A4 = f_A4(Nz([A4],"|")), Tabl_1.A5 = f_A5(Nz([A5],"|"));

.

وهذه هي الوحدات النمطية التي تناديها للعمل:

Option Compare Database
Option Explicit

    Public p_A1 As String
    Public p_A2 As String
    Public p_A3 As String
    Public p_A4 As String
    Public p_A5 As String
'

Public Function f_A1(A1 As String) As String

    If A1 = "|" Then
        f_A1 = p_A1
    Else
        p_A1 = A1
        f_A1 = p_A1
    End If
    
End Function


Public Function f_A2(A2 As String) As String

    If A2 = "|" Then
        f_A2 = p_A2
    Else
        p_A2 = A2
        f_A2 = p_A2
    End If
    
End Function


Public Function f_A3(A3 As String) As String

    If A3 = "|" Then
        f_A3 = p_A3
    Else
        p_A3 = A3
        f_A3 = p_A3
    End If
    
End Function


Public Function f_A4(A4 As String) As String

    If A4 = "|" Then
        f_A4 = p_A4
    Else
        p_A4 = A4
        f_A4 = p_A4
    End If
    
End Function


Public Function f_A5(A5 As String) As String

    If A5 = "|" Then
        f_A5 = p_A5
    Else
        p_A5 = A5
        f_A5 = p_A5
    End If
    
End Function

.

ومن هنا ، فيمكنك عمل استعلام عادي لأي شيء يخص البيانات ، مثل طلبك في هذا الموضوع 🙂

 

ونعم تستطيع استعمال الاستعلام لتعبئة بيانات جدولك الحالي ، وبدون استيراده مرة اخرى 🙂

 

جعفر

1312.Database2.accdb.zip

  • Like 3
رابط هذا التعليق
شارك

السلام عليكم

مشاركة ضعيفه منى مع اخوانى واساتذتى @jjafferr و @ابا جودى جزاهم الله خيرا 💐💐💐

انشات استعلام للحصول على اول سجل فارغ

image.png.347a7c85a34c76e5aef2af71ce59ba77.png

 

image.png.e9633c57a43c4be2986b979c0abca42e.png

ثم فالنموذج قمت بوضع كود للتحديث

Private Sub txtUpdate_Click()

Dim db As DAO.Database
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("Tabl_1")
Dim i As Integer

    For i = 0 To rs.RecordCount - 1

         If IsNull(rs.Fields("A3")) Then
            rs.Edit
            rs.Fields("A1").Value = DLookup("A1", "Tabl_1", "[ÇáãÚÑÝ]=" & DLookup("FirstNum", "qry3") - 1)
            rs.Fields("A2").Value = DLookup("A2", "Tabl_1", "[ÇáãÚÑÝ]=" & DLookup("FirstNum", "qry3") - 1)
            rs.Fields("A3").Value = DLookup("A3", "Tabl_1", "[ÇáãÚÑÝ]=" & DLookup("FirstNum", "qry3") - 1)
            rs.Update
         Else
         End If
        
         rs.MoveNext

    Next i

rs.Close
Set rs = Nothing

End Sub

ومرفق المثال الجدول بدون تحديث اضغط زر التحديث فالنموذج

تقبلوا تحياتى ومرورى وفقكم الله

Database2.accdb

  • Like 1
رابط هذا التعليق
شارك

34 دقائق مضت, jjafferr said:

السلام عليكم 🙂

فوجب علينا تعبئة هذه البيانات ،

لذا عملت استعلام تحديث ، ليقوم بتعبئة هذه البيانات ، بعد استيرادها مباشرة من ملف الاكسل ، هكذا :

ومن هنا ، فيمكنك عمل استعلام عادي لأي شيء يخص البيانات ، مثل طلبك في هذا الموضوع 🙂

ونعم تستطيع استعمال الاستعلام لتعبئة بيانات جدولك الحالي ، وبدون استيراده مرة اخرى 🙂

جعفر

1312.Database2.accdb.zip 33.46 kB · 4 downloads

وعليكم السلام ورحمة الله تعالى وبركاته

ما شاء الله الله اكبـــــر  :clapping::clapping::clapping:

زادكم الله علما و فهما ونغهكم بما علمكم

 

يا سلام ع البخور العمانى يا ولاد ... شغل عالى ومن النوع الفاخر 
انا مش فاهم شئ من الاكواد فى الوحدة النمطية
بس هأروح اعمل شاى واولع بخور يمكن يتغير حالى وأفهم :biggrin:

رابط هذا التعليق
شارك

3 دقائق مضت, احمد الفلاحجي said:

السلام عليكم

ثم فالنموذج قمت بوضع كود للتحديث


Private Sub txtUpdate_Click()

Dim db As DAO.Database
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("Tabl_1")
Dim i As Integer

    For i = 0 To rs.RecordCount - 1

         If IsNull(rs.Fields("A3")) Then
            rs.Edit
            rs.Fields("A1").Value = DLookup("A1", "Tabl_1", "[المعرف]=" & DLookup("FirstNum", "qry3") - 1)
            rs.Fields("A2").Value = DLookup("A2", "Tabl_1", "[المعرف]=" & DLookup("FirstNum", "qry3") - 1)
            rs.Fields("A3").Value = DLookup("A3", "Tabl_1", "[المعرف]=" & DLookup("FirstNum", "qry3") - 1)
            rs.Update
         Else
         End If
        
         rs.MoveNext

    Next i

rs.Close
Set rs = Nothing

End Sub

ومرفق المثال الجدول بدون تحديث اضغط زر التحديث فالنموذج

تقبلوا تحياتى ومرورى وفقكم الله

Database2.accdb 564 kB · 1 download

 

وعليكم السلام ورحمة الله تعالى وبركاته

ما شاء الله الله اكبـــــر  :clapping::clapping::clapping:

زادكم الله علما و فهما ونغهكم بما علمكم

 

انا البخور تبعى اليوم مغشوش 😭

رابط هذا التعليق
شارك

56 دقائق مضت, jjafferr said:

لذا عملت استعلام تحديث ، ليقوم بتعبئة هذه البيانات ، بعد استيرادها مباشرة من ملف الاكسل ، هكذا :


Private Sub command1_Click()
    Dim ImportFileName As String
    ImportFileName = CurrentProject.Path & "\CS_FinalMarksReport" & ".xlsx"
    CurrentDb.Execute ("Delete * From Tabl_1")
If MsgBox("هل تريد استيراد البيانات من جديد ؟", vbYesNo + vbMsgBoxRight, "تنبيه") = vbYes Then
    DoCmd.TransferSpreadsheet acImport, 8, "Tabl_1", ImportFileName, True
    DoCmd.SetWarnings False             '|
        DoCmd.OpenQuery "qry_Filled"    '| <-------
    DoCmd.SetWarnings True              '|
    MsgBox "تم استيراد البيانات بنجاح"
Else
    MsgBox "تم إلغاء عملية الاستيراد "
End If

End Sub

.

أهلا بك أخي @jjafferr 

تم استيراد البيانات من ملف اكسل الذي يحوي جميع بيانات الطلاب من خلال القاعدة التي أرفقته أنت .. لكن لم يتم ملء الفراغات التي تخص كل طالب .. 

هل بمجرد استيراد البيانات يتم ملء الفراغات مباشرة ؟؟ 

 

1.jpg

رابط هذا التعليق
شارك

9 دقائق مضت, ابا جودى said:

وعليكم السلام ورحمة الله تعالى وبركاته

ما شاء الله الله اكبـــــر  :clapping::clapping::clapping:

زادكم الله علما و فهما ونغهكم بما علمكم

انا البخور تبعى اليوم مغشوش 😭

واياكم ابا جودى

لا البخور مش مغشوش بس هما مشغولين الحين مع صاحبهم الاساسى 😀

نسال الله ان يعلمنا ما ينفعنا وينفعنا بما علمنا انه هو العليم الحكيم وان ننفع به اخواننا فالله

بارك الله فيكم اخوانى واساتذتى

  • Thanks 1
رابط هذا التعليق
شارك

الان, احمد الفلاحجي said:

واياكم ابا جودى

لا البخور مش مغشوش بس هما مشغولين الحين مع صاحبهم الاساسى 😀

نسال الله ان يعلمنا ما ينفعنا وينفعنا بما علمنا انه هو العليم الحكيم وان ننفع به اخواننا فالله

بارك الله فيكم اخوانى واساتذتى

حمدا لله على السلامة .. من طول الغيبات جاء بالغنايم 

  • Haha 1
رابط هذا التعليق
شارك

7 دقائق مضت, jjafferr said:

اعطنا الملف وخلينا نشوف !!

 

المفروض يشتغل على طول 🙂

 

جعفر

تفضل أخي @jjafferr 

أرفقت مثال ثلاثة طلاب .. وإلا الملف يحوي 49190 صف 

CS_FinalMarksReport.xlsx

 

تم تعديل بواسطه عفرنس
رابط هذا التعليق
شارك

  • أفضل إجابة

الحقول لم تكن Null وانما كانت فارغة !!

 

استعمل هذا الاستعلام :

image.png.b16fa4bcf7844ba4bde85dcbef11f63b.png

.

UPDATE Tabl_1 SET Tabl_1.A1 = f_A1(IIf(Len([A1] & "")=0,"|",[A1])), Tabl_1.A2 = f_A2(IIf(Len([A2] & "")=0,"|",[A2])), Tabl_1.A3 = f_A3(IIf(Len([A3] & "")=0,"|",[A3])), Tabl_1.A4 = f_A4(IIf(Len([A4] & "")=0,"|",[A4])), Tabl_1.A5 = f_A5(IIf(Len([A5] & "")=0,"|",[A5]));

.

جعفر

1312.Database2.accdb.zip

  • Thanks 1
رابط هذا التعليق
شارك

منذ ساعه, jjafferr said:

الحقول لم تكن Null وانما كانت فارغة !!

 

استعمل هذا الاستعلام :

image.png.b16fa4bcf7844ba4bde85dcbef11f63b.png

.


UPDATE Tabl_1 SET Tabl_1.A1 = f_A1(IIf(Len([A1] & "")=0,"|",[A1])), Tabl_1.A2 = f_A2(IIf(Len([A2] & "")=0,"|",[A2])), Tabl_1.A3 = f_A3(IIf(Len([A3] & "")=0,"|",[A3])), Tabl_1.A4 = f_A4(IIf(Len([A4] & "")=0,"|",[A4])), Tabl_1.A5 = f_A5(IIf(Len([A5] & "")=0,"|",[A5]));

.

جعفر

1312.Database2.accdb.zip 51.61 kB · 1 download

شكرالله لك أستاذنا الغالي @jjafferr >> هذا هو المطلوب بعينه .. 

رابط هذا التعليق
شارك

أخي @jjafferr 

 

في ٢٣‏/١٢‏/٢٠٢٠ at 20:49, عفرنس said:

فضل أخي @jjafferr 

أرفقت مثال ثلاثة طلاب .. وإلا الملف يحوي 49190 صف 

CS_FinalMarksReport.xlsx 11.04 kB · 5 downloads

لو أردت استيراد بيانات ملف اكسل السابق كما هو . من غير ما أحذف الأعمدة المدمجة ولا الترويسة مع مل الصفوف الفارغة لكل طالب . 

ما الذي يجب أن يتغير في الكود والأكسس ؟؟ 

 

** هذا الملف مرفق 

CS_FinalMarksReport.xlsx

رابط هذا التعليق
شارك

وعليكم السلام 🙂

 

55 دقائق مضت, عفرنس said:

لو أردت استيراد بيانات ملف اكسل السابق كما هو . من غير ما أحذف الأعمدة المدمجة ولا الترويسة مع مل الصفوف الفارغة لكل طالب . 

ما الذي يجب أن يتغير في الكود والأكسس ؟؟ 

 

انا رديت على سؤالك قبل ان تسأله انت (ونسيت اذكر الجدول المؤقت) :

في ٢٣‏/١٢‏/٢٠٢٠ at 20:39, jjafferr said:

استاذ فايز ، اذا تذكر الاكواد الطويلة اللي كتبتها لك عند استيراد اكثر من صفحة من ملفات الاكسس ، او اكثر من ملف اكسس ، 

هذه الاكواد كانت لتنظيف البيانات من السجلات الفارغة (مثل السجل الاول الذي به الاسم ، ثم اخذ الاسم وبقية البيانات من السجل الاول واتسجيله لبقية السجلات التابعة للطالب 🙂

 

جعفر

رابط هذا التعليق
شارك

في ٢٥‏/١٢‏/٢٠٢٠ at 11:47, jjafferr said:

استاذ فايز ، اذا تذكر الاكواد الطويلة اللي كتبتها لك عند استيراد اكثر من صفحة من ملفات الاكسس ، او اكثر من ملف اكسس ، 

هذه الاكواد كانت لتنظيف البيانات من السجلات الفارغة (مثل السجل الاول الذي به الاسم ، ثم اخذ الاسم وبقية البيانات من السجل الاول واتسجيله لبقية السجلات التابعة للطالب 🙂

هل تقصد هذا الكود ؟؟ 

Private Sub cmd_Selected_File_Click()
    
    ' import the Excel sheet
    
'1
    'Empty the temporary Table tabl1
    CurrentDb.Execute ("Delete * From tabl1")
    
'2
    'import Sheets to table tabl1, one at a time
    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, strTable As String
    Dim strPassword As String

    ' 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

    ' Change this next line to True if the first row in EXCEL worksheet
    ' has field names
    blnHasFieldNames = False


    strPathFile = Me.txtPath    ' "C:\Filename.xls"

    ' Replace tablename with the real name of the table into which
    ' the data are to be imported
    strTable = "tabl1" '"tablename"

    ' 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


'3
    ' Import the data from each worksheet into the table
    For lngCount = colWorksheets.Count To 1 Step -1
        DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, strTable, strPathFile, blnHasFieldNames, colWorksheets(lngCount) & "$"

'4
    'append the data using the proper query
    DoCmd.SetWarnings False
    DoCmd.RunSQL "Delete * From Sheet" & lngCount
    DoCmd.OpenQuery "qry_" & lngCount
    DoCmd.SetWarnings True
    
'5
    'empty tbl_Sheets
    CurrentDb.Execute ("Delete * From tabl1")

Next_lngCount:
    Next lngCount

    ' Delete the collection
    Set colWorksheets = Nothing


' Uncomment out the next code step if you want to delete the
' EXCEL file after it's been imported
' Kill strPathFile

    MsgBox "Êã ÇÓÊíÑÇÏ ÇáÈíÇäÇÊ ÈäÌÇÍ"
    
End Sub

 

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information