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

ممكن مساعده فى تحويل الاستعلام الى كووووووود


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

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

SELECT CBC_tbl.ID, CBC_tbl.tdate, CBC_tbl.code, CBC_tbl.age, CBC_tbl.hgb, CBC_tbl.hgb_s,
       CBC_tbl.rbc, CBC_tbl.rbc_s, CBC_tbl.hct, CBC_tbl.hct_s, CBC_tbl.hgbp, CBC_tbl.mcv,
       CBC_tbl.mcv_s, CBC_tbl.mch, CBC_tbl.mch_s, CBC_tbl.mchc, CBC_tbl.mchc_s, CBC_tbl.rdwcv,
       CBC_tbl.rdwcv_s, CBC_tbl.rdwsd, CBC_tbl.rdwsd_s, CBC_tbl.plt, CBC_tbl.plt_s, CBC_tbl.pct,
       CBC_tbl.pct_s, CBC_tbl.pdw, CBC_tbl.pdw_s, CBC_tbl.mpv, CBC_tbl.mpv_s, CBC_tbl.wbc, CBC_tbl.wbc_s,
       CBC_tbl.netp, CBC_tbl.netp_s, CBC_tbl.lymp, CBC_tbl.lymp_s, CBC_tbl.monp, CBC_tbl.monp_s,
       CBC_tbl.eosp, CBC_tbl.eosp_s, CBC_tbl.basp, CBC_tbl.basp_s, CBC_tbl.net, CBC_tbl.net_s,
       CBC_tbl.lym, CBC_tbl.lym_s, CBC_tbl.mon, CBC_tbl.mon_s, CBC_tbl.eos, CBC_tbl.eos_s,
       CBC_tbl.bas, CBC_tbl.bas_s, CBC_tbl.MIDp, CBC_tbl.MIDp_s, CBC_tbl.Mid, CBC_tbl.MID_s,
       CBC_tbl.comment, CBC_tbl.segmp, CBC_tbl.segmp_s, CBC_tbl.bandp, CBC_tbl.bandp_s,
       CBC_tbl.segm, CBC_tbl.segm_s, CBC_tbl.[band], CBC_tbl.band_s, CBC_tbl.WBC_HISTOGRAM,
       CBC_tbl.RBC_HISTOGRAM, CBC_tbl.PLT_HISTOGRAM
FROM CBC_tbl
WHERE CBC_tbl.ID = [Forms]![visit_frm]![ID];

 

 

حاولت بالطريقة دى 

 

Me.RecordSource = "SELECT CBC_tbl.ID, CBC_tbl.tdate, CBC_tbl.code, CBC_tbl.age, CBC_tbl.hgb, CBC_tbl.hgb_s, CBC_tbl.rbc, CBC_tbl.rbc_s, CBC_tbl.hct, CBC_tbl.hct_s, CBC_tbl.hgbp, CBC_tbl.mcv, CBC_tbl.mcv_s, CBC_tbl.mch, CBC_tbl.mch_s, CBC_tbl.mchc, CBC_tbl.mchc_s, CBC_tbl.rdwcv, CBC_tbl.rdwcv_s, CBC_tbl.rdwsd, CBC_tbl.rdwsd_s, CBC_tbl.plt, CBC_tbl.plt_s, CBC_tbl.pct, CBC_tbl.pct_s, CBC_tbl.pdw, CBC_tbl.pdw_s, CBC_tbl.mpv, CBC_tbl.mpv_s, CBC_tbl.wbc, CBC_tbl.wbc_s, CBC_tbl.netp, CBC_tbl.netp_s, CBC_tbl.lymp, CBC_tbl.lymp_s, CBC_tbl.monp, CBC_tbl.monp_s, CBC_tbl.eosp, CBC_tbl.eosp_s, CBC_tbl.basp, CBC_tbl.basp_s, CBC_tbl.net, CBC_tbl.net_s, CBC_tbl.lym, CBC_tbl.lym_s, CBC_tbl.mon, CBC_tbl.mon_s, CBC_tbl.eos, CBC_tbl.eos_s, CBC_tbl.bas, CBC_tbl.bas_s, CBC_tbl.MIDp, CBC_tbl.MIDp_s, CBC_tbl.Mid, CBC_tbl.MID_s, CBC_tbl.comment, CBC_tbl.segmp, CBC_tbl.segmp_s, CBC_tbl.bandp, CBC_tbl.bandp_s, CBC_tbl.segm, CBC_tbl.segm_s, CBC_tbl.[band], CBC_tbl.band_s, CBC_tbl.WBC_HISTOGRAM, CBC_tbl.RBC_HISTOGRAM, CBC_tbl.PLT_HISTOGRAM
from CBC_tbl
WHERE CBC_tbl.ID=[Forms]![visit_frm]![ID];"

