الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

برجاء المساعدة فى عمل ذلك الاستعلام

بدأه helskran في 3 ديسمبر 2013 · 13 رد · 632 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

استعلام من 3 جداول

1- جدول Clients العملاء

2- Accounts حسابات العملاء

3-Treasury الخزنة

المطلوب عمل استعلام يوضح الاتى

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

المطلوب من العميل فى جدول Accounts حقل Amount

ما دفعة فى جدول Treasury حقل Amount ولكن حقل Treasury_In_Out اذا كانت 0 تعنى داخل الى

 الخزنة 1 تعنى خارج من الخزنة وبالتالى يتم طرحهم من بعض وخصمهم من Amount فى جدول Accounts وذلك لكل عميل

برجاء الافادة وشكرا مقدما

مرفق نسخة من قاعدة البيانات

Lawyer.rar

#2

استاذ / حسام فين ردودك الجميلة هو السؤال صعب ولا اية ؟؟؟؟

#3
helskran كتب:

استاذ / حسام فين ردودك الجميلة هو السؤال صعب ولا اية ؟؟؟؟

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

أهلا بك اخي ...

اعتقد أن الاستعلام هو :  

SELECT Id , name , Nz(MustPaid , 0) AS C_MustPaid  , Nz(PaymentIn, 0) AS C_PaymentIn , Nz(PaymentOut, 0) AS C_PaymentOut , C_MustPaid  - (C_PaymentIn - C_PaymentOut)  AS Final FROM
(
SELECT Clients.Id, Clients.name , 
(SELECT SUM(Amount) FROM Accounts WHERE Accounts.ClientsId = Clients.Id) AS MustPaid ,
(SELECT SUM(Amount) FROM Treasury WHERE Treasury.Clients_Emp_Id = Clients.Id AND Treasury_In_Out = 0) AS PaymentIn ,
(SELECT SUM(Amount) FROM Treasury WHERE Treasury.Clients_Emp_Id = Clients.Id AND Treasury_In_Out = 1) AS PaymentOut 
FROM Clients
)

 و هو يعمل داخل بيئة الأكسس فقط , أما لو أردت التعامل معه بالدوت نت , فالدالة Nz  لا تعمل لأنها جزء من الــ Access Library  و ليست جزء من المحرك Jet  أو ACE  لذلك نستبدلها بالدالة  بمزيج من IIF + IsNull  كمايلي : 

SELECT Id , name , IIF(IsNull(MustPaid) , 0 ,MustPaid ) AS C_MustPaid  , IIF(IsNull(PaymentIn), 0, PaymentIn) AS C_PaymentIn , IIF(IsNull(PaymentOut), 0 , PaymentOut) AS C_PaymentOut , C_MustPaid  - (C_PaymentIn - C_PaymentOut)  AS Final FROM
(
SELECT Clients.Id, Clients.name , 
(SELECT SUM(Amount) FROM Accounts WHERE Accounts.ClientsId = Clients.Id) AS MustPaid ,
(SELECT SUM(Amount) FROM Treasury WHERE Treasury.Clients_Emp_Id = Clients.Id AND Treasury_In_Out = 0) AS PaymentIn ,
(SELECT SUM(Amount) FROM Treasury WHERE Treasury.Clients_Emp_Id = Clients.Id AND Treasury_In_Out = 1) AS PaymentOut 
FROM Clients
)
1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#4

شكرا جزيلا 1- ولكن هو لا يظهر جميع العملاء .

2- بالاضافة انة يظهر ما علية فقط وانا اريد ان يظهر ما له وما علية .

وشكرا مقدما

#5

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

أهلا و سهلا بك أخي ..

القاعدة المرفقة فيها عملين فقط و هما يظهران في الاستعلام ..

الاستعلام بعد التعديل هو : 

SELECT Id , name , Nz(MustPaid , 0) AS C_MustPaid  , Nz(PaymentIn, 0) AS C_PaymentIn , Nz(PaymentOut, 0) AS C_PaymentOut , C_MustPaid  - (C_PaymentIn - C_PaymentOut)  AS Final , IIF(Final > 0 , Final , 0) AS [ما عليه] , IIF(Final < 0 , ABS(Final) , 0) AS [ما له] FROM
(
SELECT Clients.Id, Clients.name , 
(SELECT SUM(Amount) FROM Accounts WHERE Accounts.ClientsId = Clients.Id) AS MustPaid ,
(SELECT SUM(Amount) FROM Treasury WHERE Treasury.Clients_Emp_Id = Clients.Id AND Treasury_In_Out = 0) AS PaymentIn ,
(SELECT SUM(Amount) FROM Treasury WHERE Treasury.Clients_Emp_Id = Clients.Id AND Treasury_In_Out = 1) AS PaymentOut 
FROM Clients
) AS TT

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#6

اخى العزيز حسام شكرا جزيلا لك وجزاك الله خيرا .

بس فى طلب اخير وهو الحصول على ما لة وما علية خلا فترة معينة والسؤال نضيف التاريخ من جدول accounts ام التاريخ من جدول Treasury وكيف يكون الاستعلام النهائى بعد اضافة التاريخ وشكرا مقدما

#7

1- طلب اخر لو عاوز انقل بيانات ممعينة الى جدول اخر

