'm having trouble with what should be a very simple bit of
scripting in Visual Basic....The client, wanted a simple database with automated forms to track survey results. Unfortunately, the survey exists in two forms - long, and
short. The client wants a student to be able to page through the records and have the form automatically change to represent the survey type. Naturally, we must keep the current record focused when changing forms. That's easy, the tricky stuff happens when inserting a new record.
my problem is that this database is intended to collect survey results from two different surveys, (a long and a short form). The client eventually wishes to be able to analiyse results from both query types together, or each type separately, which is why they have to be tracked in the same database.
The simplest solution would have been to create one form to add and edit records, with a tab control that would expose the long-form questions, (all of the fields on the short form survey are common to the long-form survey), but unfortunatley, the questions do not appear in the same order on both surveys, and the client wanted the input forms to look as much as possible like the original survey.
I had hoped to get around this with an onCurrent event that checks the form length field and, if necessary, opens the current record in the other form. a similar script would be bound to the afterUpdate handler on the form length control.
This works pretty well until you encounter a new record, and my experimenting with the addNew and moveLast commands have failed miserably. The only documentation I can find in the help files shows examples using recordsets and the bookmark object from Access97, (northwind.mdb), and they don't seem to work at all in Access2000.
sample code as follows:
<!-- VB code follows -->
Option Compare Database
Private Sub Form_Current()
Dim frm As Form
Set frm = Forms.shortFormSurvey
Dim varCurrentRecord As Long
If (Me!formType = "long" Then
DoCmd.OpenForm "longFormSurvey", acNormal, , , acFormEdit,
acWindowNormal
If frm.NewRecord = False Then
varCurrentRecord = frm.CurrentRecord
DoCmd.GoToRecord acDataForm, "longFormSurvey", acGoTo, varCurrentRecord
Else:
DoCmd.GoToRecord acDataForm, "longFormSurvey", acLast
Rem even if the previous line was executed properly, it's not what I want - I want to focus a
Rem new record but acNewRecord fails to work at all
End If
End If
End Sub
Private Sub Form_LostFocus()
DoCmd.Close acForm, "shortFormSurvey"
End Sub
Private Sub formType_AfterUpdate()
Dim Form As Form
Set frm = Forms.shortFormSurvey
Dim varCurrentRecord As Long
If (Me!formType = "long" Then
DoCmd.OpenForm "longFormSurvey", acNormal, , , acFormEdit,
acWindowNormal
If frm.NewRecord = False Then
varCurrentRecord = frm.CurrentRecord
DoCmd.GoToRecord acDataForm, "longFormSurvey", acGoTo, varCurrentRecord
Else:
DoCmd.GoToRecord acDataForm, "longFormSurvey", acLast
End If
End If
End Sub
can anyone lend a hand?
thanks!
scripting in Visual Basic....The client, wanted a simple database with automated forms to track survey results. Unfortunately, the survey exists in two forms - long, and
short. The client wants a student to be able to page through the records and have the form automatically change to represent the survey type. Naturally, we must keep the current record focused when changing forms. That's easy, the tricky stuff happens when inserting a new record.
my problem is that this database is intended to collect survey results from two different surveys, (a long and a short form). The client eventually wishes to be able to analiyse results from both query types together, or each type separately, which is why they have to be tracked in the same database.
The simplest solution would have been to create one form to add and edit records, with a tab control that would expose the long-form questions, (all of the fields on the short form survey are common to the long-form survey), but unfortunatley, the questions do not appear in the same order on both surveys, and the client wanted the input forms to look as much as possible like the original survey.
I had hoped to get around this with an onCurrent event that checks the form length field and, if necessary, opens the current record in the other form. a similar script would be bound to the afterUpdate handler on the form length control.
This works pretty well until you encounter a new record, and my experimenting with the addNew and moveLast commands have failed miserably. The only documentation I can find in the help files shows examples using recordsets and the bookmark object from Access97, (northwind.mdb), and they don't seem to work at all in Access2000.
sample code as follows:
<!-- VB code follows -->
Option Compare Database
Private Sub Form_Current()
Dim frm As Form
Set frm = Forms.shortFormSurvey
Dim varCurrentRecord As Long
If (Me!formType = "long" Then
DoCmd.OpenForm "longFormSurvey", acNormal, , , acFormEdit,
acWindowNormal
If frm.NewRecord = False Then
varCurrentRecord = frm.CurrentRecord
DoCmd.GoToRecord acDataForm, "longFormSurvey", acGoTo, varCurrentRecord
Else:
DoCmd.GoToRecord acDataForm, "longFormSurvey", acLast
Rem even if the previous line was executed properly, it's not what I want - I want to focus a
Rem new record but acNewRecord fails to work at all
End If
End If
End Sub
Private Sub Form_LostFocus()
DoCmd.Close acForm, "shortFormSurvey"
End Sub
Private Sub formType_AfterUpdate()
Dim Form As Form
Set frm = Forms.shortFormSurvey
Dim varCurrentRecord As Long
If (Me!formType = "long" Then
DoCmd.OpenForm "longFormSurvey", acNormal, , , acFormEdit,
acWindowNormal
If frm.NewRecord = False Then
varCurrentRecord = frm.CurrentRecord
DoCmd.GoToRecord acDataForm, "longFormSurvey", acGoTo, varCurrentRecord
Else:
DoCmd.GoToRecord acDataForm, "longFormSurvey", acLast
End If
End If
End Sub
can anyone lend a hand?
thanks!