بس بيدينى خطأ فى الكود

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

ممكن تجربى الكود ده يا دكتور 

 

Sub RetrieveCBCData()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim sql As String
    Dim formID As String

    ' Open the current database
    Set db = CurrentDb

    ' Get the value of the ID field from the form
    formID = Forms!visit_frm!ID

    ' Build the SQL query
    sql = "SELECT CBC_tbl.ID, CBC_tbl.tdate, CBC_tbl.code, CBC_tbl.age, CBC_tbl.hgb, CBC_tbl.hgb_s, " & _
          "CBC_tbl.rbc, CBC_tbl.rbc_s, CBC_tbl.hct, CBC_tbl.hct_s, CBC_tbl.hgbp, CBC_tbl.mcv, " & _
          "CBC_tbl.mcv_s, CBC_tbl.mch, CBC_tbl.mch_s, CBC_tbl.mchc, CBC_tbl.mchc_s, CBC_tbl.rdwcv, " & _
          "CBC_tbl.rdwcv_s, CBC_tbl.rdwsd, CBC_tbl.rdwsd_s, CBC_tbl.plt, CBC_tbl.plt_s, CBC_tbl.pct, " & _
          "CBC_tbl.pct_s, CBC_tbl.pdw, CBC_tbl.pdw_s, CBC_tbl.mpv, CBC_tbl.mpv_s, CBC_tbl.wbc, CBC_tbl.wbc_s, " & _
          "CBC_tbl.netp, CBC_tbl.netp_s, CBC_tbl.lymp, CBC_tbl.lymp_s, CBC_tbl.monp, CBC_tbl.monp_s, " & _
          "CBC_tbl.eosp, CBC_tbl.eosp_s, CBC_tbl.basp, CBC_tbl.basp_s, CBC_tbl.net, CBC_tbl.net_s, " & _
          "CBC_tbl.lym, CBC_tbl.lym_s, CBC_tbl.mon, CBC_tbl.mon_s, CBC_tbl.eos, CBC_tbl.eos_s, " & _
          "CBC_tbl.bas, CBC_tbl.bas_s, CBC_tbl.MIDp, CBC_tbl.MIDp_s, CBC_tbl.Mid, CBC_tbl.MID_s, " & _
          "CBC_tbl.comment, CBC_tbl.segmp, CBC_tbl.segmp_s, CBC_tbl.bandp, CBC_tbl.bandp_s, " & _
          "CBC_tbl.segm, CBC_tbl.segm_s, CBC_tbl.[band], CBC_tbl.band_s, CBC_tbl.WBC_HISTOGRAM, " & _
          "CBC_tbl.RBC_HISTOGRAM, CBC_tbl.PLT_HISTOGRAM " & _
          "FROM CBC_tbl " & _
          "WHERE CBC_tbl.ID=" & formID & ";"

    ' Open the recordset based on the SQL query
    Set rs = db.OpenRecordset(sql, dbOpenDynaset)

    ' Check if the recordset is not empty
    If Not rs.EOF Then
        ' Display data (you can modify this part to display data in a form or use the data as needed)
        MsgBox "Data retrieved successfully."
    Else
        MsgBox "No data found for the given ID."
    End If

    ' Close the recordset and the database
    rs.Close
    Set rs = Nothing
    Set db = Nothing
