Cannot set default value of a field in an Access Table - sql

I am trying to set a default value of a field in an access table in Table Design. The test I entered is:
=DLookUp([Tbl::VII::A::03::b_stkIden].[stkTersNam]","[Tbl::VII::A::03::b_stkIden]","[stkIdx]= [stkIdenOld]") where
In the different attempts the text was typed (did not work), copied and pasted (did not work). Keeps saying Default value or Validation rule is invalid.
stkIden is the source table containing the value I need
stkTersNam is the field which contains the value I need
stkIdx is the index field of my target table in which I want to insert the lookup value
stkIdenOld is the index field in the source table …stkIden.
It seems that default value attribute of tables in Access 2019 no longer accepts any references to any Table in the current database. It seems strange the Ms would remove this essential functionality. Is this just a quirk of the Jet Engine.
Please help. I am desperate. Should I consider abandoning Access for some other more user friendly database.

Should not have 'where' at end of expression. Don't put parameter within quote marks - concatenate dynamic parameter. Missing quote mark for the field argument.
=DLookUp("[stkTersNam]", "[Tbl::VII::A::03::b_stkIden]", "[stkIdx]=" & [stkIdenOld])
If stkIdx is a text field, use apostrophe delimiters.
=DLookUp("[stkTersNam]", "[Tbl::VII::A::03::b_stkIden]", "[stkIdx]='" & [stkIdenOld] & "'")
However, this won't work as a DefaultValue (won't in any version of Access) and really makes no sense to pull related info via DefaultValue property anyhow. Options:
Query joining tables.
Multi-column combobox on form.
DLookup in textbox ControlSource.

Related

Fields on form, selected from data source are not available when using Me

I have two fields on a form. Field 1 is auto number field named 5sID. Field 2 is a lookup field named 5sType.
When I open the VBA code for both the oncurrent and on open, I try to reference either field with a "Me.5sID" or "Me.5sType". In either case when I type in the "Me." the auto list shows the other eight fields in the table, but not these two.
I have used this for years on both datasheets or continuous forms. There are only the two fields on the form and they were selected from the table field list in the design view.
If I change the name on the Other tab of the property options, the fields then appear.
I have now rebuilt the table and the form, I have created a database and linked to the same table and still get the same results.
If I add another short text field it shows up when I type "Me." in VBA, but any other type of field does not show up.
Naming an identifier with a number as first character is a bad idea! Always start with a letter!
On Access 2013 that creates a compile error as the compiler expects a=as he interprets.5as a decimal-number.
That worked for you on older versions? Hard to believe!
As workaround use square-brackets like on identifiers containing spaces or other crap.
Me.[5sID]
or turn onShow hidden Elementsin Object-Browser , what fixes Inteli-Sense and creates automatic brackets. Seems like this is a way to create hidden members ;)

Matching VBN Textbox Text with Autonumber With Custom Format in Access

I have an access database where "Orders" is my table with the column name CusID and is set to Autonumber with format "CUS"0001
I'm trying to read an autonumber with the custom format "CUS0001" from VBN but I can't seem to read it.
I've tried to read it all as a string, but I can't seem to read it.
cmdCustomer.CommandText = "Select * From Orders Where CusID = " & (txtCusID.Text) & ";"
Any help would be greatly appreciated! Thank you :)
As the name suggests, AutoNumber values are numbers. "CUS0001" is clearly not a number so clearly cannot be stored in that column. When you specify a format in Access, that relates ONLY to how the Access application displays that data. It says nothing about how the data is stored. If Access displays a value in that column as "CUS0001" then the column actually contains the number 1 and that is all that your VB app will see, so that's how you have to query it. Also, if you want the value displayed as "CUS0001" in your app then YOU are going to have to format it that way.
It's also worth noting that, if you really did want to search for "CUS0001" then you'd have to wrap that value in single quotes in your SQL code or else you're going to get a syntax error. That said, it shouldn't matter because you should be using a parameter to insert that value into your SQL code.

Remove a string inside a cell in MS Access

I want to delete a certain string in a cell in MS Access, whether in a column or in the whole table. I know that I can do this using plain old Find and Replace but in this case it is not economical for my thousand-row table.
For example,
remove all Unknown values from all columns.
remove the string "dollars" from the values in column price ie. if the cell contains "34 dollars", it will just be "34".
Can this be done in SQL and how?
Assuming your query will run within an Access session, the second goal is easy. You can Replace dollars with a zero-length string.
UPDATE YourTable
SET price = Replace(price, 'dollars', '');
You could use the same strategy for the first goal, but may decide it makes more sense to examine the datatypes of the table's fields and only UPDATE those which are text or memo.

Access 2010 Database Clenup