2- لو عاوز انسخ بيانات ممعينة الى جدول اخر

وشكرا جزيلا

#8

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

أهلا بك اخي ...

بالنسبة لجعل الاستعلام يعمل بين تاريخين فهو بالشكل : 

SELECT Id , name , Nz(MustPaid , 0) AS C_MustPaid  , Nz(PaymentIn, 0) AS C_PaymentIn , Nz(PaymentOut, 0) AS C_PaymentOut , C_MustPaid  - (C_PaymentIn - C_PaymentOut)  AS Final , IIF(Final > 0 , Final , 0) AS [ما عليه] , IIF(Final < 0 , ABS(Final) , 0) AS [ما له] FROM
(
SELECT Clients.Id, Clients.name , 
(SELECT SUM(Amount) FROM Accounts WHERE Accounts.ClientsId = Clients.Id AND (Date_A BETWEEN  #1/1/2013# AND #1/10/2013#)) AS MustPaid ,
(SELECT SUM(Amount) FROM Treasury WHERE Treasury.Clients_Emp_Id = Clients.Id AND Treasury_In_Out = 0 AND (Date_A BETWEEN  #1/1/2013# AND #31/12/2013#)) AS PaymentIn ,
(SELECT SUM(Amount) FROM Treasury WHERE Treasury.Clients_Emp_Id = Clients.Id AND Treasury_In_Out = 1 AND (Date_A BETWEEN  #1/1/2013# AND #31/12/2013#)) AS PaymentOut 
FROM Clients
) AS TT

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

الطريقة الصحيحة للحساب تتوجب العودة لكل سجلات الــ Accounts  و الــ Treasury  نضعها في recordSet  ثم نرتب حسب التاريخ و نحسب الحقول ما له و ما عليه عن طريق حلقة For  تمر على كل السجلات .

ثم تعرض من الجدول الناتج , نعرض السجلات التي توافق التاريخ المطلوب .

 

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

عملية نسخ البيانات , عن طريق استعلام إلحاق أو مباشرة بالسكوال : 

INSERT INTO C2 (Num , FirstName)
SELECT Id , Name FROM Clients WHERE Id BETWEEN 10 AND 100;

نقل البيانات .. يتطلب نسخ البيانات أولا ثم حذفها ... ضمن Transaction  واحدة و يتم ذلك عن طريق VBA  كمايلي : 

Private Sub Command0_Click()
On Error GoTo Err_DoArchive
  Dim ws As DAO.Workspace   'Current workspace (for transaction).
  Dim db As DAO.Database    'Inside the transaction.
  Dim bInTrans As Boolean   'Flag that transaction is active.
  Dim strSql As String      'Action query statements.
  Dim strMsg As String      'MsgBox message.

  'Step 1: Initialize database object inside a transaction.
  Set ws = DBEngine(0)
  ws.BeginTrans
  bInTrans = True
  Set db = ws(0)

  'Step 2: Execute the append.
  strSql = "INSERT INTO C2 (Num , FirstName)  SELECT Id , Name FROM Clients WHERE Id BETWEEN 10 AND 100;"
  db.Execute strSql, dbFailOnError

  'Step 3: Execute the delete.
  strSql = "DELETE FROM Clients WHERE Id BETWEEN 10 AND 100;"
  db.Execute strSql, dbFailOnError

  'Step 4: Get user confirmation to commit the change.
  strMsg = "Archive " & db.RecordsAffected & " record(s)?"
  If MsgBox(strMsg, vbOKCancel + vbQuestion, "Confirm") = vbOK Then
    ws.CommitTrans
    bInTrans = False
  End If

Exit_DoArchive:
  'Step 5: Clean up
  On Error Resume Next
  Set db = Nothing
  If bInTrans Then   'Rollback if the transaction is active.
    ws.Rollback
  End If
  Set ws = Nothing
Exit Sub

Err_DoArchive:
  MsgBox err.Description, vbExclamation, "Archiving failed: Error " & err.Number
  Resume Exit_DoArchive
End Sub

بالتوفيق .

تم تعديل هذه المشاركة بواسطة حسام الشامي في 4 ديسمبر 2013 في 15:15

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#9

جزاك الله خيرا على مجهودك .

لى طلب اخر احتاج تصميم قاعدة بيانات صحيحة للحسابات والمبيعات لان  ما ابدا بالبرنامج اجد تصميم القاعدة  ليس صحيحا

وشكرا مقدما .

#10

أهلا و سهلا بك أخي ..

تصميم قاعدة للحسابات و المبيعات يعتبر مشروع كبير ..

ابحث في المنتدى , ستجد الكثير من مشاريع للاعضاء ..

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

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#12

اخ حسام اوضح لك انا عاوز قاعدة بيانات سليمة ابنى عليها برنامج ب vb.net يعنى احتاج الجداول والعلاقات فقط بس قاعدة كاملة لابنى عليها البرنامج

#13

شكرا للأخ (طالب علم مبتدىء) على الروابط المفيدة .

الأخ (helskran) اقترح أن تفتح موضوع جديد , تطلب فيه الجداول و العلاقات , فربما أحد الاعضاء عنده قاعدة جاهزة , يوفر عليك الكثير من الوقت و الجهد .

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#14

شكرا على الرد ساقوم بفتح موضوع جديد

مواضيع مشابهة