End Sub

 

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

  • safaa salem5 changed the title to ممكن مساعده فى تحويل الاستعلام الى كووووووود
5 minutes ago, ابو جودي said:

ممكن تجربى الكود ده يا دكتور 

 

Sub RetrieveCBCData()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim sql As String
    Dim formID As String

    ' Open the current database
    Set db = CurrentDb

    ' Get the value of the ID field from the form
    formID = Forms!visit_frm!ID

    ' Build the SQL query
    sql = "SELECT CBC_tbl.ID, CBC_tbl.tdate, CBC_tbl.code, CBC_tbl.age, CBC_tbl.hgb, CBC_tbl.hgb_s, " & _
          "CBC_tbl.rbc, CBC_tbl.rbc_s, CBC_tbl.hct, CBC_tbl.hct_s, CBC_tbl.hgbp, CBC_tbl.mcv, " & _
          "CBC_tbl.mcv_s, CBC_tbl.mch, CBC_tbl.mch_s, CBC_tbl.mchc, CBC_tbl.mchc_s, CBC_tbl.rdwcv, " & _
          "CBC_tbl.rdwcv_s, CBC_tbl.rdwsd, CBC_tbl.rdwsd_s, CBC_tbl.plt, CBC_tbl.plt_s, CBC_tbl.pct, " & _
          "CBC_tbl.pct_s, CBC_tbl.pdw, CBC_tbl.pdw_s, CBC_tbl.mpv, CBC_tbl.mpv_s, CBC_tbl.wbc, CBC_tbl.wbc_s, " & _
          "CBC_tbl.netp, CBC_tbl.netp_s, CBC_tbl.lymp, CBC_tbl.lymp_s, CBC_tbl.monp, CBC_tbl.monp_s, " & _
          "CBC_tbl.eosp, CBC_tbl.eosp_s, CBC_tbl.basp, CBC_tbl.basp_s, CBC_tbl.net, CBC_tbl.net_s, " & _
          "CBC_tbl.lym, CBC_tbl.lym_s, CBC_tbl.mon, CBC_tbl.mon_s, CBC_tbl.eos, CBC_tbl.eos_s, " & _
          "CBC_tbl.bas, CBC_tbl.bas_s, CBC_tbl.MIDp, CBC_tbl.MIDp_s, CBC_tbl.Mid, CBC_tbl.MID_s, " & _
          "CBC_tbl.comment, CBC_tbl.segmp, CBC_tbl.segmp_s, CBC_tbl.bandp, CBC_tbl.bandp_s, " & _
          "CBC_tbl.segm, CBC_tbl.segm_s, CBC_tbl.[band], CBC_tbl.band_s, CBC_tbl.WBC_HISTOGRAM, " & _
          "CBC_tbl.RBC_HISTOGRAM, CBC_tbl.PLT_HISTOGRAM " & _
          "FROM CBC_tbl " & _
          "WHERE CBC_tbl.ID=" & formID & ";"

    ' Open the recordset based on the SQL query
    Set rs = db.OpenRecordset(sql, dbOpenDynaset)

    ' Check if the recordset is not empty
    If Not rs.EOF Then
        ' Display data (you can modify this part to display data in a form or use the data as needed)
        MsgBox "Data retrieved successfully."
    Else
        MsgBox "No data found for the given ID."
    End If

    ' Close the recordset and the database
    rs.Close
    Set rs = Nothing
    Set db = Nothing
End Sub

بعد التجربه

الفورم بيفتح بدون فلتره بال id

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

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

اتفضلى

