Hoping someone can provide an explanation or some illumination for the behavior exhibited in the attached sample ADB file. The ADB is comprised of one table and three forms. The main form �Companies� exhibits issues with data synchronization when records are added or deleted and issues with correctly evaluating conditions attached to actions.
The form is bound to a single table called �Companies�. Table fields are placed on the form for display purposes along with an embedded browse that is bound to the same table for purposes of navigating through the company records for purposes of viewing, editing, adding new, or deleting. Three buttons are provided. The first �Maintain Company�, invokes an Xdialog that provides a choice between editing the selected record (i.e. record that currently has focus in the browse and which fields are simultaneously displayed on the form) and adding a new company. Dependent on the choice made in the Xdialog a form called �EditCompany� is opened or a form called �AddCompany� is opened. There are also two buttons on the �Companies� form, which invoke the record deletion action, one that uses the embedded browse and the other that uses the form/parent level.
The gist of the sample is:
1) If no records currently exist in the table as evidenced by the Company ID field being empty, i.e. Id<>"", then the Xdialog should get skipped and the �Add New Company� form opened, or
2) If a record(s) already exist in the table then the Xdialog should be opened and a choice presented to select between �Edit Selected Company� and �Add New Company� after which the appropriate form is opened.
Issues:
1) With a completely empty table the �Edit Company� form is getting opened when in fact it should not (evidence of the edit company form being opened is that it generates an error message that there are no records in the query). The conditional expression attached to the open form action that calls the �Edit Company� form reads: Var->ACTION="Edit Selected Company" .and. Var->varC_result="OK". But this expression appears to be completely disregarded. To see this behavior the sample needs to be tested with a completely empty table. With a completely empty table click on the �Maintain Companies� button and you will see that the dialog box gets skipped, as intended, but the �Edit Company� form will try to open, gets closed immediately with a �No Records in Query� message box displayed, after the closing of which the �Add Company� form opens. With an empty table the edit form should not be opened at all.
2) Add a record to the table. The new record appears in the embedded browse but none of the new record details are displayed on the main form until either the embedded browse is given focus by clicking on it or another new record is added. If a second or third new reord is added without having activated the browse then the form gets refreshed to display the prior added record content and not the just added record's content. Why?
3)With records now in the table use either of the two �Delete� buttons to delete all the records. After the very last record is deleted the form and embedded browse are placed into an improperly synchronized state whereby the form continues to display field content from the last record deleted. It shouldn't show anything. The only to clear this mismatched display is to either pack the table, or to manually flip the form between view and design mode. Simply closing and reopening the form doesn�t clear the mismatch nor does a Refresh Display. Also, with all records deleted from the table by use of the dlete buttonsm punching the �Maintain Companies� button now results in the Xdialog being displayed � even though it is expressly conditioned on the expression Id<>"". Plus, with the mismatched display, if the �Edit Selected Company� choice is then picked when the Xdialog appears, a new error message box describing an incorrect argument type is generated after closing the no records in query message box.
The form is bound to a single table called �Companies�. Table fields are placed on the form for display purposes along with an embedded browse that is bound to the same table for purposes of navigating through the company records for purposes of viewing, editing, adding new, or deleting. Three buttons are provided. The first �Maintain Company�, invokes an Xdialog that provides a choice between editing the selected record (i.e. record that currently has focus in the browse and which fields are simultaneously displayed on the form) and adding a new company. Dependent on the choice made in the Xdialog a form called �EditCompany� is opened or a form called �AddCompany� is opened. There are also two buttons on the �Companies� form, which invoke the record deletion action, one that uses the embedded browse and the other that uses the form/parent level.
The gist of the sample is:
1) If no records currently exist in the table as evidenced by the Company ID field being empty, i.e. Id<>"", then the Xdialog should get skipped and the �Add New Company� form opened, or
2) If a record(s) already exist in the table then the Xdialog should be opened and a choice presented to select between �Edit Selected Company� and �Add New Company� after which the appropriate form is opened.
Issues:
1) With a completely empty table the �Edit Company� form is getting opened when in fact it should not (evidence of the edit company form being opened is that it generates an error message that there are no records in the query). The conditional expression attached to the open form action that calls the �Edit Company� form reads: Var->ACTION="Edit Selected Company" .and. Var->varC_result="OK". But this expression appears to be completely disregarded. To see this behavior the sample needs to be tested with a completely empty table. With a completely empty table click on the �Maintain Companies� button and you will see that the dialog box gets skipped, as intended, but the �Edit Company� form will try to open, gets closed immediately with a �No Records in Query� message box displayed, after the closing of which the �Add Company� form opens. With an empty table the edit form should not be opened at all.
2) Add a record to the table. The new record appears in the embedded browse but none of the new record details are displayed on the main form until either the embedded browse is given focus by clicking on it or another new record is added. If a second or third new reord is added without having activated the browse then the form gets refreshed to display the prior added record content and not the just added record's content. Why?
3)With records now in the table use either of the two �Delete� buttons to delete all the records. After the very last record is deleted the form and embedded browse are placed into an improperly synchronized state whereby the form continues to display field content from the last record deleted. It shouldn't show anything. The only to clear this mismatched display is to either pack the table, or to manually flip the form between view and design mode. Simply closing and reopening the form doesn�t clear the mismatch nor does a Refresh Display. Also, with all records deleted from the table by use of the dlete buttonsm punching the �Maintain Companies� button now results in the Xdialog being displayed � even though it is expressly conditioned on the expression Id<>"". Plus, with the mismatched display, if the �Edit Selected Company� choice is then picked when the Xdialog appears, a new error message box describing an incorrect argument type is generated after closing the no records in query message box.