473,385 Members | 1,769 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,385 software developers and data experts.

Way to create multiple tables on the fly

Hi guys,

Does anyone know of a way to create multiple tables using information
stored in one table? I have a table with 4 columns (TableName,
ColumnName, DataType, DataSize) and wanted to know if there is a way
to use the information in this table to create the many tables that
are listed in the source table instead of creating each table
individually?

Many thanks for any help you can offer.

Dean...
Jul 14 '08 #1
3 7157
DeanL <de*************@yahoo.comwrote in
news:65c1529d-15e1-42a9-86ef-
46**********@m36g2000hse.googlegroups.co
m:
Hi guys,

Does anyone know of a way to create multiple tables using
information stored in one table? I have a table with 4 columns
(TableName, ColumnName, DataType, DataSize) and wanted to know if
there is a way to use the information in this table to create the
many tables that are listed in the source table instead of
creating each table individually?

Many thanks for any help you can offer.

Dean...
If the table was generated from Access, I'd just open it in a
DAO.recordset, and loop on the table name, either adding the tables
and their fields to the relevant collection or building a SQL Create
Table atatement.

There may be other ways.
--
Bob Quintal

PA is y I've altered my email address.
** Posted from http://www.teranews.com **
Jul 15 '08 #2
DeanL wrote:
Hi guys,

Does anyone know of a way to create multiple tables using information
stored in one table? I have a table with 4 columns (TableName,
ColumnName, DataType, DataSize) and wanted to know if there is a way
to use the information in this table to create the many tables that
are listed in the source table instead of creating each table
individually?

Many thanks for any help you can offer.

Dean...
Here's an example from help using "CreateTableDef"

Sub NewTable()
Dim dbs As Database, tdf As TableDef, fld As Field

' Return reference to current database.
Set dbs = CurrentDb
' Return TableDef object variable that points to new table.
Set tdf = dbs.CreateTableDef("Contacts")
' Define new field in table.
Set fld = tdf.CreateField("ContactName", dbText, 40)
' Append Field object to Fields collection of TableDef object.
tdf.Fields.Append fld
tdf.Fields.Refresh
' Append TableDef object to TableDefs collection of database.

dbs.TableDefs.Append tdf
dbs.TableDefs.Refresh
Set dbs = Nothing
End Sub
Also, you should look at the "Create Table" help topic. You can create
the table and fields via SQL
Jul 15 '08 #3
On Mon, 14 Jul 2008 11:42:21 -0700 (PDT), DeanL <de*************@yahoo.com>
wrote:
>Hi guys,

Does anyone know of a way to create multiple tables using information
stored in one table? I have a table with 4 columns (TableName,
ColumnName, DataType, DataSize) and wanted to know if there is a way
to use the information in this table to create the many tables that
are listed in the source table instead of creating each table
individually?

Many thanks for any help you can offer.

Dean...
I use 3 tables to create a database containing temporary tables I sometimes use
for reporting. You may be able to use parts of the code below to achieve what
you want.

1. abfTempTableNames
TempTableName - Text (PK)

2. abfTempTableFieldNames
TempTableName - Text (PK)
FieldName - Text (PK)
FieldType - Long
FieldSize - Integer
AutoNum - Y/N

3. abfTempTableIndexes
TempIndexID - AutoNum (PK)
TempTableName - Text
Fields - Text (Format = +FieldName for single field index
or +FieldName1+FieldName2+FieldName3 for multi field index)
IgnoreNulls - Y/N
Name - Text
Primary - Y/N
Required - Y/N
Unique - Y/N

'************************************************* ********************
Function fCreateTempDB() As Boolean
Dim BFws As Workspace
Dim Bfdb As Database
Dim CurDB As Database
Dim prpLoop As Property
Dim strNewDB As String
Dim rstTbls As Recordset
Dim rstFlds As Recordset
Dim rstInds As Recordset
Dim tdf As TableDef
Dim tdfNew As TableDef
Dim strSQL As String
Dim fldNew As Field
Dim indNew As Index
Dim varRet As Variant
Dim strFields As String
Dim x1 As Integer
Dim x2 As Integer
Dim strNewField As String

On Error GoTo HandleIt

'get table/field definitions
Set CurDB = DBEngine(0)(0)
Set rstTbls = CurDB.OpenRecordset("abfTempTableNames", dbOpenSnapshot)

'get current path and set DB name from constant
strNewDB = Mid(CurDB.Name, 1, Len(CurDB.Name) - 4) & "_tmp" & right(CurDB.Name,
4)

' Get default Workspace.
Set BFws = DBEngine.Workspaces(0)

' Make sure there isn't already a file with the name of
' the new database.
If Dir(strNewDB) <"" Then Kill strNewDB

' Create a new database
Set Bfdb = BFws.CreateDatabase(strNewDB, dbLangGeneral)

'create tables
With rstTbls
If Not (.BOF And .EOF) Then
'set status line
varRet = SysCmd(acSysCmdSetStatus, "Now Creating Temporary File.")
Do Until .EOF
'add tabledef
Set tdf = Bfdb.CreateTableDef(!TempTableName)

'add fields
strSQL = "SELECT * FROM abfTempTableFieldNames WHERE
(((TempTableName)='" & !TempTableName & "'));"
Set rstFlds = CurDB.OpenRecordset(strSQL, dbOpenSnapshot)

With rstFlds
If Not (.BOF And .EOF) Then
Do Until .EOF
Set fldNew = tdf.CreateField(!FieldName, !FieldType,
!FieldSize)
If !AutoNum = True Then
fldNew.Attributes = dbAutoIncrField
End If
tdf.Fields.Append fldNew
.MoveNext
Loop
End If
.Close
End With
Set rstFlds = Nothing

