Selasa, 05 Agustus 2014

RE: [MS_AccessPros] Report Balance on each row should be correct on date order

 

I understand requirements to keep solutions simple. My post was more for the masses to see how a subquery can/should be used in place of DSum(). I also noticed an error in the TotExpense subquery and have provided the new version as well as the equivalent DSum():
 
Subquery Expression (updated):
  (SELECT Sum(Expenses)
    FROM[Clients Transaction] Exp
    WHERE Exp.TransactionDate <= [Clients Transaction].[TransactionDate]
    AND Exp.TransactionID <= [Clients Transaction].[TransactionID]
    AND Exp.ClientCIN = [Clients Transaction].[ClientCIN]) AS TotExpense,
 
Same result using DSum():
DSum("Expenses", "[Clients Transaction]",
  "TransactionDate <= " & Format([TransactionDate], "\#yyyy-mm-dd\#") &
  " AND TransactionID <= " & [TransactionID] &
  " AND ClientCIN = " & [ClientCIN]) AS TotExpense
 
Duane Hookom MVP
MS Access

To: MS_Access_Professionals@yahoogroups.com
From: MS_Access_Professionals@yahoogroups.com
Date: Tue, 5 Aug 2014 10:51:31 -0500
Subject: Re: [MS_AccessPros] Report Balance on each row should be correct on date order



Duane-

Good suggestion.  We've been trying to work within the syntax that's comfortable to him.  Note that DSum is only slightly more inefficient than an embedded correlated subquery.  The end result is the same.

John Viescas, Author
Microsoft Access 2010 Inside Out
Microsoft Access 2007 Inside Out
Microsoft Access 2003 Inside Out
Building Microsoft Access Applications 
SQL Queries for Mere Mortals 
(Paris, France)




On Aug 5, 2014, at 10:46 AM, Duane Hookom duanehookom@hotmail.com [MS_Access_Professionals] <MS_Access_Professionals@yahoogroups.com> wrote:

I try to avoid DSum() in queries if at all possible. Even if you use DSum() I think the final balance could be performed with a single DSum("AmountReceived-Expenses",...)
 
This is how I would write the query using subqueries (formatted for readability):
 
SELECT [Clients Transaction].TransactionID, [Clients Transaction].TransactionDate,
  [Clients Transaction].TransactionType, [Clients Transaction].ClientCIN,
  [Clients Transaction].ClientName, [Clients Transaction].ConsignmentNo,
  [Clients Transaction].Cartons, [Clients Transaction].Weight, [Clients Transaction].Details,
  [Clients Transaction].AmountReceived, [Clients Transaction].Expenses,
 
  (SELECT SUM(AmountReceived)
    FROM [Clients Transaction] Rec
 WHERE Rec.TransactionDate <= [Clients Transaction].[TransactionDate]
 AND Rec.TransactionID <= [Clients Transaction].[TransactionID] 
 AND Rec.ClientCIN = [Clients Transaction].[ClientCIN]) AS TotCash,
 
  (SELECT Sum(Expenses) FROM[Clients Transaction] Exp
    FROM Exp.TransactionDate <= [Clients Transaction].[TransactionDate]
    AND Exp.TransactionID <= [Clients Transaction].[TransactionID]
    AND Exp.ClientCIN = [Clients Transaction].[ClientCIN]) AS TotExpense,
 
  (SELECT SUM(AmountReceived-Expenses)
    FROM [Clients Transaction] Bal
    WHERE Bal.TransactionDate <= [Clients Transaction].[TransactionDate]
    AND Bal.TransactionID <= [Clients Transaction].[TransactionID]
    AND Bal.ClientCIN = [Clients Transaction].[ClientCIN]) AS Balance

FROM [Clients Transaction]
WHERE ClientCIN=[Forms]![Clients Balance Sheet Dialog]![cboClientCIN];
 
Duane Hookom MVP
MS Access
 

