Adding a key to MS Access Table

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

Hi everyone

I was hoping someone might be able to help me with this. I'm just starting to try to work with MS Access tables through VB.net. In Access I can take an existing table and add a new field with the type AutoNumber. I can then set this up as a key. Then if I go into the table I will see sequential numbers have been inserted into that field for me. Can I do this through VB.net

I'd appreciate any help or alternative suggestions

Thanks very much

Art
 
Below is copy of an old post. This may help you get started.


Hi Frank,

I tried both your sample and the post by Josef on 02/13/2004, however as
weird as it appears, all solutions still return error: "Item is ReadOnly"

I searched net and all samples I found were same/similat to both your's and
MSDN

However, for your ref and anyone else pulling their hair out with this crazy
problem, I found (stumbled across) a solution...

..Item("Reference").ParentCatalog = cat
..Item("Reference").Properties("AutoIncrement").Value = True

'and if you like to set seed + increment values...

..Item("Reference").Properties.Item("Seed").Value = 1 'or whatever your
preference
..Item("Reference").Properties.Item("Increment").Value = 1 'or whatever your
preference

Regards
Harry



Frank Hickman said:
Try adding this line prior to setting the property...

.Item("ContactId").ParentCatalog = catDB;

My VB is a little rusty so you may have to tweak it :)


Sub CreateAutoNumberField(strDBPath As String)
Dim catDB As ADOX.Catalog
Dim tbl As ADOX.Table

Set catDB = New ADOX.Catalog
' Open the catalog.
catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strDBPath

Set tbl = New ADOX.Table
With tbl
.Name = "Contacts"
Set .ParentCatalog = catDB
' Create fields and append them to the
' Columns collection of the new Table object.
With .Columns
.Append "ContactId", adInteger
' Make the ContactId field auto-incrementing.
.Item("ContactId").ParentCatalog = catDB;
.Item("ContactId").Properties("AutoIncrement") = True
.Append "CustomerID", adVarWChar
.Append "FirstName", adVarWChar
.Append "LastName", adVarWChar
.Append "Phone", adVarWChar, 20
.Append "Notes", adLongVarWChar
End With
End With

' Add the new Table to the Tables collection of the database.
catDB.Tables.Append tbl

Set catDB = Nothing
End Sub

This solution was posted by Josef Blösl on 02/13/2004 in a reply to my reply
about the same subject. My solution was somewhat different so if the above
does not work for you, you may want to try that instead. Which was to go
ahead and append the table to the catalog and then set the column property.
But his solution should work as appending the table essentially does this
too.

HTH
--
============
Frank Hickman
NobleSoft, Inc.
============
Replace the _nosp@m_ with @ to reply.



http://msdn.microsoft.com/library/d...g/html/deovrcreatingmodifyingaccesstables.asp







Art said:
Hi everyone,

I was hoping someone might be able to help me with this. I'm just
starting to try to work with MS Access tables through VB.net. In Access I
can take an existing table and add a new field with the type AutoNumber. I
can then set this up as a key. Then if I go into the table I will see
sequential numbers have been inserted into that field for me. Can I do this
through VB.net?
 
Also this old post may be useful...


Miha Markic said:
Hi,

The first thing to change is identityseed/step on DataTable to negative
values.
Read also this:

HOW TO: Retrieve an Identity Value from a Newly Inserted Record from
SQL Server by Using Visual C# .NET

http://support.microsoft.com/default.aspx?scid=kb;en-us;320897&Product=vcSnet
and
Managing an @@IDENTITY Crisis

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnadonet/html/manidcrisis.asp





Art said:
Hi everyone,

I was hoping someone might be able to help me with this. I'm just
starting to try to work with MS Access tables through VB.net. In Access I
can take an existing table and add a new field with the type AutoNumber. I
can then set this up as a key. Then if I go into the table I will see
sequential numbers have been inserted into that field for me. Can I do this
through VB.net?
 
Hi Art,

Yes however keep in mind that when you are working with a dataset the real
number is given at the moment the dataset is updated in the database.
(Because the dataset is disconnected when you are working with it).

When you than "fill" it back from the database in your dataset you get the
real number.

Cor
 
Harry

Thanks very much! I haven't yet tried to implement the stuff in your response. Since I'm fairly new at VB.net, I seem to get "bonus" information everytime I post a question. I was just "barely" familiar with how to deal with MS Access tables, and the information you provided showed me much more than I had asked. So thanks again

Art
 
Cor

Thanks for the warning! As I'm fairly new to this, it's likely that I would have spent some time trying to figure out why my data didn't look right

Art
 
¤ Hi everyone,
¤
¤ I was hoping someone might be able to help me with this. I'm just starting to try to work with MS Access tables through VB.net. In Access I can take an existing table and add a new field with the type AutoNumber. I can then set this up as a key. Then if I go into the table I will see sequential numbers have been inserted into that field for me. Can I do this through VB.net?
¤
¤ I'd appreciate any help or alternative suggestions.
¤

You can use Access SQL DDL:

ALTER TABLE Table4 ADD COLUMN IDField COUNTER CONSTRAINT PrimaryKey PRIMARY KEY


Paul ~~~ (e-mail address removed)
Microsoft MVP (Visual Basic)
 
Back
Top