Sub SetFormRecordSource()
    Dim sql As String
    Dim formID As String

    ' Get the value of the ID field from the form
    formID = Forms!visit_frm!ID

    ' Build the SQL query
    sql = "SELECT CBC_tbl.ID, CBC_tbl.tdate, CBC_tbl.code, CBC_tbl.age, CBC_tbl.hgb, CBC_tbl.hgb_s, " & _
          "CBC_tbl.rbc, CBC_tbl.rbc_s, CBC_tbl.hct, CBC_tbl.hct_s, CBC_tbl.hgbp, CBC_tbl.mcv, " & _
          "CBC_tbl.mcv_s, CBC_tbl.mch, CBC_tbl.mch_s, CBC_tbl.mchc, CBC_tbl.mchc_s, CBC_tbl.rdwcv, " & _
          "CBC_tbl.rdwcv_s, CBC_tbl.rdwsd, CBC_tbl.rdwsd_s, CBC_tbl.plt, CBC_tbl.plt_s, CBC_tbl.pct, " & _
          "CBC_tbl.pct_s, CBC_tbl.pdw, CBC_tbl.pdw_s, CBC_tbl.mpv, CBC_tbl.mpv_s, CBC_tbl.wbc, CBC_tbl.wbc_s, " & _
          "CBC_tbl.netp, CBC_tbl.netp_s, CBC_tbl.lymp, CBC_tbl.lymp_s, CBC_tbl.monp, CBC_tbl.monp_s, " & _
          "CBC_tbl.eosp, CBC_tbl.eosp_s, CBC_tbl.basp, CBC_tbl.basp_s, CBC_tbl.net, CBC_tbl.net_s, " & _
          "CBC_tbl.lym, CBC_tbl.lym_s, CBC_tbl.mon, CBC_tbl.mon_s, CBC_tbl.eos, CBC_tbl.eos_s, " & _
          "CBC_tbl.bas, CBC_tbl.bas_s, CBC_tbl.MIDp, CBC_tbl.MIDp_s, CBC_tbl.Mid, CBC_tbl.MID_s, " & _
          "CBC_tbl.comment, CBC_tbl.segmp, CBC_tbl.segmp_s, CBC_tbl.bandp, CBC_tbl.bandp_s, " & _
          "CBC_tbl.segm, CBC_tbl.segm_s, CBC_tbl.[band], CBC_tbl.band_s, CBC_tbl.WBC_HISTOGRAM, " & _
          "CBC_tbl.RBC_HISTOGRAM, CBC_tbl.PLT_HISTOGRAM " & _
          "FROM CBC_tbl " & _
          "WHERE CBC_tbl.ID=" & formID & ";"

    ' Set the RecordSource of the form
    Me.RecordSource = sql
End Sub

 

 

 

Private Sub Form_Open(Cancel As Integer)
    SetFormRecordSource
End Sub

 

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

7 minutes ago, ابو جودي said:

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

اتفضلى

Sub SetFormRecordSource()
    Dim sql As String
    Dim formID As String

    ' Get the value of the ID field from the form
    formID = Forms!visit_frm!ID

    ' Build the SQL query
    sql = "SELECT CBC_tbl.ID, CBC_tbl.tdate, CBC_tbl.code, CBC_tbl.age, CBC_tbl.hgb, CBC_tbl.hgb_s, " & _
          "CBC_tbl.rbc, CBC_tbl.rbc_s, CBC_tbl.hct, CBC_tbl.hct_s, CBC_tbl.hgbp, CBC_tbl.mcv, " & _
          "CBC_tbl.mcv_s, CBC_tbl.mch, CBC_tbl.mch_s, CBC_tbl.mchc, CBC_tbl.mchc_s, CBC_tbl.rdwcv, " & _
          "CBC_tbl.rdwcv_s, CBC_tbl.rdwsd, CBC_tbl.rdwsd_s, CBC_tbl.plt, CBC_tbl.plt_s, CBC_tbl.pct, " & _
          "CBC_tbl.pct_s, CBC_tbl.pdw, CBC_tbl.pdw_s, CBC_tbl.mpv, CBC_tbl.mpv_s, CBC_tbl.wbc, CBC_tbl.wbc_s, " & _
          "CBC_tbl.netp, CBC_tbl.netp_s, CBC_tbl.lymp, CBC_tbl.lymp_s, CBC_tbl.monp, CBC_tbl.monp_s, " & _
          "CBC_tbl.eosp, CBC_tbl.eosp_s, CBC_tbl.basp, CBC_tbl.basp_s, CBC_tbl.net, CBC_tbl.net_s, " & _
          "CBC_tbl.lym, CBC_tbl.lym_s, CBC_tbl.mon, CBC_tbl.mon_s, CBC_tbl.eos, CBC_tbl.eos_s, " & _
          "CBC_tbl.bas, CBC_tbl.bas_s, CBC_tbl.MIDp, CBC_tbl.MIDp_s, CBC_tbl.Mid, CBC_tbl.MID_s, " & _
          "CBC_tbl.comment, CBC_tbl.segmp, CBC_tbl.segmp_s, CBC_tbl.bandp, CBC_tbl.bandp_s, " & _
          "CBC_tbl.segm, CBC_tbl.segm_s, CBC_tbl.[band], CBC_tbl.band_s, CBC_tbl.WBC_HISTOGRAM, " & _
          "CBC_tbl.RBC_HISTOGRAM, CBC_tbl.PLT_HISTOGRAM " & _
          "FROM CBC_tbl " & _
          "WHERE CBC_tbl.ID=" & formID & ";"

    ' Set the RecordSource of the form
    Me.RecordSource = sql