From: MS_Access_Professionals@yahoogroups.com
Date: Tue, 5 Aug 2014 07:27:03 -0500
Subject: Re: [MS_AccessPros] Report Balance on each row should be correct on date order

Khalid-

See also Graham's reply.  Here is your SQL again a bit more simplified and laid out so that you can understand it better.  Note that I eliminated separate < and = comparisons on TransactionDate and used a simpler <=.

SELECT [Clients Transaction].TransactionID, [Clients Transaction].TransactionDate, 
  [Clients Transaction].TransactionType, [Clients Transaction].ClientCIN, 
  [Clients Transaction].ClientName, [Clients Transaction].ConsignmentNo, 
  [Clients Transaction].Cartons, [Clients Transaction].Weight, [Clients Transaction].Details, 
  [Clients Transaction].AmountReceived, [Clients Transaction].Expenses, 
  DSum("AmountReceived", "[Clients Transaction]", 
  "TransactionDate <= " & Format([TransactionDate], "\#yyyy-mm-dd\#") & 
  " AND TransactionID <= " & [TransactionID] & 
  " AND ClientCIN = " & [ClientCIN]) AS TotCash, 
  DSum("Expenses", "[Clients Transaction]", 
  "TransactionDate <= " & Format([TransactionDate], "\#yyyy-mm-dd\#") & 
  " AND TransactionID <= " & [TransactionID] & 
  " AND ClientCIN = " & [ClientCIN]) AS TotExpense, 
  Nz(DSum("AmountReceived", "[Clients Transaction]", 
  "TransactionDate <= " & Format([TransactionDate], "\#yyyy-mm-dd\#") & 
  " AND TransactionID <= " & [TransactionID] & 
  " AND ClientCIN = " & [ClientCIN]), 0) 
  -Nz(DSum("Expenses", "[Clients Transaction]", 
  "TransactionDate <= " & Format([TransactionDate], "\#yyyy-mm-dd\#") &  
  " AND TransactionID <= " & [TransactionID] & 
  " AND ClientCIN = " & [ClientCIN]), 0) AS Balance 
FROM [Clients Transaction]
WHERE ((([Clients Transaction].ClientCIN)=[Forms]![Clients Balance Sheet Dialog]![cboClientCIN]));

John Viescas, Author

On Aug 5, 2014, at 4:42 AM, Khalid Tanweer khalidtanweerburrah@yahoo.com [MS_Access_Professionals] <MS_Access_Professionals@yahoogroups.com> wrote:

Hello Graham,