'add indexes
strSQL = "SELECT * FROM abfTempTableIndexes WHERE
(((TempTableName)='" & !TempTableName & "'));"
Set rstInds = CurDB.OpenRecordset(strSQL, dbOpenSnapshot)

With rstInds
If Not (.BOF And .EOF) Then
Do Until .EOF
'create index
Set indNew = tdf.CreateIndex(!Name)
indNew.IgnoreNulls = !IgnoreNulls
indNew.Primary = !Primary
indNew.Required = !Required
indNew.Unique = !Unique

'parse Fields property and strip individual field names
'append each field to index fields collection
strFields = rstInds!Fields
Do Until InStr(1, strFields, Chr(43)) = 0
x1 = InStr(1, strFields, Chr(43))
x2 = InStr(2, strFields, Chr(43))
If x2 <0 Then
strNewField = Mid(strFields, x1 + 1, ((x2 - 1) -
(x1 + 1)))
strFields = right(strFields, Len(strFields) -
(x2 - 1))
indNew.Fields.Append
indNew.CreateField(strNewField)
Else
strNewField = right(strFields, Len(strFields) -
1)
strFields = ""
indNew.Fields.Append
indNew.CreateField(strNewField)
End If
Loop
tdf.Indexes.Append indNew
.MoveNext
Loop
End If
.Close
End With
Set rstInds = Nothing

Bfdb.TableDefs.Append tdf

'link table
CurDB.TableDefs.Refresh
If (fCheckLink(tdf.Name)) Then 'already linked so delete and
refresh
Set tdfNew = CurDB.TableDefs(tdf.Name)
CurDB.TableDefs.Delete tdfNew.Name
CurDB.TableDefs.Refresh
Set tdfNew = CurDB.CreateTableDef(tdf.Name)
tdfNew.Connect = ";Database=" & Bfdb.Name
tdfNew.SourceTableName = tdf.Name
CurDB.TableDefs.Append tdfNew
tdfNew.RefreshLink
Else
'connect here
Set tdfNew = CurDB.CreateTableDef(tdf.Name)
tdfNew.Connect = ";Database=" & Bfdb.Name
tdfNew.SourceTableName = tdf.Name
CurDB.TableDefs.Append tdfNew
tdfNew.RefreshLink
End If

.MoveNext
Loop
End If
End With

'success
fCreateTempDB = True

OutHere:
varRet = SysCmd(acSysCmdClearStatus)
Bfdb.Close
Set Bfdb = Nothing
Set BFws = Nothing
Set CurDB = Nothing
Exit Function

HandleIt:
Select Case Err
Case 0, 91
Resume Next
Case 75
fCreateTempDB = False
Resume OutHere
Case Else
Beep
MsgBox Err & " " & Err.Description, vbCritical + vbOKOnly,
"fCreateTempDB"
fCreateTempDB = False
Resume OutHere
End Select

End Function

'************************************************* ********************
Function fCheckLink(strTableName As String) As Boolean
'check if passed table name exists in DB
Dim i As Integer
Dim Bfdb As Database

On Error GoTo HandleIt

Set Bfdb = DBEngine(0)(0)
Bfdb.TableDefs.Refresh

fCheckLink = False

For i = 0 To Bfdb.TableDefs.Count - 1
If Bfdb.TableDefs(i).Name = strTableName Then
fCheckLink = True
Exit For
End If
Next i

OutHere:
Set Bfdb = Nothing
Exit Function

HandleIt:
Select Case Err
Case Else
fCheckLink = False
Resume OutHere
End Select

End Function
'************************************************* ********************
Wayne Gillespie
Gosford NSW Australia
Jul 16 '08 #4

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: Guy Deprez | last post by:
Hi, i'm having a problem to create indexes. STEP 1 ----------- Connection is OK (you can find the string at the end of the message) Table ("Couleurs") creation is OK STEP 2. Index Creation
4
by: intl04 | last post by:
How do I create a data input form in Access that is external to the Access database to which it's connected (if that's possible, which I believe it is)? For example, if someone clicks on an Access...
10
by: Mark | last post by:
I have a table about people containing 25 fields. The table contains the usual fields - first, last, address, city, state and zip. There is no primary key. These fields all have data with the...
1
by: poohnie08 | last post by:
i have a excel spreadsheet showing staff name, date,work hour, ot hour, slot1, slot2, slot3, slot4 and others). The "()" will keep repeating from day 1 until end of month. eg in excel spreadsheet,...
8
by: Rob | last post by:
Dear all I'm well into designing my first ever Access database which is currently about 13 megs (.mdb file) containing data on progress and attainment of approx 500 students. What I want to...
0
by: sam | last post by:
I always create one new class for one table in order to connect it via wizard. So,I had created ten classes for ten tables. Can you teache me how to create one new class which it can connect to...
27
by: max | last post by:
Hello, I am a newbye, and I'm trying to write a simple application. I have five tables with three columns; all tables are identical; I need to change some data in the first table and let VB...
4
by: knix | last post by:
I have this access project consisting of multiple tables that are linked together in a relationship. I would like to migrate the consolidated information through appending in a datasheet form or...
6
by: nzkks | last post by:
Hi I am using these: ASP.Net 2.0 with VB.Net, Visual Studio 2005, SQL Server 2005 I suspect, there is something missing in BLL class. I created the ASP.Net form also and checked whether it is...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.