Reputation: 3001
TL;DR
I'm trying to perform some calculations on the values entered to a data entry form before saving them into a table.
Background
I have a form in MS Access that serves as a front end for entering data into our database. It is mostly distance data between a datum and various objects. The database and the applications that use that data have all been set up expecting all the measurements in feet, but a lot of our sources for the data are in meters. In the past, the user had to convert the data on their own before inputting it into the form. This extra step slows down productivity, and increases the chance of user error.
What I want to do is add a radial button to my form that lets the user swap between meters and feet. When it is swapped to meters, all the values for that record are converted to their meter equivalent before being displayed on the screen. If the user changes a record or creates a new one, the form will need to convert the values back into feet before updating the table. It's very important that the values in the table always remain in feet.
I was able to find this article that describes how to swap between record sources for a form. I think I can just set up 2 queries - one that pulls the data directly from the table, and one that performs the conversion - and swap between the queries as my record source when the user toggles the radial button.
The Problem
The issue with this set up is that since I have to use aliases in my queries to perform the conversion, the user cannot enter data while the radial is toggled to meters. If I try to update one of those fields, I just get a bing noise and the input is ignored. Is there any way to allow inputs when the radial is toggled to meters? As I said above, it is important that the data in the table is always in feet, so if the user has the 'meters' option selected and inputs a value like 500
, the value entered into the table should be 1640
, which is the result from the conversion to feet.
Sample
Here's simplified example of what my queries look like
FEET query
SELECT A,B,C AS LEN,D,E
FROM TABLE1
METERS query
SELECT A,B,C/0.3048 AS LEN,D,E
FROM TABLE1
Upvotes: 0
Views: 136
Reputation: 55941
Use this query only:
SELECT A,B,C AS LEN,D,E
FROM TABLE1
On your form, hide the textbox bound to LEN.
Create a new unbound textbox, say, txtLEN.
Now use code like this where SelectMetric is the checkbox to mark when using metric values:
Private Sub Form_Current()
Dim Factor As Currency
If Me!SelectMetric.Value = True Then
Factor = 0.3048
Else
Factor = 1
End If
Me!txtLen.Value = Factor * Me!LEN.Value
End Sub
Private Sub txtLen_AfterUpdate()
Dim Factor As Currency
If Me!SelectMetric.Value = True Then
Factor = 0.3048
Else
Factor = 1
End If
Me!Len.Value = Me!txtLEN.Value / Factor
End Sub
Upvotes: 2
Reputation: 12253
Just change what is displayed in the textbox. Set up the text box to have a control source of
=Length*txtConversionFactor
Where txtConversionFactor
is a hidden textbox which either has 1
in it if your units are to be displayed in feet or 0.3048 if they are to be displayed in meters. It could even be a combobox bound to a table like this
MultiplyFeetByToGetOutputUnits OutputUnits
1 ft
0.3048 m
12 in
0.000189394 mile
Then you can convert to whatever you want without changing your form.
Upvotes: 0