End Sub

 

 

 

Private Sub Form_Open(Cancel As Integer)
    SetFormRecordSource
End Sub

 

متشكره والله بس فى كومنت بسيط هو ليه لما بفتح الفورم عن طريق الكود دا  علامه التحميل بتظهر والفورم بياخد وقت عما بيفتح غير فى طريقة الاستعلام بيفتح اسرع

طيب لو عايزه الاستعلام يكون موجود عادى بس الفلتره ب  

id

فقط تكون عن طريق الكود

اعملها ازاى @ابو جودي

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

شوفى يا دكتور دا شئ طبيعى

هذه المشكلة بسبب  استخدام الكود VBA لتعيين RecordSource للنموذج فتتأخر عملية تحميل البيانات بسبب تنفيذ الاستعلام في كل مرة يتم فيها فتح النموذج و هذا يحدث لأن الاستعلام يتم إعداده وتنفيذه في وقت التشغيل (runtime)

ولكن عند استخدام الاستعلام المحفوظ مسبقا في النموذج يتم تحميل البيانات بشكل أسرع لأنه يتم تحميلها مباشرة من قاعدة البيانات دون تأخير إضافي

ايه وجه السبب في تحويل الاستعلام بدل من استخدامه مباشرة كمصدر بيانات للنموذج 
الى تحويله الى كود أولا ثم تمريره الى مصدر بيانات النموذج ؟؟!


 

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

طيب انا هطبق طريقة الاستعلام داخل الفورم بس عايزه اعمل الاستعلام بدون فلتره

والفلتره  ب

id

عايزه اعملها عن طريق كود من باب التعلم 

لانى عارفه طريقه الفلتره عن طريق الاستعلام الموجود في النموزج

علشان عندى نمازج عايزه الاستعلام يكون مصدر النموزج

ونمازج تانيه عايزه الجدول يكون مصدر النموزج

@ابو جودي

الطريقه اللى بتخلى شكل الفلتر كدا

 

فلتر.gif

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

  • أفضل إجابة

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

2 ساعات مضت, safaa salem5 said:

بس بيدينى خطأ فى الكود

 

هذه طريقتي في تفكيك الكود الى اسطر ،

كما انه مافي داعي لتكرار اسم الجدول لكل حقل ، إلا اذا كان هناك ربط بين اكثر من جدول ، وهناك اسماء حقول متشابهه ، حينها يجب استعمال اسم الجدول واسم الحقل معا :

Dim mySQL as string

