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

مساعدة في الاستعلامات بصفة خاصة


FoMaNsHeE

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

أخواني الكرام

 

الرجاء مساعدتي في الملف المرفق في عمل الاتي : 

أ - عندي 3 جداول بينهم علاقة برقم السند One-by-one

عايز لو في الامكان اعمل استعلام واحد يضم من الثلاث جداول البيانات وحتكون كالاتي :

1 - من جدول Customer 

(Receipt Number - Date - Customer Name - Branch - Department )

2 - من جدول Denomination

(Total Cash )

3 - من جدول Deposit 

[Deposit Amount ]

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

ب - مساعدتي في فورم Cash Deposit

1 - أي بيانات بقوم بتعبتها في الفورم الخاص ب Cash Deposit تترحل أوتوماتيك لجدول Cash Deposit لنفس اليوم الذي تم تعبئة البيانات فيه مع العلم انه قائم على جدولين

 

شاكر ومقدر حسن تعاونكم معنا

Test.rar

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

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

بالنسبة الى (1) ، فاعمب استعلام ، واسحب الجداول الثلاث فيه ، واختر حقول الجداول ، ويصير عندك الاستعلام ،

شو المشكلة اللي عندك؟

دي المشكله

p_415bgw761.jpg

 

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

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

اعمله بالطريقة اليدوية كما شرحت لك

أخي انا جربتها بالطريقتين مشر اضي يسويها بمعني اصح يجمع بيانات من 3 جداول مع اني عامل ليهم علاقات يجيب جدول فاضي ما في شيء

 

 

ياريت تشوف الملف المرفق 

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

تفضل:

1.

597.gif.1e268e99233a6fbf0a28ba74b973cf80.gif

 

2.

وقم بإضافة بقية الحقول

597.Clipboard01.jpg.ad2352ffbb89c774c780d7006cd2ca6b.jpg

.

جعفر

51 دقائق مضت, Maxwal said:

 يجيب جدول فاضي ما في شيء

 

هذا موضوع آخر !!

يعني تستطيع عمل الاستعلام ، ولكن لا توجد سجلات فيه !!

 

طبعا لن تحصل على سجلات ، لأنه لا يوجد رقم متحد بين الجداول الثلاث!!

 

جرب التالي:

في الجدول Deposit ، غيّر القيمة الاولى من 73 الى 68 ، ثم جرب الاستعلام ، فسترى سجلا واحدا:smile:

597.Clipboard02.jpg.3be2099d941ec7518876911a278ba085.jpg

.

جعفر

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

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

في الجدول Deposit ، غيّر القيمة الاولى من 73 الى 68 ، ثم جرب الاستعلام ، فسترى سجلا واحدا:smile:

القيمة مثلا 73 مرتبطة برقم سجل على جدول ال Customer ، ولكن في جدول ال Denomination مش مرتبطه لان دي سندات للعملاء ودي ايداعات 

فلو انت لاحظت في Customer Name متغيرش الى اسم البنك المكتوب في جدول ال Customer اللي نزل عليه السجل بالفعل

معنى كلامي اني عايز يجيب البيانات في يوم 19 من جدول Customer البيانات الاساسية (  Receipt Number - Date - Customer Name - Branch - Department  )

أما من جدول ال  Denomination و Deposit المبلغ قصاد ال Customer Name بتاعه

قصاد مبلغ ال Denomination ياتي اسم العميل

أما قصاد مبلغ الايداع يجيب اسم البنك

مدين - دائن - رصيد

 

 

 

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

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

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

اعطني مثال باسماء الحقول وبالارقام من برنامجك ، واخبرني كيف يجب ان يظهر الاستعلام:smile:

 

جعفر

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

 

p_415zndpm1.jpg

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

مثالك الاخير هو الذي شرح لنا المطلوب:smile:

 

1. نعمل استعلاملنتائج الجدولين Customer و Denomination  ، واستعلام آخر لنتائج الجدولين Customer و Deposit ،

ولغرض الخطوة التالية (استعلام توحيد) ، فيجب ان تكون عدد الحقول نفسها في الاستعلامين ، وبنفس الترتيب:

597.Clipboard03.jpg.e39e3c8b26b1fa2a297d3ced3ebc91ae.jpg

.

ونتائجهم هي كما نريد:

597.Clipboard04.jpg.02f0ea9623b809a6d5016dd42e482448.jpg

.

ثم نحول وضع الاستعلامين الى SQL ،

ثم نعمل استعلام توحيد ،

وننسخ SQL الاستعلام الاول الى استعلام التوحيد ،

ثم جملة Union All

ثم ننسخ SQL الاستعلام الثاني:

597.Clipboard05.jpg.315e9ef09ad688236c873c18bc7fc5c4.jpg

.

ونتيجة الاستعلام:

597.Clipboard06.jpg.7a5eea2bda8fa19ce41c43c7618376d5.jpg

.

الآن نعمل استعلام جديد ، ومصدره استعلام التوحيد اعلاه ،

