Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion GroupsFormsForms ProgrammingQueriesModules / DAO / VBAReports / PrintingMacrosDatabase DesignSecurityConversionImporting / LinkingSQL Server / ADPMultiuser / NetworkingReplicationSetup / ConfigurationDeveloper ToolkitsActiveX ControlsNew UsersGeneral 1General 2
Access DirectoryToolsTutorialsUser Groups
Related Topics
SQL ServerOther DB ProductsMS OfficeMore Topics ...

MS Access Forum / General 1 / May 2008

Tip: Looking for answers? Try searching our database.

Learning a Field's Properties Using SQL

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
stevew - 11 May 2008 03:48 GMT
I'm using SQL within Visual Basic in conjunction with Access
databases. Say I am about to insert a record with a long string for a
particlar field. It would be useful to prevent errors to first
interrogate the DB to learn the maximum permissible length of that
field, and only then proceed to write the record. I believe I've seen
that done   -- i.e., get Access field properties -- but don't know the
SQL syntax. Can anyone give me a sample?

Thank you in advance.
Steve
Tom van Stiphout - 11 May 2008 04:02 GMT
A table (better: tabledef) has a fields collection, and each field has
a Properties collection, and one of the properties is Size.
?Currentdb.Tabledefs("SomeTable").Fields("SomeField").Properties("Size")
-> 80

-Tom.

>I'm using SQL within Visual Basic in conjunction with Access
>databases. Say I am about to insert a record with a long string for a
[quoted text clipped - 6 lines]
>Thank you in advance.
>Steve
stevew - 11 May 2008 15:16 GMT
Tom,
Thank you for responding. Trouble is, the main program has no direct
connection to the DB and is required to send SQL calls to the
component which does. So, for a field called 'Name' in a table called
'Titles" I need to develop a statement such as "SELECT Name.Size FROM
Titles", which, unfortunately, doesn't cut it with Access. But in the
dark recesses of memory I seem to recall that this is doable but
cannot come up with the syntax.
Steve

> A table (better: tabledef) has a fields collection, and each field has
> a Properties collection, and one of the properties is Size.
[quoted text clipped - 13 lines]
> >Thank you in advance.
> >Steve
lyle fairfield - 11 May 2008 15:44 GMT
You could try this code. After you examine the Immediate Window and
decide what information you want, you can modify the function to
return it. You may want CHARACTER_MAXIMUM_LENGTH.

Public Function GetColumnInformation(ByVal Table$, ByVal Column$)
Dim ColumnInformation As ADODB.Recordset
Dim Iterator&
Set ColumnInformation = _
CurrentProject.Connection.OpenSchema(adSchemaColumns, Array(Empty,
Empty, Table, Column))
With ColumnInformation
   If Not .EOF Then
       For Iterator = 0 To .Fields.Count - 1
           Debug.Print .Fields(Iterator).Name & ": "
& .Fields(Iterator).Value
       Next Iterator
   End If
End With
End Function

Sub test()
   Debug.Print GetColumnInformation("Schools", "Name")
End Sub

This is the result:
TABLE_CATALOG: ESOII
TABLE_SCHEMA: dbo
TABLE_NAME: Schools
COLUMN_NAME: Name
COLUMN_GUID:
COLUMN_PROPID:
ORDINAL_POSITION: 2
COLUMN_HASDEFAULT: False
COLUMN_DEFAULT:
COLUMN_FLAGS: 4
IS_NULLABLE: False
DATA_TYPE: 129
TYPE_GUID:
CHARACTER_MAXIMUM_LENGTH: 50
CHARACTER_OCTET_LENGTH: 50
NUMERIC_PRECISION:
NUMERIC_SCALE:
DATETIME_PRECISION:
CHARACTER_SET_CATALOG: master
CHARACTER_SET_SCHEMA: dbo
CHARACTER_SET_NAME: iso_1
COLLATION_CATALOG: master
COLLATION_SCHEMA: dbo
COLLATION_NAME: SQL_Latin1_General_CP1_CI_AS
DOMAIN_CATALOG:
DOMAIN_SCHEMA:
DOMAIN_NAME:
DESCRIPTION:
COLUMN_LCID: 1033
COLUMN_COMPFLAGS: 196609
COLUMN_SORTID: 52
COLUMN_TDSCOLLATION: ?Ð
IS_COMPUTED: False

> Tom,
> Thank you for responding. Trouble is, the main program has no direct
[quoted text clipped - 23 lines]
> > >Thank you in advance.
> > >Steve
rkc - 11 May 2008 16:27 GMT
> I'm using SQL within Visual Basic in conjunction with Access
> databases. Say I am about to insert a record with a long string for a
[quoted text clipped - 3 lines]
> that done   -- i.e., get Access field properties -- but don't know the
> SQL syntax. Can anyone give me a sample?

Open a recordset and examine the properties of the Field object in
question.  Doesn't matter if it's an ADODB.Recordset or DAO.Recordset.
Doesn't even matter if it's an empty recordset as long as the field in
question is included in the query string.
lyle fairfield - 11 May 2008 17:55 GMT
Enough with these simple, smart answers, RKC. You're making the rest
of us look bad. Well, you're making me look bad.

So you think that this simple one liner is better than all that crap I
posted, eh?

Debug.Print CurrentProject.Connection.Execute("SELECT [Name] FROM
Schools WHERE 1 = 2").Fields(0).DefinedSize

' shows 50

Hmmmm ... me too!

> > I'm using SQL within Visual Basic in conjunction with Access
> > databases. Say I am about to insert a record with a long string for a
[quoted text clipped - 8 lines]
> Doesn't even matter if it's an empty recordset as long as the field in
> question is included in the query string.
rkc - 11 May 2008 19:06 GMT
> Enough with these simple, smart answers, RKC. You're making the rest
> of us look bad. Well, you're making me look bad.
[quoted text clipped - 8 lines]
>
> Hmmmm ... me too!

You're the Master. I am but a simple student.
stevew - 11 May 2008 20:53 GMT
Thanks to both for both solutions. The longer treatment just as useful
as an added routine in the DB's class where, with one extra argument,
the client program can ask for any property.

I don't believe I've been here before. Very responsive forum.

Thanks again
Steve
Larry Linson - 11 May 2008 22:56 GMT
> Enough with these simple, smart answers, RKC.
> You're making the rest of us look bad. Well,
> you're making me look bad.

Forgive the Grasshopper, Master. (After he re-rakes pattern in the sand in
the courtyard).

Larry

Rate this thread:






 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.