mySQL="SELECT ID, tdate, code, age, hgb, hgb_s, rbc, rbc_s, hct, hct_s,"
mySQL=mySQL & " hgbp, mcv, mcv_s, mch, mch_s, mchc, mchc_s, rdwcv, rdwcv_s,"
mySQL=mySQL & " rdwsd, rdwsd_s, plt, plt_s, pct, pct_s, pdw, pdw_s, mpv, mpv_s,"
mySQL=mySQL & " wbc, wbc_s, netp, netp_s, lymp, lymp_s, monp, monp_s, eosp, eosp_s,"
mySQL=mySQL & " basp, basp_s, net, net_s, lym, lym_s, mon, mon_s, eos, eos_s, bas, bas_s,"
mySQL=mySQL & " MIDp, MIDp_s, Mid, MID_s, comment, segmp, segmp_s, bandp, bandp_s, segm, segm_s,"
mySQL=mySQL & " [band], band_s, WBC_HISTOGRAM, RBC_HISTOGRAM, PLT_HISTOGRAM"
mySQL=mySQL & " FROM CBC_tbl"
mySQL=mySQL & " WHERE ID=" & [Forms]![visit_frm]![ID]

Me.RecordSource = mySQL

.

 

31 دقائق مضت, safaa salem5 said:

ليه لما بفتح الفورم عن طريق الكود دا  علامه التحميل بتظهر والفورم بياخد وقت عما بيفتح غير فى طريقة الاستعلام بيفتح اسرع

.

