मेरी समझ यह है कि डीएओ दशमलव डेटा प्रकार का समर्थन नहीं करता है, लेकिन एडीओएक्स करता है। यहां एक अद्यतित प्रक्रिया है जो स्कीमा को एक नई तालिका में कॉपी करने के बजाय ADOX का उपयोग करती है।
नोट का एक दिलचस्प आइटम: जेट के लिए ओएलडीडीबी प्रदाता in this KB article समझाया गया अनुसार सामान्य स्थिति के अनुसार वर्णमाला क्रमशः कॉलम टाइप करता है। मैं सामान्य स्थिति को संरक्षित करने के बारे में चिंतित नहीं था, लेकिन आप हो सकते हैं, इस मामले में आप अपनी आवश्यकताओं को पूरा करने के लिए इस प्रक्रिया को अपडेट कर सकते हैं।
कोड के एडीओएक्स संस्करण के काम के लिए, आपको माइक्रोसॉफ्ट एडीओ एक्सटी के लिए एक संदर्भ सेट करने की आवश्यकता होगी। 2.x डीडीएल और सुरक्षा के लिए (जहां एक्स = संस्करण संख्या; मैंने इस प्रक्रिया का परीक्षण करने के लिए 2.8 का उपयोग किया)। आपको एडीओ के संदर्भ की भी आवश्यकता होगी।
Public Sub CopySchemaAndData_ADOX(ByVal sourceTableName As String, ByVal destinationTableName As String)
On Error GoTo Err_Handler
Dim cn As ADODB.Connection
Dim cat As ADOX.Catalog
Dim sourceTable As ADOX.Table
Dim destinationTable As ADOX.Table
Set cn = CurrentProject.Connection
Set cat = New ADOX.Catalog
Set cat.ActiveConnection = cn
Set destinationTable = New ADOX.Table
destinationTable.Name = destinationTableName
Set sourceTable = cat.Tables(sourceTableName)
Dim col As ADOX.Column
For Each col In sourceTable.Columns
Dim newCol As ADOX.Column
Set newCol = New ADOX.Column
With newCol
.Name = col.Name
.Attributes = col.Attributes
.DefinedSize = col.DefinedSize
.NumericScale = col.NumericScale
.Precision = col.Precision
.Type = col.Type
End With
destinationTable.Columns.Append newCol
Next col
Dim key As ADOX.key
Dim newKey As ADOX.key
Dim KeyCol As ADOX.Column
Dim newKeyCol As ADOX.Column
For Each key In sourceTable.Keys
Set newKey = New ADOX.key
newKey.Name = key.Name
For Each KeyCol In key.Columns
Set newKeyCol = destinationTable.Columns(KeyCol.Name)
newKey.Columns.Append (newKeyCol)
Next KeyCol
destinationTable.Keys.Append newKey
Next key
cat.Tables.Append destinationTable
'Finally, copy data from source to destination table
Dim sql As String
sql = "INSERT INTO " & destinationTableName & " SELECT * FROM " & sourceTableName
CurrentDb.Execute sql
Err_Handler:
Set cat = Nothing
Set key = Nothing
Set col = Nothing
Set sourceTable = Nothing
Set destinationTable = Nothing
Set cn = Nothing
If Err.Number <> 0 Then
MsgBox Err.Number & ": " & Err.Description, vbCritical, Err.Source
End If
End Sub
यहाँ मूल डीएओ प्रक्रिया
Public Sub CopySchemaAndData_DAO(SourceTable As String, DestinationTable As String)
On Error GoTo Err_Handler
Dim tblSource As DAO.TableDef
Dim fld As DAO.Field
Dim db As DAO.Database
Set db = CurrentDb
Set tblSource = db.TableDefs(SourceTable)
Dim tblDest As DAO.TableDef
Set tblDest = db.CreateTableDef(DestinationTable)
'Iterate over source table fields and add to new table
For Each fld In tblSource.Fields
Dim destField As DAO.Field
Set destField = tblDest.CreateField(fld.Name, fld.Type, fld.Size)
If fld.Type = 10 Then
'text, allow zero length
destField.AllowZeroLength = True
End If
tblDest.Fields.Append destField
Next fld
'Handle Indexes
Dim idx As Index
Dim iIndex As Integer
For iIndex = 0 To tblSource.Indexes.Count - 1
Set idx = tblSource.Indexes(iIndex)
Dim newIndex As Index
Set newIndex = tblDest.CreateIndex(idx.Name)
With newIndex
.Unique = idx.Unique
.Primary = idx.Primary
'Some Indexes are made up of more than one field
Dim iIdxFldCount As Integer
For iIdxFldCount = 0 To idx.Fields.Count - 1
.Fields.Append .CreateField(idx.Fields(iIdxFldCount).Name)
Next iIdxFldCount
End With
tblDest.Indexes.Append newIndex
Next iIndex
db.TableDefs.Append tblDest
'Finally, copy data from source to destination table
Dim sql As String
sql = "INSERT INTO " & DestinationTable & " SELECT * FROM " & SourceTable
db.Execute sql
Err_Handler:
Set fld = Nothing
Set destField = Nothing
Set tblDest = Nothing
Set tblSource = Nothing
Set db = Nothing
If Err.Number <> 0 Then
MsgBox Err.Number & ": " & Err.Description, vbCritical, Err.Source
End If
End Sub
स्रोत
2009-10-20 15:13:04
टीएक्स मैन को खो देता है! मुझे बताएं क्या आपको पता है कि इस तरह की एक स्पष्ट चीज़ क्यों है (प्राथमिक कुंजी रखना) आयात डेटा के उपयोग में समर्थित नहीं है? – Peter
मुझे कोई जानकारी नहीं है, विशेष रूप से यह देखते हुए कि एक्सेस कितनी देर तक है। आपको लगता है कि यह कम से कम एक विकल्प होगा ... –
decimals के लिए काम नहीं करता है डर ... – Peter