MartyConnelly
martyconnelly at shaw.ca
Tue Sep 14 23:44:23 CDT 2004
You are missing a statement Set tbl = dbs.TableDefs("Table1") however
this method wont work.
For Access 97 with DAO
'*****************************************************************
' The AlterFieldType Sub procedure requires three string
' parameters. The first string specifies the name of the table
' containing the field to be changed. The second string specifies
' the name of the field to be changed. The third string specifies
' the new data type for the field.
'*****************************************************************
Sub AlterFieldType (TblName As String, FieldName As String, _
NewDataType As String)
Dim db As Database
Dim qdf As QueryDef
Set db = CurrentDb()
' Create a dummy QueryDef object.
Set qdf = db.CreateQueryDef("", "Select * from PROD1")
' Add a temporary field to the table.
qdf.SQL = "ALTER TABLE [" & TblName & "] ADD COLUMN_
AlterTempField " & NewDataType
qdf.Execute
' Copy the data from old field into the new field.
qdf.SQL = "UPDATE DISTINCTROW [" & TblName & "] SET_
AlterTempField = [" & FieldName & "]"
qdf.Execute
' Delete the old field.
qdf.SQL = "ALTER TABLE [" & TblName & "] DROP COLUMN ["_
& FieldName & "]"
qdf.Execute
' Rename the temporary field to the old field's name.
db.tabledefs("[" & TblName & "]").Fields("AlterTempField")._
Name = FieldName
' Clean up.
End Sub
For ADO with 2000 , you could also do this with ADO and 97 by setting an
ADO reference
and by setting the connection string directly like so
Set cnn = New ADODB.Connection
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\somepath\myDb.mdb;" & _
"User Id=admin;" & _
"Password="
Sub sChangeDataType()
Dim cnn As ADODB.Connection
Dim strSQL As String
Set cnn = CurrentProject.Connection
' however this sql string might work in Access 97 if using Jet 4.0
rather than 3.51
'by selecting a reference to DAO 3.6 rather than DAO 3.51
strSQL = "ALTER TABLE [Employees] ALTER COLUMN Extension int"
cnn.Execute strSQL
end sub
See also
http://support.microsoft.com/default.aspx?scid=kb;EN-US;210304
http://support.microsoft.com/default.aspx?scid=kb;EN-US;128016
Paul Black wrote:
> Hi
>
> I using Access 97 and can not get the following to work:
>
> Private Sub Command0_Click()
> Dim fld As Field
> Dim dbs As Database
> Dim tbl As TableDef
>
> Set dbs = CurrentDb()
> For Each fld In tbl.Fields
> If Left$(tbl.Name, 2) = "t_" And fld <> "t_proj" And fld <> "t_pt"
> And fld <> "t_plink" And fld <> "ptlink" And fld <> "t_species" Then
> fld.Type = dbInteger
> End If
> Next fld
>
> Beep
> MsgBox "Done"
> End Sub
>
> It is supposed to change the field data type to integer from text. All
> field names to change begin with 't_
> 'excludingcertainfieldslistedabove.I
> keep getting an error:
>
> Runtime error '91'
> Object Variable or With Block variable not set
>
> Other than the excluded fields above all the data conatined in the
> fields is numeric or has a Null value... but it is in a text field.
> The data is coming to me off of a Pocket PC and it won't let me change
> the field type to numeric.
>
> Please help me solve this.
>
> Thanks
>
> PB
>
> _________________________________________________________________
> Get ready for school! Find articles, homework help and more in the
> Back to School Guide! http://special.msn.com/network/04backtoschool.armx
>
--
Marty Connelly
Victoria, B.C.
Canada