I read your observations and explanations carefully and tried to digest the suggestions you explained deeply.
Well i may have to admit that i am not so perfect in sql, the changes i made gives me syntax error, the sql is now:
SELECT [Clients Transaction].TransactionID, [Clients Transaction].TransactionDate, [Clients Transaction].TransactionType, [Clients Transaction].ClientCIN, [Clients Transaction].ClientName, [Clients Transaction].ConsignmentNo, [Clients Transaction].Cartons, [Clients Transaction].Weight, [Clients Transaction].Details, [Clients Transaction].AmountReceived, [Clients Transaction].Expenses, DSum("AmountReceived","[Clients Transaction(TransactionDate < " & Format([TransactionDate], "\#yyyy-mm-dd\#") & " OR (TransactionDate = " & Format([TransactionDate], "\#yyyy-mm-dd\#") & " AND TransactionID <= " & [TransactionID] & ")) & " AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]) AS TotCash, DSum("Expenses","[Clients Transaction"(TransactionDate < " & Format([TransactionDate], "\#yyyy-mm-dd\#") & " OR (TransactionDate = " & Format([TransactionDate], "\#yyyy-mm-dd\#") & " AND TransactionID <= " & [TransactionID] & ")) & " AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]) AS TotExpense, Nz(DSum("AmountReceived","[Clients Transaction]","(TransactionDate < " & Format([TransactionDate], "\#yyyy-mm-dd\#") & " OR (TransactionDate = " & Format([TransactionDate], "\#yyyy-mm-dd\#") & " AND TransactionID <= " & [TransactionID] & ")) AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]), 0)-Nz(DSum("Expenses","[Clients Transaction]","(TransactionDate < " & Format([TransactionDate], "\#yyyy-mm-dd\#") & " OR (TransactionDate = " & Format([TransactionDate], "\#yyyy-mm-dd\#") & " AND TransactionID <= " & [TransactionID] & ")) AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]), 0) AS Balance FROM [Clients Transaction]
WHERE ((([Clients Transaction].ClientCIN)=[Forms]![Clients Balance Sheet Dialog]![cboClientCIN]));

I am not sure i did the changes exactly you told. Please check it and point the mistake.

Regards,
Khalid

On Tuesday, August 5, 2014 12:16 PM, "Khalid Tanweer khalidtanweerburrah@yahoo.com [MS_Access_Professionals]" <MS_Access_Professionals@yahoogroups.com> wrote:
 
John,
Latest sql is:
SELECT [Clients Transaction].TransactionID, [Clients Transaction].TransactionDate, [Clients Transaction].TransactionType, [Clients Transaction].ClientCIN, [Clients Transaction].ClientName, [Clients Transaction].ConsignmentNo, [Clients Transaction].Cartons, [Clients Transaction].Weight, [Clients Transaction].Details, [Clients Transaction].AmountReceived, [Clients Transaction].Expenses, DSum("AmountReceived","[Clients Transaction]","TransactionDate <= #" & [TransactionDate] & "# AND TransactionID <= " &  [TransactionID] & " AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]) AS TotCash, DSum("Expenses","[Clients Transaction]","TransactionDate <= #" & [TransactionDate] & "# AND TransactionID <= " &  [TransactionID] & " AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]) AS TotExpense, NZ(DSum("AmountReceived","[Clients Transaction]","TransactionDate <= #" & [TransactionDate] & "# AND TransactionID <= " &  [TransactionID] & " AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]),0)-NZ(DSum("Expenses","[Clients Transaction]","TransactionDate <= #" & [TransactionDate] & "# AND TransactionID <= " &  [TransactionID] & " AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]),0) AS Balance
FROM [Clients Transaction]
WHERE ((([Clients Transaction].ClientCIN)=[Forms]![Clients Balance Sheet Dialog]![cboClientCIN]));

In the meanwhile i'll check for Graham's suggestions also and let inform both of you.
 
Regards,
Khalid
 
On Tuesday, August 5, 2014 2:41 AM, "John Viescas JohnV@msn.com [MS_Access_Professionals]" <MS_Access_Professionals@yahoogroups.com> wrote:
Khalid-
 
It looks like it is erroneously picking up transaction #30 which does have a lower transaction ID but does not have a lower date.  Are you sure you're checking for both date and transaction ID in all DSum expressions?  Please post the latest SQL.

John Viescas, Author
On Aug 4, 2014, at 7:37 AM, Khalid Tanweer khalidtanweerburrah@yahoo.com [MS_Access_Professionals] <MS_Access_Professionals@yahoogroups.com> wrote:
John,
Yet there is some flaw in Balance, from TransactionID 6 to 34 Balance is OK. See against TransactionID 36 Balance is not correct.
 
TransactionID  TransactionDate  AmountReceived  Expenses  Balance
  6 01/01/14                       26,063      -26,063
  7  01/01/14          807            -25,256
20  26/01/14                                   104 -25,360
21                      27/01/14                                  250      -25,610
22                      27/01/14                                             250      -25,860
34                      30/01/14 7,000       -18,860
36                      07/02/14                                     1,883      -20,795
39                      20/02/14                                       350      -21,093
30                      27/02/14                                       52     -25,912
44                      27/02/14                                       1,555      -22,700

............ and more entries

Please look into it.

On Monday, August 4, 2014 4:45 PM, "John Viescas JohnV@msn.com [MS_Access_Professionals]" <MS_Access_Professionals@yahoogroups.com> wrote:
 
Ah, when you have multiple transactions on the same date, then you also need to sort on TransactionID.

SELECT [Clients Transaction].TransactionID, [Clients Transaction].TransactionDate, [Clients Transaction].TransactionType, [Clients Transaction].ClientCIN, [Clients Transaction].ClientName, [Clients Transaction].ConsignmentNo, [Clients Transaction].Cartons, [Clients Transaction].Weight, [Clients Transaction].Details, [Clients Transaction].AmountReceived, [Clients Transaction].Expenses, DSum("AmountReceived","[Clients Transaction]","TransactionDate <= #" & [TransactionDate] & "# AND TransactionID <= " &  [TransactionID] & " AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]) AS TotCash, DSum("Expenses","[Clients Transaction]","TransactionDate <= #" & [TransactionDate] & "# AND TransactionID <= " &  [TransactionID] & " AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]) AS TotExpense, NZ(DSum("AmountReceived","[Clients Transaction]","TransactionDate <= #" & [TransactionDate] & "# AND TransactionID <= " &  [TransactionID] & " AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]),0)-NZ(DSum("Expenses","[Clients Transaction]","TransactionDate <= #" & [TransactionDate] & "# AND TransactionID <= " &  [TransactionID] & " AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]),0) AS Balance
FROM [Clients Transaction]
WHERE ((([Clients Transaction].ClientCIN)=[Forms]![Clients Balance Sheet Dialog]![cboClientCIN]));

John Viescas, Author
On Aug 4, 2014, at 12:15 AM, Khalid Tanweer khalidtanweerburrah@yahoo.com [MS_Access_Professionals] <MS_Access_Professionals@yahoogroups.com> wrote:
John,
Sorry from me too, actually it was late night here when i received your last reply. Now there is no error in query.

But there is still some miscalculation in Balance i quote down few entries.

TransactionID  TransactionDate  AmountReceived  Expenses  Balance
  6 01/01/14                       26,063      -25,256
  7  01/01/14          807           -25,256
20  26/01/14                                  104 -25,360
21                      27/01/14                                  250      -25,860
22                      27/01/14                                            250      -25,860
34                      30/01/14 7,000       -18,860
36                      07/02/14                                     1,883      -21,569
39                      20/02/14                                       350      -21,093
30                      27/02/14                                       52      -29,940
44                      27/01/14                                       250      -25,860

............ and more entries

Please look into it.

regards,
Khalid


Khalid-
 
Sorry, I missed changing one TransactionID to TransactionDate.  You should have been able to spot that.

SELECT [Clients Transaction].TransactionID, [Clients Transaction].TransactionDate, [Clients Transaction].TransactionType, [Clients Transaction].ClientCIN, [Clients Transaction].ClientName, [Clients Transaction].ConsignmentNo, [Clients Transaction].Cartons, [Clients Transaction].Weight, [Clients Transaction].Details, [Clients Transaction].AmountReceived, [Clients Transaction].Expenses, DSum("AmountReceived","[Clients Transaction]","TransactionDate <= #" & [TransactionDate] & "# AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]) AS TotCash, DSum("Expenses","[Clients Transaction]","TransactionDate <= #" & [TransactionDate] & "# AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]) AS TotExpense, NZ(DSum("AmountReceived","[Clients Transaction]","TransactionDate <= #" & [TransactionDate] & "# AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]),0)-NZ(DSum("Expenses","[Clients Transaction]","TransactionDate <= #" & [TransactionDate] & "# AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]),0) AS Balance
FROM [Clients Transaction]
WHERE ((([Clients Transaction].ClientCIN)=[Forms]![Clients Balance Sheet Dialog]![cboClientCIN]));

John Viescas, Author

On Aug 3, 2014, at 11:58 AM, Khalid Tanweer khalidtanweerburrah@yahoo.com [MS_Access_Professionals] <MS_Access_Professionals@yahoogroups.com> wrote:

John,

Again there is syntax error:
Syntax error in date in query expression 'TransactionDate <=#10# AND ([Clients Transaction].ClientCIN= 5'.
While repeatedly clicking on error message OK button the above figure between #6# go on changing, and this is value of TransactionID. Then the report opens.
Column for Balance is now showing data. But i assume its not in order for example see the top two rows
 
TransactionID  TransactionDate  AmountReceived  Expenses  Balance
6                       01/01/14            Null                      26,063       807
7  01/01/14     807                       Null          807
Khalid 
 
On Sunday, August 3, 2014 9:23 PM, "John Viescas JohnV@msn.com [MS_Access_Professionals]" <MS_Access_Professionals@yahoogroups.com> wrote:
 
 
Khalid-

I didn't notice that you have somehow lost the second parameter in all your DSum statements.  Try this:

SELECT [Clients Transaction].TransactionID, [Clients Transaction].TransactionDate, [Clients Transaction].TransactionType, [Clients Transaction].ClientCIN, [Clients Transaction].ClientName, [Clients Transaction].ConsignmentNo, [Clients Transaction].Cartons, [Clients Transaction].Weight, [Clients Transaction].Details, [Clients Transaction].AmountReceived, [Clients Transaction].Expenses, DSum("AmountReceived","[Clients Transaction]","TransactionDate <= #" & [TransactionDate] & "# AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]) AS TotCash, DSum("Expenses","[Clients Transaction]","TransactionDate <= #" & [TransactionDate] & "# AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]) AS TotExpense, NZ(DSum("AmountReceived","[Clients Transaction]","TransactionDate <= #" & [TransactionDate] & "# AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]),0)-NZ(DSum("Expenses","[Clients Transaction]","TransactionDate <= #" & [TransactionID] & "# AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]),0) AS Balance
FROM [Clients Transaction]
WHERE ((([Clients Transaction].ClientCIN)=[Forms]![Clients Balance Sheet Dialog]![cboClientCIN]));

John Viescas, Author
On Aug 3, 2014, at 11:13 AM, Khalid Tanweer khalidtanweerburrah@yahoo.com [MS_Access_Professionals] <MS_Access_Professionals@yahoogroups.com> wrote:

John,

While opening the report got the following error message:
 
The Microsoft jet database engine cannot find the input table or query 'TransactionDate <=#01/01/14# AND [Clients Transaction].ClientCIN=5'. Make sure it exists and that its name is spelled correctly.
 
After long clicking on this message box OK button report opens but Balance column is showing zero value on each row. Although on report footer sum of "AmountReceived" and sum of "Expenses" is correct.
 
Khalid
 
Kahlid-

Spotted an extra open paren in your first DSum and a few other anomalies:

SELECT [Clients Transaction].TransactionID, [Clients Transaction].TransactionDate, [Clients Transaction].TransactionType, [Clients Transaction].ClientCIN, [Clients Transaction].ClientName, [Clients Transaction].ConsignmentNo, [Clients Transaction].Cartons, [Clients Transaction].Weight, [Clients Transaction].Details, [Clients Transaction].AmountReceived, [Clients Transaction].Expenses, DSum("AmountReceived","TransactionDate <= #" & [TransactionDate] & "# AND [Clients Transaction].ClientCIN = " & [ClientCIN]) AS TotCash, DSum("Expenses","TransactionDate <= #" & [TransactionDate] & "# AND [Clients Transaction].ClientCIN = " & [ClientCIN]) AS TotExpense, NZ(DSum("AmountReceived","TransactionDate <= #" & [TransactionDate] & "# AND [Clients Transaction].ClientCIN = " & [ClientCIN]),0)-NZ(DSum("Expenses","TransactionDate <= #" & [TransactionDate] & "# AND [Clients Transaction].ClientCIN = " & [ClientCIN]), 0) AS Balance
FROM [Clients Transaction]
WHERE ((([Clients Transaction].ClientCIN)=[Forms]![Clients Balance Sheet Dialog]![cboClientCIN]));

John Viescas, Author

On Aug 3, 2014, at 7:55 AM, Khalid Tanweer khalidtanweerburrah@yahoo.com [MS_Access_Professionals] <MS_Access_Professionals@yahoogroups.com> wrote:

John,

I am getting syntax error while saving the query and it is highlighting "Expenses"
SELECT [Clients Transaction].TransactionID, [Clients Transaction].TransactionDate, [Clients Transaction].TransactionType, [Clients Transaction].ClientCIN, [Clients Transaction].ClientName, [Clients Transaction].ConsignmentNo, [Clients Transaction].Cartons, [Clients Transaction].Weight, [Clients Transaction].Details, [Clients Transaction].AmountReceived, [Clients Transaction].Expenses, DSum("AmountReceived","TransactionDate <= #" & [TransactionDate] & "# AND ([Clients Transaction].ClientCIN = " & [ClientCIN]) AS TotCash, DSum("Expenses","TransactionDate <= #" & [TransactionDate] & "# AND ([Clients Transaction].ClientCIN = " & [ClientCIN]) AS TotExpense, NZ(DSum("AmountReceived","TransactionDate <= #" & [TransactionDate] & "# AND ([Clients Transaction].ClientCIN = " & [ClientCIN]= " & [ClientCIN]),0)-NZ(DSum("Expenses","TransactionDate <= #" & [TransactionDate] & "# AND ([Clients Transaction].ClientCIN = " & [ClientCIN]) AS Balance
FROM [Clients Transaction]
WHERE ((([Clients Transaction].ClientCIN)=[Forms]![Clients Balance Sheet Dialog]![cboClientCIN]));

Khalid
 
Khalid-

Try:
 
"TransactionDate <= #" & [TransactionDate] & "# AND ([Clients Transaction].ClientCIN = " & [ClientCIN]

John Viescas, Author
On Aug 3, 2014, at 2:13 AM, Khalid Tanweer khalidtanweerburrah@yahoo.com [MS_Access_Professionals] <MS_Access_Professionals@yahoogroups.com> wrote:

Hi John,
 
I have a report  with Record source "ClientsBalanceSheetQuery"
 
SELECT [Clients Transaction].TransactionID, [Clients Transaction].TransactionDate, [Clients Transaction].TransactionType, [Clients Transaction].ClientCIN, [Clients Transaction].ClientName, [Clients Transaction].ConsignmentNo, [Clients Transaction].Cartons, [Clients Transaction].Weight, [Clients Transaction].Details, [Clients Transaction].AmountReceived, [Clients Transaction].Expenses, DSum("AmountReceived","[Clients Transaction]","TransactionID <=" & [TransactionID] & " AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]) AS TotCash, DSum("Expenses","[Clients Transaction]","TransactionID <=" & [TransactionID] & " AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]) AS TotExpense, NZ(DSum("AmountReceived","[Clients Transaction]","TransactionID <=" & [TransactionID] & " AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]),0)-NZ(DSum("Expenses","[Clients Transaction]","TransactionID <=" & [TransactionID] & " AND ([Clients Transaction].ClientCIN)= " & [ClientCIN]),0) AS Balance
FROM [Clients Transaction]
WHERE ((([Clients Transaction].ClientCIN)=[Forms]![Clients Balance Sheet Dialog]![cboClientCIN]));
 
Sorting and grouping is "TransactionID"
 
At present with this query results are perfect, but now the requirement is that Sort order should be TransactionDate and Balance on each row should be according to TransactionDate.
 
I have tried changing sort order to TransactionDate but results are not OK, also on the above query at DSum statements i tried to change "TransactionID <=" & [TransactionID]" with "TransactionDate <=" & [TransactionDate]" but that also did'nt worked.

please help.
Regards,
Khalid Tanweer



























__._,_.___

Posted by: Duane Hookom <duanehookom@hotmail.com>
Reply via web post Reply to sender Reply to group Start a New Topic Messages in this topic (22)

.

__,_._,___

Tidak ada komentar:

Posting Komentar