[AccessD] Only a "Superstar" Access Developer CanSolve ThisProblem

Lawhon, Alan C Contractor/Morgan Research alan.lawhon at us.army.mil
Thu Feb 17 15:00:41 CST 2005


Jim:

I've got a more basic problem ...

I execute the query and it returns #Error in the RunSum [calculated
field]
column for EVERY RECORD - except one!  (Is this directly related to your
number 1. point below?)

Now that I think about it (Thanks for reminding me!) functions with
parameters must have arguments passed to them when they're called.  Duh!
Therefore, I guess I need to write a macro (or VBA module) that will
open
the table, set the record pointer to the first record, set up a Do Loop
that executes [all records] to EOF, and call the query for each
iteration
of the Do loop passing the [Field A] and [Field B] arguments to the
function.

Yea, that should do it!

Alan C. Lawhon



-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Jim Dettman
Sent: Thursday, February 17, 2005 1:28 PM
To: Access Developers discussion and problem solving
Subject: RE: [AccessD] Only a "Superstar" Access Developer CanSolve
ThisProblem

Alan,

  Just watch out for the two gotcha's that occur when calling a function
from a query:

1. You must pass a parameter to the function to force it to execute for
every row.  If you don't, the function will only be called once at the
start
of the query.  Not really a problem in this case, but can be if your
just
trying to number the rows  ie. the increment is in the function, and you
make a call like this:

  GetRowCount()

2. If there is criteria on the column where the function is called, it
will
be executed two times for each row.

Jim.

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Lawhon, Alan C
Contractor/Morgan Research
Sent: Thursday, February 17, 2005 12:29 PM
To: Access Developers discussion and problem solving
Subject: RE: [AccessD] Only a "Superstar" Access Developer CanSolve
ThisProblem


Charlotte:

Prior to running a query, we do a "descending" sort [manually] on
[Field B] to get the records with the highest "counts" to the top.
In the example I show, the fourth record (where [Field B] = 100),
would sort to the top and the "first record" (where [Field B] = 20)
would sort to the bottom.  Once we have the records in that order,
then we will execute this "calculated field" summation query.

As far as a "unique key" field (like an AutoNumber PK) is concerned,
I don't think such a field is necessary since the text "values" stored
in [Field A] are all "unique" anyway ...  I'm not really interested in
keys and referential integrity for a 2-field table - I just want a
"Running Total" updated (and displayed) onscreen for each record when
this query executes.

You may be right - it may not be possible to execute such a query due
to the fact that one of the operands you need to calculate the
[Running Total] sum for the current record depends on the [Running
Total] sum from the previous record.  To solve this problem, there has
to be a
way to "save" the Running_Total [from the previous record] for use with
the current record.  In datasheet view, I am aware of a keystroke
sequence,
(i.e. CTRL-Apostrophe) which copies and pastes the value from the
previous
record into the same field of the current record.  If this keystroke
sequence could somehow be duplicated within the query, then the
algorithm
for solving this problem would be to "copy" the [Running Total] from the
previous record into the [Running Total] of the current record and then
add the [Field B] value to the [Running Total] of the current record -
and repeat this process for all records to the end of file.  What I was
hoping is that somebody knew (or knows) how to code this "copy and
paste" behavior into a summing expression that can be inserted into a
calculated field cell in the query - and that it will work!

I'm going to (closely) examine this Q205183 Knowledge Base article that
Lambert Heenan and Jim Dettman have referred me to.  This may be the
only
technique that will work for the particular problem that I have
postulated.

Thanks (all) for your comments and suggestions.

Alan C. Lawhon


-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Charlotte
Foust
Sent: Thursday, February 17, 2005 10:05 AM
To: Access Developers discussion and problem solving
Subject: RE: [AccessD] Only a "Superstar" Access Developer Can Solve
ThisProblem

Since the order of records in a query is not fixed, a "running total"
would involve a sum of values where the unique key was less than or
equal to the value of the unique key for the current record.  In your
example, you don't show a unique key, unless that's what the Field_A
items are supposed to be, so it wouldn't work.

Charlotte Foust


-----Original Message-----
From: Lawhon, Alan C Contractor/Morgan Research
[mailto:alan.lawhon at us.army.mil]
Sent: Thursday, February 17, 2005 7:41 AM
To: accessd at databaseadvisors.com
Subject: [AccessD] Only a "Superstar" Access Developer Can Solve
ThisProblem


At the risk of showing my [Access] incompetence, I'm going to give you
folks an "opportunity to excel" (pun intended) by showing me a creative
solution to this "simple" query problem.



I'm rooting around in the Access 2003 "Help" files (as well as one of
Susan's Access books) and I discover the term calculated field.  A
"calculated field" is defined as: "A field, defined in a query, that
displays the result of an expression rather than displaying stored data.
The value is recalculated each time a value in the expression changes."
I think a "calculated field" is exactly what I want, but I'm having
trouble figuring out how to write the expression, so I'm throwing this
"simple problem" at you guys and gals.



I have a table with two fields.  One of the fields [Field A] contains
text data and the second field [Field B] contains short integers.  (The
integer value stored in [Field B] represents the number of items on hand
for the entity described in [Field A] for each record in the table.)
What I want to create is a select query which will generate a
"Running_Total" [calculated field] that performs a record-by-record
summing action like this:



         [Field A]                [Field B]       [Running Total]



   Small_Do_Hicky                20                   20

   Smaller_Do_Hicky             32                   52

   Large_Do_Hicky                69                  121

   Larger_Do_Hicky             100                  221

   Very_Large_Do_Hicky       48                  269

   Largest_Do_Hicky             31                  300



All the "Do Hickys" in Field A represent the same type of physical
object, the only difference being variations in [physical] dimensions
between the objects.  I have summarized six records (for six objects) as
an example, but there are literally hundreds (and in some cases
thousands) of records in some of these tables.  It's fairly obvious what
I'm looking for here - a query containing a "calculated field"
expression that takes the value in [Field B], adds it to the [Running
Total] value from the previous record, and prints the sum in the
[Running Total] field of the current record.  The end result is a "Grand
Total" of all the "Do_Hicky" objects (for all the records) displayed in
the [Running Total] calculated field's final record when the query
executes.



I've figured out a way to get the final total using a SQL aggregate
function, but I would like to be able to run a query that shows the
running total on a record-by-record basis from the first record all the
way to the last record.  Anyone who can solve this (simple?) Access
query problem will be declared an official Access "guru" and be blessed
by the pope.  (This "reward" ought to get Martin Reid interested ...)
:-))))



Alan C. Lawhon

















--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com
--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com
--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com


-- 
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com



More information about the AccessD mailing list