Gustav Brock
gustav at cactus.dk
Wed Jul 27 17:06:24 CDT 2011
Hi William Use DAO to create tables and fields (and indexes and relations, even databases) and all your trouble will end. Seriously. That way you will be in control of the finest details including all properties of the objects. Example: <code> Public Function SetTableProperties() As Boolean Dim dbs As DAO.Database Dim tdf As DAO.TableDef Dim fld As DAO.Field Dim prp As DAO.Property Dim strPropertyName As String Set dbs = CurrentDb() Set tdf = dbs.TableDefs("tblTest") Set fld = tdf.Fields(0) ' On Error GoTo Err_Prop strPropertyName = "Description" Set prp = tdf.CreateProperty() prp.Name = strPropertyName prp.Type = dbText prp.Value = "Table Description" tdf.Properties.Append prp strPropertyName = "Caption" Set prp = fld.CreateProperty(strPropertyName, dbText, "Field Caption") fld.Properties.Append prp SetTableProperties = True Exit_Prop: Exit Function Err_Prop: If Err.Number = 3265 Then ' Item not found in this collection. Resume Next Else Debug.Print Err.Number, Err.Description Resume Exit_Prop End If End Function </code> /gustav >>> vbacreations at gmail.com 27-07-2011 22:35:50 >>> I sometimes try to create new tables using SQL but not using CREATETABLE. Example: Select 'Test' as Field1 Into Tbl1 One problem I had recently was, how can one make a MEMO field this way? (I can't find a way, not even with MyDB.Execute ("Select '" & string(257,"a") & "' as Field1 Into Tbl1"),DBFailonError When I do that I get only 255 characters and the field is Text. Another problem is that I often like the table to be created without a first row in it. So I might write something like Select 'Test' as Field1 Into Tbl1 From Tbl2 WHERE 1 = 2 Trouble is, What if there is no table named Tbl2? (Obviously it fails). But I can't seem to get the WHERE clause to be acceptable when I do not specify a valid table in the FROM clause, unlike the first example. Now, I might be able to solve the latter problem by specifying a system table as the FROM table, something I know will always be present... such as: Select 'Test' as Field1 Into Tbl1 From MSysObjects WHERE 1 = 2 But then that code probably would not work in other (non-MSAccess) databases. In fact, I am not sure this process of using Select Into works in non-Access databases anyway (does it?) So... I am now leaning towards using CREATE TABLE always and forever as my choice for the best performing method of creating a table using inline SQL. Does anyone beg to differ with this and/or have a way to resolve the issues I have found?