I want to put an average of my query's column into a text box. The intent is to find the average of the marks a student has and put it into a text box in the form. The code I've put in the Control Source field so far looks like this:
= Avg(SELECT Marks.Mark
FROM Marks
WHERE ([IdS]=[Marks].[IdS]))
Where [IdS] is a text box with student ID of the selected student in this form. When I go back to the form view the text box gives me #Error.
Any idea?
You are using a SQL statement for a control record source, or you need to use the query as the underlying form source or use a domain aggregate to get the desired result=DAvg("[Marks]![Mark]","Marks"," [Marks]![ID] = [IdS] "). (Don't forget to set a form requery when changing the [IdS] value)
Related
I currently have these options set in a combo box:
This box will show the projectIDs that a current company has which is set with the criteria. I just want to show the name of the project as people will not know just by the id. If I remove the check box for the projectID it will just remove that field completly and not show anything. I have debugged what companyBox.Value is and it is indeed a number for a company and if taken this id and replaced it with the following query which is built from the picture and it returns the results I want. I just cant get the values to show in the combo box.
SELECT projects.projectName
FROM companys INNER JOIN projects ON companys.companyID = projects.companyID
WHERE (((companys.companyID)=7));
Gives me all the projectNames where the companyID is 7
And as seen below that same query just gives me blank spaces instead of the names:
Ok, if you have say a query, then as noted, then you can use a "join" to pull in the other table (based on that "projectID").
So, for a general report etc., then your approach of using the query you have is correct.
HOWEVER!!!
For a combo box? They have this feature and ability built in. In other words you do NOT in general need a join.
The combo box has two parts:
A sql query that "drives" or "fills" the combo box. This can (and will be) of course based on the Projects table.
VERY important:
Our combo box is to save, store, put, use the project ID into a column in our CURRENT form. That form of course is based on a differnt table (the forms current table). So, keep in mind the two concpets:
Combo box can be driven by any table to display data.
Combo box will/can use a column from that "other" table to SAVE into a current column on the current form.
Now of course the Project "id" is the VALUE we want, but we sure as don't want to display that "project id" value, since as you note, humans want the nice looking text.
First Rule:
ALWAYS, but ALWAYS make sure the FIRST column of the combo box "sql query" is the column we WANT to save into the current form, but ALSO the column we are going to HIDE AND NOT show to the user.
So, a combo box can with great ease HIDE the first column. You can hide other columns, but as a general rule a VERY HIGH number of my combo boxs will have two columns. So, you might need company "id", but would want to display company name as nice text to the user, but store/save/use the "id" of company for this purpose.
So, in your case? Change the order of your columns.
You want:
ProjectID, ProjectName, and you ALSO can continue to have a filter based on company.
So, once you get above setup, and you WILL NOT need a sql join. Remember, the combo box has it own "whole sql statement" based on table projects.
So, the combo box will:
Save/store/use the ProjectID when you select a project.
And it will display the project name, but behind the scenes it will use + save ProjectID.
So, just make sure that you set the length of the first column in the combo box to 0 (to hide that projectID from display).
Next, make sure you set WHICH column value from the query the combo box is to save.
That column will be the FIRST column, so you want to set that to 1
Your combo settings will look something like this:
In above, the CONTROL source is your CURRENT form and table.
So, I want to get a Hotel "ID" from the table hotels, but I am going to save the results of the combo box selection INTO a column called Hotel_ID
And note VERY careful - I set the bound column = 1 (that is the FIRST value from the query that drives the combo box.
Next up:
We want to hide the first column value, so you need this setting in format tab of the property sheet for the combo box:
NOTE VERY close in above. I set the FIRST column width = 0. this is HOW you hide the "ID" of hotels - I only want the user to see the nice hotel name. (or in your case Project name).
But, the 2nd column, I have a width for the Hotel name (or in your case project name).
So, make your first column in the query for the combo box the "id" of project id. Set the width of the first column = 0.
So, the query that drives the combo box? It is based on the ONE table, but you need to ensure that the "id" that you going to use is the first column, and simple hide it from display.
So, a combo box has a sql query that drives the combo box, and that query in most cases will NOT be the current table.
So, you have to set BOTH settings (the column the combo sql query will use - but to avoid confusing, then just adopt the habit of making the 1st column the "id" or value you want from that sql.
But, after setting above, you STILL have to set what column to shove/put that column into on the current form. (that setting is the control source).
In effect, a combo box is a kind of look-up into the other table, and it can display nice user friendly text columns, but still use + store the ID.
So, your query should look more like this:
SELECT ID, projectName
FROM projects
WHERE (((companys.companyID)=7));
I don't know if your first column of Projects table is "ID" (or is it ProjectID), but as you can see, the combo box ONLY needs to be based on the one table, and with our new rule - we always use the first column of the query the "id" value we want.
Now, of course the above is "hard coded" for company, and your original query that drives the combo box was fine - just that the order of the columns display was incorrect.
I have a ComboBox that has columns: Name, Nickname, and Code in it. Currently, it is set up to search based on Name as the user types in the ComboBox when the user would prefer to type the Code instead. Is there a way to set it up so the ComboBox displays like it is originally set up while allowing the user to search using the Code column? I know that I can easily put the Code column in front of the Name column, but the user would like to keep the format the same.
Simple answer: No. A combo box control will always search (autocomplete) the displayed value, which will be the first row source column with a non-zero width. The only way to achieve what you want would be to have two controls. You could have a combo box with Code as the first column followed by Name and Nickname, and then have a locked text box with Control Source set to =myCombo.Column(1)
I am trying to make a filed in my form become invisible if it's value is empty.
What I have is a form with individual records from a table, this has a sub-form which is linked by an ID, and it displays the results of a query.
This has three fields ones is the ID, a number and third is a date, Not all records have a date and therefore for the ones that do not have one I want to completely hide the date label and the empty text box; and make it appear only when a date is specified.
I'm guessing I might have to use some kind of WHILE statement in my query but I'm not sure whether that's right and how to do it.
I would appreciate your advice on this.
Thanks
You can add this code to the subform current event:
If (datafieldname & "") = "" then
datafieldname.visible=false
else
datafieldname.visible=true
End if
Where datafieldname is the name of the data field on the subform. This will only work if your subform layout is not tableview
Is it possible to use an IIf statement in the control source of a combo box? I have a combo box that I want to pull a series of names from the associated table if their position is like "Ops". Here is what I have tried in the control source for the combo box.
=IIf(Roster!Position Like "Ops*",Roster!Last,"")
I am fairly sure it is possible, what am I doing wrong?
Mods based on feedback from HansUp
SQL for query
SELECT Roster.Last
FROM Roster
WHERE (((Roster.Position) Like "Ops*"))
GROUP BY Roster.Last;
Combo Box: Supervisor
Control Source
=Supervisor!Last
Still returns no data.
I have a combo box that I want to pull a series of names from the associated table if their position is like "Ops".
Use a query as the combo's Row Source.
SELECT [Last], [another field ?]
FROM Roster
WHERE Position Like "Ops*";
Then the combo's Control Source can be a query field.
I have created a query to calculate the sum of all of the profit values in a table, I tried to output this to a textbox on the main form of my database and I just the error #NAME?.
Has anyone tried this before and are there any major things I am missing?
We would need to see some code/design details to understand why your text box gets that #Name error.
Without those details, I'll just suggest you consider a DSum() expression, instead of a query, to load the text box. And DSum() is kind of like a SELECT query, but returns only a single value instead of a result set.
DSum("YourNumericField", "YourTable")
Examine the DSum online help topic for more details. You might find the optional Criteria parameter useful (like a WHERE clause in a SELECT statement) if you ever want to sum only a subset of rows from your table.
DSum("YourNumericField", "YourTable", "account_status = 'ACTIVE'")
If you have create query to calculate the sum called "querySum". On the form property sheet, make sure selection type you change to FORM, go to Data and select "querySum" as record source.
And then, click text box, go to the property sheet and choice Data > Control Source. So you can choice column from query to the text box.
Otherwise, if you want to use VBA. You can do like this
DSum("NumericField", "YourTable")
Or with condition
DSum("NumericField", "YourTable", "type = 'Payment'")