لما يكون عندك استعلام ، الاكسس يعمل له Compile ، ويعمل له شيء اسمه Query plan (خطة عمل الاستعلام) ، فيكون اسرع لان الاكسس عمل طريقه تنفيذيه للاستعلام حسب المعايير والفرز (يعني يقوم بعمل اي معبار قبل الآخر ، ووهل يعمل الفرز قبل تطبيق المعيار وفهرسة الحقول لها دور كبير في عمل هذه الخطة) ، (ويمكنك انزال برنامج تستطيع من خلاله رؤية هذه الخطة وطريقة عملها ، وحتى عمل التغيير عليها ، هنا https://isladogs.co.uk/jet-showplan-manager/index.html ، وللعلم ، فانا اعرف عن خطة عمل الاستعلام اكثر من عقدين ولكني لم اتدخل في عملها الى الآن 🙂

بينما لما نعمل الاستعلام عن طريق الكود (وهذا يحدث في كل مرة يقرأ بها الاكسس الكود) ، فيقوم الاكسس بعمل خطة عمل ، ومن ثم تنفيذ الاستعلام.

ولكن وبعد ان اصبحت الكمبيوترات سريعة ، ففارق الوقت في الفترة التي يأخذها الاكسس في تنفيذ كِلا الاستعلامين ، تُعتبر شبه لا شيء ، ولكن الافضل (ولعدة اسباب ، وخصوصا عند عمل التغيير) والاسرع ، هو عمل الاستعلام شخصيا 🙂

 

القاعدة الذهبية في فهرسة حقول الاكسس هي:

كل حقل تعمل معيار او فرز (سواء في الاستعلام او الكود او فلترة في النموذج او التقرير).

ومن هذه القاعدة ، يجب ان يكون حقل ID في جدولك ، مفهرس 🙂

 

 

منذ ساعه, safaa salem5 said:

طيب لو عايزه الاستعلام يكون موجود عادى بس الفلتره ب  

id و الفتره

فقط تكون عن طريق الكود

.

طريقة فلترة (استعمال المعيار في الاستعلام) ، هي افضل وبأقل كود من استعمال التصفية/الفلترة في النموذج (Me.Filter والذي نحتاج الى عدة اسطر كود للتصفية وتشغيله وحذفه ، وفي عدة احداث) ،

اما طريقة عمل التصفية في الاستعلام ، حسب المتغير الذي في النموذج:

  1. في الاستعلام ، في الحقل الذي نريد وضع المعيار عليه ، نكتب مسار متغير المعيار كاملا ، مثل Forms!visit_frm!ID ، او اذا كان في نموذج فرعي Forms!visit_frm!SubForm_Name!ID ،
  2. ويكون الاستعلام اعلاه مصدر بيانات النموذج visit_frm ،
  3. وفي النموذج يكون عندنا سواء مربع نص او مربع سرد او مربع قائمة ، وعلى حدث "بعد التحدبث" للحقل بعد كتابة القيمة فيه او اختيار القيمة ، نكتب me.Requery ،
  4. العيب في هذه الطريقة هو ، لا يمكنك استعمال هذا الاستعلام إلا بهذا النموذج ،
  5. فلو اردنا استعمال الاستعلام اعلاه مع المسار التالي Forms!myfrm!ID ، فلن يعمل ونظطر لعمل استعلام آخر له.

 

والطريقة التي اتعامل معها في برامجي هي نفس الطريقة اعلاه ، ولكن :

  1. في برامجي ، هناك دائما نموذج اساسي لا يتم اغلاقه (frm_1 مثلا) ، واعمل فيه حقول نص مخفية ، مثل ID ،
  2. وفي الاستعلام اعلاه ، اعمل المعيار بهذا المسار: Forms!frm_1!ID ،
  3. ثم في النموذج visit_frm او myfrm ، وفي حدث "بعد التحديث" للحقل ، اكتب قيمة ID الى النموذج frm_1 ، ثم اشغل الاستعلام ، هكذا: 
    Forms!frm_1!ID = Me.ID
    Me.Requery

بهذه الطريقة يصبح الاستعلام مرن ويمكن استعمال معياره لاكثر من نموذج 🙂

 

 

جعفر

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

20 دقائق مضت, jjafferr said:
  • في برامجي ، هناك دائما نموذج اساسي لا يتم اغلاقه (frm_1 مثلا) ، واعمل فيه حقول نص مخفية ، مثل ID ،
  • وفي الاستعلام اعلاه ، اعمل المعيار بهذا المسار: Forms!frm_1!ID ،

أستاذي الجليل و معلمي القدير و والدى الحبيب الأستاذ @jjafferr :fff:
 

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

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

5 minutes ago, jjafferr said:

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

 

هذه طريقتي في تفكيك الكود الى اسطر ،

كما انه مافي داعي لتكرار اسم الجدول لكل حقل ، إلا اذا كان هناك ربط بين اكثر من جدول ، وهناك اسماء حقول متشابهه ، حينها يجب استعمال اسم الجدول واسم الحقل معا :

Dim mySQL as string

mySQL="SELECT ID, tdate, code, age, hgb, hgb_s, rbc, rbc_s, hct, hct_s,"
mySQL=mySQL & " hgbp, mcv, mcv_s, mch, mch_s, mchc, mchc_s, rdwcv, rdwcv_s,"
mySQL=mySQL & " rdwsd, rdwsd_s, plt, plt_s, pct, pct_s, pdw, pdw_s, mpv, mpv_s,"
mySQL=mySQL & " wbc, wbc_s, netp, netp_s, lymp, lymp_s, monp, monp_s, eosp, eosp_s,"
mySQL=mySQL & " basp, basp_s, net, net_s, lym, lym_s, mon, mon_s, eos, eos_s, bas, bas_s,"
mySQL=mySQL & " MIDp, MIDp_s, Mid, MID_s, comment, segmp, segmp_s, bandp, bandp_s, segm, segm_s,"
mySQL=mySQL & " [band], band_s, WBC_HISTOGRAM, RBC_HISTOGRAM, PLT_HISTOGRAM"
mySQL=mySQL & " FROM CBC_tbl"
mySQL=mySQL & " WHERE ID=" & [Forms]![visit_frm]![ID]

Me.RecordSource = mySQL

.

 

.

لما يكون عندك استعلام ، الاكسس يعمل له Compile ، ويعمل له شيء اسمه Query plan (خطة عمل الاستعلام) ، فيكون اسرع لان الاكسس عمل طريقه تنفيذيه للاستعلام حسب المعايير والفرز (يعني يقوم بعمل اي معبار قبل الآخر ، ووهل يعمل الفرز قبل تطبيق المعيار وفهرسة الحقول لها دور كبير في عمل هذه الخطة) ، (ويمكنك انزال برنامج تستطيع من خلاله رؤية هذه الخطة وطريقة عملها ، وحتى عمل التغيير عليها ، هنا https://isladogs.co.uk/jet-showplan-manager/index.html ، وللعلم ، فانا اعرف عن خطة عمل الاستعلام اكثر من عقدين ولكني لم اتدخل في عملها الى الآن 🙂

بينما لما نعمل الاستعلام عن طريق الكود (وهذا يحدث في كل مرة يقرأ بها الاكسس الكود) ، فيقوم الاكسس بعمل خطة عمل ، ومن ثم تنفيذ الاستعلام.

ولكن وبعد ان اصبحت الكمبيوترات سريعة ، ففارق الوقت في الفترة التي يأخذها الاكسس في تنفيذ كِلا الاستعلامين ، تُعتبر شبه لا شيء ، ولكن الافضل (ولعدة اسباب ، وخصوصا عند عمل التغيير) والاسرع ، هو عمل الاستعلام شخصيا 🙂

 

القاعدة الذهبية في فهرسة حقول الاكسس هي:

كل حقل تعمل معيار او فرز (سواء في الاستعلام او الكود او فلترة في النموذج او التقرير).

ومن هذه القاعدة ، يجب ان يكون حقل ID في جدولك ، مفهرس 🙂

 

 

.

طريقة فلترة (استعمال المعيار في الاستعلام) ، هي افضل وبأقل كود من استعمال التصفية/الفلترة في النموذج (Me.Filter والذي نحتاج الى عدة اسطر كود للتصفية وتشغيله وحذفه ، وفي عدة احداث) ،

اما طريقة عمل التصفية في الاستعلام ، حسب المتغير الذي في النموذج:

  1. في الاستعلام ، في الحقل الذي نريد وضع المعيار عليه ، نكتب مسار متغير المعيار كاملا ، مثل Forms!visit_frm!ID ، او اذا كان في نموذج فرعي Forms!visit_frm!SubForm_Name!ID ،
  2. ويكون الاستعلام اعلاه مصدر بيانات النموذج visit_frm ،
  3. وفي النموذج يكون عندنا سواء مربع نص او مربع سرد او مربع قائمة ، وعلى حدث "بعد التحدبث" للحقل بعد كتابة القيمة فيه او اختيار القيمة ، نكتب me.Requery ،
  4. العيب في هذه الطريقة هو ، لا يمكنك استعمال هذا الاستعلام إلا بهذا النموذج ،
  5. فلو اردنا استعمال الاستعلام اعلاه مع المسار التالي Forms!myfrm!ID ، فلن يعمل ونظطر لعمل استعلام آخر له.

 

والطريقة التي اتعامل معها في برامجي هي نفس الطريقة اعلاه ، ولكن :

  1. في برامجي ، هناك دائما نموذج اساسي لا يتم اغلاقه (frm_1 مثلا) ، واعمل فيه حقول نص مخفية ، مثل ID ،
  2. وفي الاستعلام اعلاه ، اعمل المعيار بهذا المسار: Forms!frm_1!ID ،
  3. ثم في النموذج visit_frm او myfrm ، وفي حدث "بعد التحديث" للحقل ، اكتب قيمة ID الى النموذج frm_1 ، ثم اشغل الاستعلام ، هكذا: 
    Forms!frm_1!ID = Me.ID
    Me.Requery

بهذه الطريقة يصبح الاستعلام مرن ويمكن استعمال معياره لاكثر من نموذج 🙂

 

 

جعفر

مبسوطه جدا ان البوست بتاعى جمع مجموعه من عمالقة المنتدى

 طيب خلينى اغير سؤالى 

 لو انا عندى فورم اسمه

URINE_FRM

مصدره جدول وليس استعلام اسمه

URINE

موجود فى الجدول دا حقل

ID

ومعنديش مفتاح رئيسى

--------------------------------------------------------

 

 عايزه عملية الفلتره تتم عند الضغط على زرار فى الفورم السابق اسمه

VIST_FRM

مصدره جدول يحتوى على حقل ال 

ID

ايضا

هيفتح الفورم

URINE_FRM

بحيث قيمة ال 

ID

فى فورم 

URINE_FRM

تساوى ID

VIST_FRM

ويحصل فلتره لجدول اليورن بحيث يفتح ال

ID اللى انا جايه بيه من فورم

VIST_FRM

 

اعملها ازاى

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

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



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

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

Important Information