ويجب استعمال زر النموذج لتشغيل الاستعلام ، كما ان الاستعلام سيأخذ التاريخ من النموذج كذلك ،

والاستعلام ينادي الوحدة النمطية Bal ، والتي سيأخذ نتائجه منها:

597.Clipboard07.jpg.6ad0772acaa32f052942b5688119281e.jpg

.

وكود زر فتح الاستعلام هو (لاحظ انه نريد ان نبدأ متغير الجمع B من الصفر) :


Private Sub cmd_qry_Cust_Deno_Depo_Click()

    B = 0
    DoCmd.OpenQuery "qry_Balance"
End Sub

.

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

597.Clipboard08.jpg.82665670fa819548b1b2fa9a2c57184f.jpg

.

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

Public B As Long

Function Bal(C, D)

    'C = Cash
    'D = Depo
    
    C = Replace(C, "-", 0)
    D = Replace(D, "-", 0)
    
    B = C + B - D
    Bal = B
        
End Function

.

الباقي الذي تريده ، يجب ان تعمله في التقرير:smile:

 

جعفر

597.Test.accdb.zip

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

1 ساعه مضت, jjafferr said:

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

 

أخي الكريم أرفقتلك الملف اللي اشتغلت عليه وبالفعل كل تمام بس لما احرك الماوس او افتح التقرير ال Balance يتغير لارقام عشوائية 

ياريت تشوف المشكله فيه ايه بالظبط وتديني خبر بيها

وشكرا

Test2.rar

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

13 ساعات مضت, jjafferr said:

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

أخي جعفر 

 

الرجاء النظر في الموضوع لان ال Balance غير ثابت عند فتح التقرير انا رافق لك التقرير النهائي اللي عملته بنفس شرحك 

التاريخ 18-02-2017 م

 

p_416m0xqy1.jpg

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

شكرا على تنبيهي على هذا الخطأ:smile:

 

هناك تغييرين في البرنامج ،

1. في الاستعلام ، فارسلنا رقم الوصل ايضا الى الوحدة النمطية ،

597.Clipboard09.jpg.eb96860de3d65584e015a8f2697adf6e.jpg

 

2. وهذه الوحدة النمطية الجديدة:

Option Compare Database

Public B As Long
Public x()
Public B2()

Function Bal(ID, C, D)

    'C = Cash
    'D = Depo
    
    'Do this for entry to the Function
    If B = 0 Then
            
        'asign a Zero value to x(),
        'we will need this so that the Function will NOT repeat
        'going over the old records over and over due to scrolling the Query up and down
    
        Dim rst As DAo.Recordset
    
        Set rst = CurrentDb.OpenRecordset("SELECT * FROM Qry_Cust_Deno_Depo WHERE [Receipt Date]=#" & [Forms]![Search]![MyDate] & "#")
        rst.MoveLast: rst.MoveFirst
        RC = rst.RecordCount
    
        ReDim x(RC)
        ReDim B2(RC)
    
        For i = 1 To RC
    
            x(rst![Receipt Number]) = 0
            rst.MoveNext
        Next i
    
        rst.Close: Set rst = Nothing
    End If
    
    
    If x(ID) = 0 Then
    
        '1st entry asigns values
        C = Replace(C, "-", 0)
        D = Replace(D, "-", 0)
    
        B = C + B - D
        Bal = B
    
        x(ID) = 1
        B2(ID) = B
    
    Else
        'for further visits, just take the already asigned value
        Bal = B2(ID)
        
    End If
        
End Function

 

جعفر

597.1.Test2.accdb.zip

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

منذ ساعه, jjafferr said:

2. وهذه الوحدة النمطية الجديدة:

 

منذ ساعه, jjafferr said:

x(rst![Receipt Number]) = 0

 

اخي جعفر 

أولا جزاك الله كل خير على هذا المجهود الرائع

ثانيا

حبيت افيدك في السطر ده لما تدخل بيانات ليوم 19 مثلا ويوم 20  وتيجي تبحث جالي خطأ في السطر ده

 

كما هو موضح أدناه بالصور

 

p_4161i1du1.jpg

 

ولما نضغط على Run Query

 

 

p_416tkoe62.jpg

 

ولما نضغط على Debug

 

p_416dshdg3.jpg

 

ياريت تشوف الموضوع ده برده معلش تعبناك معانا 

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

1 ساعه مضت, Maxwal said:

ياريت تشوف الموضوع ده برده معلش تعبناك معانا 

عفوا منك سيد ماكسويل
انا نزلت المرفق وبحث بالتواريخ 18\2\2017 و 19 و 20
وما طلعت معي ذاك لمشكلة
لكن رغم ذلك
اكتب في الاول الكود زر  Run Query  هذا الكود
 

On Error Resume Next

تحياتي
 

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

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

 

اولا ، ارفق لك تغيير جدا طفيف ، وهو لتوقيف الخطأ اذا لم يكن هناك سجلات ،

