Register  |  Login



Question

Status: Closed Points: 75 Time: 06:05 - May 29, 2007  

dustPuppy

how do I check if a field exists in a table with sql?

I need to update a database (access, jet sql) automatically and in that process i need to check first if a table contains a specific field, before I add that field to the table.
What is the syntax to do that?

Categories:

Answer Discussion
Answer Summaries

 

Q&A System for Websites and Corporate Collaboration

Advertisement

  • Generates significant organic traffic for websites
  • Saves companies money, resources, and time

PeterNZ

Date:: May 30, 2007

Time:: 00:09

Try

CurrentDB.TableDefs("Table").Fields("Field").Name

this will return the field name if the column exists. Otherwise it will throw an error.

Cheers

Peter

nidhi

Date:: May 30, 2007

Time:: 05:31

There is nothing u can do in SQL, it has to be done via VBA.


quick way is as Peter suggests. But if u trap for errors then u need to make sure u get the right error number.


eg
On Error Resume Next

Debug.Print CurrentDb.TableDefs("MyTbl").Fields("MyField").Name
If Err.Number = 0 Then
Debug.Print "Field Exists"
ElseIf Err.Number = 3265 Then
Debug.Print "Field Does Not Exist"
Else
Debug.Print Err.Number, Err.Description
End If


The other way if u dont want to catch certain errors is to loop thru the field collection in the table then add it that way. U can add fields in vba as well, just in case u didnt want to bother with sql
eg

'This bit loops thru field collection and sets a flag
Dim db As DAO.Database
Dim tbl As DAO.TableDef
Dim i As Integer
Dim bFound As Boolean

bFound = False
Set db = CurrentDb
Set tbl = db.TableDefs("MyTbl")
For i = 0 To tbl.Fields.Count - 1

'I do a lowercase comparison just in case
If LCase$(tbl.Fields(i).Name) = LCase$("MyField") Then bFound = True
Next i
Debug.Print "Found", bFound

'This bit adds that field. In this case, I am adding it as text size 20
Dim fld As DAO.Field
If bFound = False Then
Set fld = tbl.CreateField("MyField", DB_TEXT, 20)
tbl.Fields.Append fld
End If


dustPuppy

Date:: Jun 04, 2007

Time:: 01:29

thanks guys.
I read that in the case of SQL Server it is actually possible, if you query the sys-tables. Anyway that option doesn't work in the access-case, so I guess I'll have to do it by code as you suggested.

smuenchaisit

Date:: Nov 28, 2007

Time:: 03:19

what is CurrentDb ?
i dont know how to declear this.

Question Answered

This question has been closed, and points have been rewarded to the following experts:

PeterNZ: 35
nidhi: 40

You're welcome however to comment or give additional information or if you wish, you have the ability to write an Answer Summary for the Summary Area.

Answer this Question

New User

Email:

Upon submission of this form, you will automatically be registered as a Quomon user and we will send your login information to this address

Registered User

Username:

Password:

Forgot Your Password?

No summaries have been submitted yet. Want to be the first?

Answer this Question

New User

Email:

Upon submission of this form, you will automatically be registered as a Quomon user and we will send your login information to this address

Registered User

Username:

Password:

Forgot Your Password?

Ask a Question

Have a new question? Ask!

You have 100 characters to use



Top sql Experts

View More

Rank

Expert

Points

1.

nidhi

315

2.

PeterNZ

160

3.

xarcus

125

Become an Expert

Register today to share your knowledge with the community and be recognized and rewarded for your contributions.


Register Here




"Psst, Quomon is a great site. Pass it on."     Tell a Friend  |   Link To Us  |   Save to Delicious  |   Digg! Digg it



Language Options

English:

www.quomon.com

Español:

www.quomon.es