× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Good, that how I do it.

Marvin


-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of
goodwink@xxxxxxxxxxxxxx
Sent: Tuesday, August 09, 2005 2:13 PM
To: RPG programming on the AS400 / iSeries
Subject: RE: Subfile Processing

Sorry, I wasn't clear:  I'm not looping through all the records, I'm
looping until READC yields an %EOF response.

Kyle Goodwin
Extensicom LLC

> First, don't loop through the whole file.  If the users are modifying
> the records, then READC will be the fastest way to get the modified
> record.  And don't forget that if there is an error, use the return
> record on next read flag.  Saves a lot of headaches.
>
> Marvin
>
>
> -----Original Message-----
> From: rpg400-l-bounces@xxxxxxxxxxxx
> [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of
> goodwink@xxxxxxxxxxxxxx
> Sent: Tuesday, August 09, 2005 12:59 PM
> To: RPG programming on the AS400 / iSeries
> Subject: Re: Subfile Processing
>
> When the user edits one of the displayed subfile records and hits
enter
> I
> attempt to save it back to the correct file using a DOW to loop
through
> each record returned from the subfile using READC(E) until I get an
> %EOF.
> In this loop I use a KLIST to search using SETLL(E) on the physical
file
> to find the corresponding entry to the subfile entry I'm working on.
If
> I
> get an %EQUAL result then I know it's an update to an existing record
in
> the physical file so I use UPDATE(E) to write it out.  Otherwise I use
> WRITE(E) to write the new record.
>
> This all works fine for the case of adding a new record, but when I go
> to
> update an existing one the changes don't make it back to the physical
> file.  Any ideas?
>
> Thanks,
>
> Kyle Goodwin
> Extensicom LLC
>
>> Thank you, that was very helpful.  I'd read all these things
>> individually one place or another, but putting them all together in
> one
>> spot it finally clicked.
>>
>> Kyle Goodwin
>> Extensicom LLC
>>
>> Jonathan Mason wrote:
>>
>>>Hi Kyle
>>>
>>>This is more a question about general programming than subfile design
>>>and programming, but here goes.
>>>
>>>A subfile is simply a means of storing and presenting related rows of
>>>information on a display.  They are similar to database files in that
>>>they store multiple records, but they differ in that the records are
>>>stored in the jobs workspace rather than on disk.  They also differ
in
>>>that they are not keyed, but can be accessed using relative record
>>>numbers (RRN) or sequentially.
>>>
>>>Correct database design has the tables normalised, in other words
> broken
>>>down into their common form.  For example, splitting an invoice into
> an
>>>invoice header file (INVOICES) and invoice lines file (LINEITEMS).
> This
>>>you have done with your tables.
>>>
>>>The INVOICES file would normally have a key relating to the invoice
>>>number (INVOICEID) and the LINEITEMS would have a composite key
>>>consisting of the INVOICEID and the invoice line number
(INVOICELINE).
>>>
>>>When you load the records to your subfile you should use the
INVOICEID
>>>to position the file cursor to the first invoice line for the invoice
>>>using the INVOICEID on a SETLL command and then loop through the file
>>>using the INVOICEID as the key:
>>>
>>>* Position to the start of the file...
>>>C                   Eval      RRN = *Zeros
>>>C     InvoiceID     Setll(e)  LineItems
>>>
>>> * Read through the file until all invoice lines loaded...
>>>C                   Dow       Not %Eof
>>>C     InvoiceID     ReadE(e)  LineItems
>>>
>>> * Populate the subfile record...
>>>C                   Eval      SflFld1 = FileFld1
>>>C                   Eval      SflFld2 = FileFld2
>>>C                   Eval      SflFld3 = FileFld3
>>>
>>> * Write the details to the subfile...
>>>C                   Eval      RRN = RRN + 1
>>>C                   Write     Sfl
>>>C                   EndDo
>>>
>>>There are a number of techniques for loading subfiles, the above
loads
>>>all records at once which you wouldn't normally use where large
> amounts
>>>of data are expected - it's only shown here as an example.
>>>
>>>The RRN is the position of the record in the subfile, so the first
>>>record written is RRN 1, the second RRN 2, etc.  If you know how many
>>>records are in the subfile you can read the whole subfile using a
> loop:
>>>
>>>C                   For       I = 1 to RRN
>>>C     RRN           Chain(e)  LineItems
>>>C                   If        %Found
>>>C                   ...
>>>C                   EndIf
>>>C                   EndFor
>>>
>>>A good guide to subfile programming is "The AS/400 Programmers
> Handbook"
>>>which has a large section on subfile programming.  Alternatively you
>>>could check out the FAQ and the archives on this list.
>>>
>>>All the best
>>>
>>>Jonathan
>>>
>>>
>>>
>>>
>>>
>>>
>>
>> --
>> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
> list
>> To post a message email: RPG400-L@xxxxxxxxxxxx
>> To subscribe, unsubscribe, or change list options,
>> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
>> or email: RPG400-L-request@xxxxxxxxxxxx
>> Before posting, please take a moment to review the archives
>> at http://archive.midrange.com/rpg400-l.
>>
>>
>
>
> --
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
> list
> To post a message email: RPG400-L@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.
>
>
>
> --
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
list
> To post a message email: RPG400-L@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.
>
>



As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.