ثانيا ، المعادلة التي تفضلت بها غير عن المعادلة التي ارفقتها انا ، فما ادري اذا انت عملت تغيير آخر كذلك ّّ

والافضل انك ترفق برنامجك الذي اعطاك الخطأ.

 

Option Compare Database

Public B As Long
Public x()
Public B2()

Function Bal(ID, C, D)
On Error GoTo err_Bal

    'C = Cash
    'D = Depo
    
    'Do this for entry to the Function
    If B = 0 Then
            
        'asign a Zero value to x(),
        'we will need this so that the Function will NOT repeat
        'going over the old records over and over due to scrolling the Query up and down
    
        Dim rst As DAo.Recordset
    
        Set rst = CurrentDb.OpenRecordset("SELECT * FROM Qry_Cust_Deno_Depo WHERE [Receipt Date]=" & DateFormat([Forms]![Search]![MyDate]))
        rst.MoveLast: rst.MoveFirst
        RC = rst.RecordCount
    
        ReDim x(RC)
        ReDim B2(RC)
    
        For i = 1 To RC
    
            x(rst![Receipt Number]) = 0
            rst.MoveNext
        Next i
    
        rst.Close: Set rst = Nothing
    End If
    
    
    If x(ID) = 0 Then
    
        '1st entry asigns values
        C = Replace(C, "-", 0)
        D = Replace(D, "-", 0)
    
        B = C + B - D
        Bal = B
    
        x(ID) = 1
        B2(ID) = B
    
    Else
        'for further visits, just take the already asigned value
        Bal = B2(ID)
        
    End If
        
        
Exit_Bal:
        
Exit Function
err_Bal:

    If Err.Number = 3021 Then
        Resume Exit_Bal
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If
    
End Function

Function DateFormat(varDate As Variant) As String
    'Purpose:    Return a delimited string in the date format used natively by JET SQL.
    'Argument:   A date/time value.
    'Note:       Returns just the date format if the argument has no time component,
    '                or a date/time format if it does.
    'Author:     Allen Browne. allen@allenbrowne.com, June 2006.
    '
    'calling the Function: DateFormat(The_Date_Field)
    'a = dlookup("[some field]","some table","[id]=" & me.id & " And DateFormat(The_Date_Field)")
    '
 
    
    If IsDate(varDate) Then
        If DateValue(varDate) = varDate Then
            DateFormat = Format$(varDate, "\#mm\/dd\/yyyy\#")
        Else
            DateFormat = Format$(varDate, "\#mm\/dd\/yyyy hh\:nn\:ss\#")
        End If
    End If
    
End Function

 

جعفر

 

597.1.Test2.accdb.zip

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

عفوا منك سيد ماكسويل
انا نزلت المرفق وبحث بالتواريخ 18\2\2017 و 19 و 20
وما طلعت معي ذاك لمشكلة
لكن رغم ذلك
اكتب في الاول الكود زر  Run Query  هذا الكود

 

لان مفيش بيانات في يوم 19 و 20 اما في المرفق ضيفت البيانات وظهر الموضوع ده

 

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

اخواني الكرام

مغيرتش غير كلمتين receipt و deposit بس 

 

اما بخصوص المشكله ظهرت لما دخلت بيانات ليوم 19 ويوم 20 ومرفق الملف الاول ومعاه الملف الاخير كمان اللي انت بعته يقولي out of rang  لما دخلت بيانات برده

 

597.1.Test2.rar

الملف الاخير.rar

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

18 دقائق مضت, Maxwal said:

 

لان مفيش بيانات في يوم 19 و 20 اما في المرفق ضيفت البيانات وظهر الموضوع ده

 

اخواني الكرام

مغيرتش غير كلمتين receipt و deposit بس 

 

اما بخصوص المشكله ظهرت لما دخلت بيانات ليوم 19 ويوم 20 ومرفق الملف الاول ومعاه الملف الاخير كمان اللي انت بعته يقولي out of rang  لما دخلت بيانات برده

 

597.1.Test2.rar

الملف الاخير.rar

جرب هذا
 

الملف الاخير.rar

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

السلام عليكم:smile:

 

اضطررت عمل جدول مؤقت للموضوع ،

وهناك طريقتين وضعتهم لك:

1. جدول مؤقت tbl_Balance في قاعدة البيانات ،

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

وانا شخصيا لا احبذ وجود جدول مؤقت داخل قاعدة البيانات ، لأنه يجعل حجم البرنامج يكبر ، الى ان بين كل فترة واخرى تضغط على زر الاصلاح Compact and Repair ،

2. جدول مؤقت خارج البرنامج (في مجلد Temp الوندوز) ، وكل ماله علاقة بهذه الطريقة يحمل رقم2 ،

والتقرير2 يأخذ مصدره من هذا الجدول المؤقت ، ولا يستخدم الاستعلام qry_Balance.

 

جعفر

597.2.Test2.accdb.zip

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

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