Only add if not null - ms-access

I'm trying to set a text box in a form to display the total of a range of other text boxes. If there are no values, I want the box empty, but any value needs to display, even if only one of the contributing sources has a value.
Lets say there are three contributing boxes: txtScore1, txtScore2 and txtScore3, and the sum box txtTotal. Before data appears in any of the score boxes, they contain a null value. So I've tried setting txtTotal's control source to:
=Iif(Not IsNull([txtScore1]),[txtScore1])+
Iif(Not IsNull([txtScore2]),[txtScore2])+
Iif(Not IsNull([txtScore3]),[txtScore3])
But this only gives a value if all three have values, as anything + Null = Null. If I add a FalsePart of 0 to them, the value in txtTotal is always 0, even if all three are empty. Do I have to add a Iif(IsNull([txtScore1]) and IsNull([txtScore2]) and IsNull([txtScore3]),null,... before this whole thing, or is there a better way?

The NZ function can handle this situation, assuming you can use it:
=Iif(IsNull([txtScore1]) AND IsNull([txtScore2]) AND IsNull([txtScore3]),
NULL,
Nz([txtScore1], 0) + Nz([txtScore2], 0) + Nz([txtScore3], 0))
Nz is the Access version of the standard COALESCE function, which uses the second parameter as a value should the first parameter be NULL. Check the Tech On The Net page for some examples of how to use it.

Related

SSRS - How to indent rows in a table with a given content

In SSRS I want to indent certain rows when they start with e.g. 'aa'. See this example:
What is the best practice in this case? As I don't have a parent-child situation here (to use recursive hierarchy group), do I have an option e.g. via the properties to set something like an IIf to solve this? If yes, could you please provide some information where to set this?
Every info is welcome! I'm new to SSRS.
This is simple to do...
Click on the cell that you want to indent.
In the properties panel, expand the Indent properties and then click the drop-down in the Left Indent property and choose Expression.
Then set the expressions to something like
=SWITCH (
LEFT(Fields!FieldIwantToCheck.Value, 2) = "aa", "10pt",
LEFT(Fields!FieldIwantToCheck.Value, 2) = "bb", "30pt",
True, "0pt"
)
You could do this with an IIF expression but if you need to make it more flexible than 1 or two cases then SWITCH is much easier to read/manage.
All we are doing here is checking the left 2 characteras of the FieldIwantToCheck field and setting an indent value respectivley. If none of the criteria match, the final True, Nothing acts like an ELSE and leaves the property as the default Nothing value.

Autofilling my form in Access with the use of a Combo Box

I'm having a problem when I want to autofill my form in Microsoft Access. The idea is that I use a combo box to select a name. Then the onChange code of my Combobox automaticlly inserts all the other data in the proper field. I use this code on the Combo Box.
Private Sub cmbName_Change()
Me.tbPersonalNumber = Me.cmbName.Column(0)
Me.tbEmailadress = Me.cmbName.Column(2)
Me.tbBirthday = Me.cmbName.Column(3)
End Sub
This methode works fine for the personalnumber and the emailadress. But it doesn't work for the birthday date, it returns a null value but when I check my table there is is a date in the proper field.
Am I missing something? I tried everything but it wont work.
I was thinking that the problem is related to the birthday column being the last in the table. Or having the date type.
Thank you in advance for your time and efford!
Edit; The .Column(1) is missing because this is the name that is already inserted with the ComboBox.
There is some confusion caused by the wording of the question, I'll try to state back how I've interpreted and if I have it right it may lead you to an answer.
You have combo box called cmdName that is pre-populated with data from a table. The content of the combo box could look as below (you may have set column widths to zero to hide the data)
0001|Gary Evans|gary#email.com|01/Jan/1970
0002|J Rommers |JR#email.com |02/Jan/1970
When the user selects J Rommers Me.tbPersonalNumber is populated with Me.cmbName.Column(0) (0002) and Me.tbEmailadress is populated with Me.cmbName.Column(2) (JR#email.com) but Me.tbBirthday is not being populated with Me.cmbName.Column(3) (02/Jan/1970).
Assuming Me.tbBirthday is a text box with no code that might clear it out, I suspect the issue is within the combo box. Not being sure how your combo box is set up, I would suggets the following checks:-
In the combo box properties, does the Column Count equal 4?
In debug, with a breakpoint on Me.tbBirthday = Me.cmbName.Column(3), does it show you the date you are after?
If it is not there does the query that populates the combo box have it in?
Edit based on comments to help further: -
Change the query to SELECT Personel.PersonalNumber, Personel.Emailadress, Personel.Birthday, Personel.Name FROM Personel ORDER BY Personel.Name; this puts all the fields you want hidden at the front.
Change the column widths property of cmbName to 0,0,0, this first the ones you want hidden and leave the last one to fill the width of the combo box.
Ensure the column count property is still 4 as per the answer
Change your code as per below and Gustav's answer
Replacement code:-
Me.tbPersonalNumber = Me.cmbName.Column(0)
Me.tbEmailadress = Me.cmbName.Column(1)
Me.tbBirthday = DateValue(Me.cmbName.Column(2))
This accounts for the fields moving in the query and ensure the date shows as a date like you wanted.
Comboboxes (and Listboxes) always return a string, so convert that to a Date value:
Me!tbBirthday.Value = DateValue(Me!cmbName.Column(3))

SSRS 2008 Format a cell to blank if value is 0 or null or anything other than a number

I have a cell expression in which Im trying to force it to simply display an empty cell if the underlying value is something other than a number, is zero or null etc. There is no formatting in the textbox properties.
Surely there is something simpler
What I have now
=IIF(IsDBNull(ReportItems!YE_Goal2.Value) OR
ReportItems!YE_Goal2.Value = 0 OR ReportItems!YE_Goal2.Value Is Nothing,
"",ReportItems!Projected2.Value/ReportItems!YE_Goal2.Value)
When there is no value, it displays a 0 instead of being blank.
Try this:
=IIf(
Not IsNumeric(ReportItems!YE_Goal2.Value) or
IsNothing(ReportItems!YE_Goal2.Value) or
ReportItems!YE_Goal2.Value=0, "",ReportItems!Projected2.Value/
iif(ReportItems!YE_Goal2.Value=0,1,ReportItems!YE_Goal2.Value)
)
Note you have to validate two times ReportItems!YE_Goal2.Value=0, First time for control flow, the second time in order to avoid validator throw erros for division by zero.

ssrs 2008 R2 show/hide not working on expression

I have this problem, which I have already googled,searched on stack overflow and tried every possible solution that I could found on the internet.
I have a table like this:
When the table is initally loaded the value are not visible and have to be toggled by Filter
After I click on the value, the dataset is filtered, and the Filter group will contain only 1 Value (the one that was selected) after the report reloads.
With an expression I made the left side look orange like the following, if only 1 value in a group exists :
Now I would like to also show the value on the right, but it does not work with all expressions i tried on text box level and/or group level :
=IIF(Fields!filter.BackgroundColor = "Orange" ,false,true)
=IIF(Fields!filter.BackgroundColor <> "Orange" ,true,false)
Can someone help Please ?
After days of trying in different ways, the only working solution was to add an extra column to my dataset called "hidden". If a filter value is the only value counted (grouped by filter) then put a 0 in the hidden field ,else 1 which results in something like :
Filter Value Hidden
A B 1
A C 1
B A 0
After that, on the text field Hidden Value i used expression
=CBool(Fields!hidden.value)
This Worked Great!

Highlighting a row once a parameter has been selected in SSRS

I have a report that has 3 parameters: RaceDate, RaceCourse, SilksColours. The SilksColours parameter is optional.
If the SilksColours parameter is selected I want to highlight the row in my report with the colour yellow, while all the other rows stay white.
Is this possible?
For each TextBox in the row you want to highlight, you need need to set the Background Color property to be expression-based and compare the parameter value to value in the row, something like:
=IIf(Fields!Colour.Value = Parameters!SilksColours.Value, "Yellow", "White")
Edit after comments:
OK, as you've noted there are two questions here.
Parameter with default
You have a requirement to have a multi-value parameter with the ability to specify no value in particular. You can't set up a multi-value to accept NULL values, so you need to add a catch all value to the DataSet. So base the parameter on values similar to the following:
Set a parameter up to use this DataSet and set the Default Value to None:
Now we have a parameter with a default, which will not highlight any rows, so users can just ignore if they want or choose values as required.
There is one minor annoyance here - the user can select None and other values as well, they aren't mutually exclusive, but it should be good enough.
Highlighting rows
Next step is to set the Background Color values for all required TextBoxes. Since multiple colours can be selected, we need to treat multi-value parameters differently from single ones, something like:
=IIf(InStr(Join(Parameters!Colour.Value, ","), Fields!Colour.Value) > 0
, "Yellow"
, "White")
So what we need to do is use the JOIN function to create a string list of selected values, then check if the row value is anywhere in that list. Put it all together to get the following:
The report will load straight away as the parameter has a default value, with no rows highlighted:
Choose one colour and the row is highlighted:
Choose multiple colours to highlight multiple rows:
Hopefully all this is what you're after!