Solved

Create Sequential Line numbers Query

Posted on 2014-09-23
4
1,187 Views
Last Modified: 2014-09-23
I am creating invoices on a Main Form, and Invoice Items on a SUB-FORM.
The user has the ability to add as many line items as they wish, and they have the ability to go back and delete certain lines they have created.  So for example they may have originally added 8 items in the Invoice Detail (8 records), but then went back and deleted the 3rd and 7th items.

The user clicks a button on the main form and the VBA code clears out a TEMP table, then appends this invoice data to that TEMP table (I'm using a temp table so I can get the field names exactly like I want them).   Then it creates an EXPORT CSV file from the TEMP table.

I'm exporting the data to be imported by PeachTree.... PeachTree has several mandatory fields...  one of which is a challenge.

*** Each line item must have a unique sequential number starting at "1"

If I make the field in the TEMP table an AUTONUMBER it doesn't go back to "1" until you compress the file.

Using something like the following works when the records are created on the FORM, in BEFORE UPDATE...;
                   DMax("lineNumber", "tblItemTable", "InvID = xx") +1
But they can become "un-sequential" if the user deletes lines.

Wish there were something as simple as "RECORD COUNT" or "RECORD NUMBER" that I could put in the QUERY.... but assuming there isn't based on my unproductive googling.

Thanks for any help in advance.
0
Comment
Question by:TechGuise
  • 2
4 Comments
 
LVL 31

Accepted Solution

by:
Helen_Feddema earned 500 total points
ID: 40339769
You could update the sequential number field in the table, after creating the table for export.  Start with saving 1 to the first record, then incrementing the number by 1 for each subsequent record.

Public Sub SeqNos()

   Dim rst As DAO.Recordset
   Dim lngCounter As Long
   
   lngCounter = 1
   
   Set rst = CurrentDb.OpenRecordset("tblTest")
   
   rst.MoveFirst
   
   Do While Not rst.EOF
      rst.Edit
      rst![SeqNo] = lngCounter
      lngCounter = lngCounter + 1
      rst.Update
      rst.MoveNext
   Loop
   
End Sub

Open in new window

0
 
LVL 57
ID: 40339812
Somewhat along the lines of what Helen suggested, but:

1. Declare a global long variable.
2. Before executing your query, set that variable to 0.
3. In the query, call a function that takes a field name as an argument.  Increase the count by one and return the value.

   RowCount: GetLineCounter([MyField])

 Doesn't matter which field nor will you do anything with it.  Just needs to be there so the query engine calls the function for each row.

This works best when appending records.   If tied to a form and you move back and forth through the recordset, the numbers will be goofed up.

Jim.
0
 
LVL 57
ID: 40339817
I should also add that you can do this with straight SQL assuming each row has a unique value from low to high (you can get a count of all rows prior to the one your on with a subquery), but I find the other technique far faster.

Jim.
0
 

Author Closing Comment

by:TechGuise
ID: 40339828
Just got through implementing Helen's suggestion, it worked great.

May try other method Jim when the pain of messing with this for several hours wears off.

Thank You Both!!!
0

Featured Post

Free Gift Card with Acronis Backup Purchase!

Backup any data in any location: local and remote systems, physical and virtual servers, private and public clouds, Macs and PCs, tablets and mobile devices, & more! For limited time only, buy any Acronis backup products and get a FREE Amazon/Best Buy gift card worth up to $200!

Join & Write a Comment

Suggested Solutions

Overview: This article:       (a) explains one principle method to cross-reference invoice items in Quickbooks®       (b) explores the reasons one might need to cross-reference invoice items       (c) provides a sample process for creating a M…
Lync meeting or Lync conferencing is what many organizations would like to deploy to allow them save money. But companies are now giving up for various reasons, one of which is that they cannot join external meetings (non-federated company meetings)…
With Microsoft Access, learn how to specify relationships between tables and set various options on the relationship. Add the tables: Create the relationship: Decide if you’re going to set referential integrity: Decide if you want cascade upda…
The view will learn how to download and install SIMTOOLS and FORMLIST into Excel, how to use SIMTOOLS to generate a Monte Carlo simulation of 30 sales calls, and how to calculate the conditional probability based on the results of the Monte Carlo …

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now