I have problems with my records within my database, so I have a template with about 260,000 records and for each record they have 3 identification columns to determine what time period the record is from and location: one for year, one for month, and one for region. Then the information for identifying the specific item is TagName, and Description. The Problem I am having is when someone entered data into this database they entered different description for the same device, I know this because the tag name is the same. Can I write code that will go through the data base find the items with the same tag name and use one of the descriptions to replace the ones that are different to have a more uniform database. Also some devices do not have tag names so we would want to avoid the "" Case.
Also moving forward into the future I have added more columns to the database to allow for more information to be retrieved, is there a way that I can back fill the data to older records once I know that they have the same tag name and Description once the database is cleaned up? Thanks in advance for the information it is much appreciated.
I assume that this will have to be done with VBA of some sort to modify records by looking for the first record with that description and using a variable to assign that description to all the other items with the same tag name? I just am not sure of the correct VBA syntax to go about this. I assume a similar method would be used for the backfilling process?
Your question is rather broad and multifaceted, so I'll answer key parts in steps:
The Problem I am having is when someone entered data into this
database they entered different description for the same device, I
know this because the tag name is the same.
While you could fix up those inconsistencies easily enough with a bit of SQL code, it would be better to avoid those inconsistencies being possible in the first place:
Create a new table, let's call it 'Tags', with TagName and TagDescription fields, and with TagName set as the primary key. Ensure both fields have their Required setting to True and Allow Zero Length to False.
Populate this new table with all possible tags - you can do this with a one-off 'append query' in Access jargon (INSERT INTO statement in SQL).
Delete the tag description column from the main table.
Go into the Relationships view and add a one-to-many relation between the two tables, linking the TagName field in the main table to the TagName field in the Tags table.
As required, create a query that aggregates data from the two tables.
Also some devices do not have tag names so we would want to avoid the
"" Case.
In Access, the concept of an empty string ("") is different from the concept of a true blank or 'null'. As such, it would be a good idea to replace all empty strings (if there are any) with nulls -
UPDATE MyTable SET TagName = Null WHERE TagName = '';
You can then set the TagName field's Allow Zero Length property to False in the table designer.
Also moving forward into the future I have added more columns to the
database to allow for more information to be retrieved
Think less in terms of more columns than more tables.
I assume that this will have to be done with VBA of some sort to modify records
Either VBA, SQL, or the Access query designers (which create SQL code behind the scenes). In terms of being able to crunch through data the quickest, SQL is best, though pure VBA (and in particular, using the DAO object library) can be easier to understand and follow.

ACCESS/VBA: Insert Into with autonumbering field returns annoying warning

Ok, here's the situation
Let's have Table1(A,B,C)
A is an autonumbering field.
I'm feeding the table via vba.
Since A is autonumbering, I'm ignoring it like so:
SQL = INSERT INTO TABLE1(B,C) VALUES ('something','something else')
DoCmd.RunSQL SQL
This works ok, access gives me a 1st warning that I'll be creating a new row.
Which is ok to me. However just after that I get this:
Microsoft Access can't add all the records in the update or append query.
It set 1 field(s) to Null due to a type conversion failure.
blahblahblah click ok to run the query anyway
Which doesn't prevent it from working if I click ok, but I don't want my user to see
that warning.
And anyway why does it pop up ? Isn't it normal to leave the autonumbering field blank ?
Is there another procedure I don't know about ? What am I missing ?
I looked around google and here but couldn't find an answer :/
(I don't want to setwarnings to false since I want the first warning of adding a field and any other eventual error to be visible.)
Microsoft Access can't add all the records in the update or append query.
It set 1 field(s) to Null due to a type conversion failure.
That error has nothing to do with your autonumber field. Check the data types of fields B and C.
In this example, field C is set to number, so I get the same error as you, and the INSERT succeeds but with Null in field C:
DoCmd.RunSQL "INSERT INTO TABLE1(B,C) VALUES ('something','something else')"
However, inserting a numeric value into field C works fine.
DoCmd.RunSQL "INSERT INTO TABLE1(B,C) VALUES ('something',99)"
Edit: This one also works in spite of supplying a text value for field C. The difference is the text value is one the database engine can convert to a valid number:
DoCmd.RunSQL "INSERT INTO TABLE1(B,C) VALUES ('something','27')"
Is it clearly due to the autonumbering field? Once the record is added (running the query clicking on 'run anyway'), only the autonumber field is blank?
This error shouldn't be happening for Autonumber; at least, I've never seen it before.
It sounds like you are passing in an empty string to one of the values and it's setting that column to NULL.
When you say
Which doesn't prevent it from working
if I click ok
Do all of the fields get populated correctly? Including the Autonumber?