Some skilled used in Excel Handling~
2007-08-07 10:59
267 查看
Private Sub LoadDataTypeField()
'Set DB connection to MGISDBSRV
Dim DBcfg As DBconfig
Dim strSQL As String
Dim iRowscount, iTableRowCount, iTotalCount, iArrayCount As Integer
Dim i, j As Integer
Dim cm, cf, cB, cI As String 'cm is Cell Datatype "G" , cf is Cell FieldName "E", cb is the Cell Table Name "B"
' cI is cell isNull type "I"
With DBcfg
.strPassword = txtPwd.Text
.strServerName = txtServerName.Text
.strUserName = txtPwd.Text
.strSDEInstance = "sde_gisdbw"
.strSIDName = txtSID.Text
.strSDEOwner = txtSDEOwner.Text
End With
Set mobjConn = New ADODB.Connection
mstrConn = "Provider=OraOLEDB.Oracle.1;Persist Security Info=False;Data Source=" & DBcfg.strSIDName & ";User ID =" & DBcfg.strUserName & ";Password=" & DBcfg.strPassword
mobjConn.Open mstrConn
'iRowsCount = Sheet1.Cells(Sheet1.Rows.Count, "G").End(xlUp).Row
iRowscount = ActiveSheet.UsedRange.Rows.Count
iTotalCount = 1
ProgressBar1.Visible = True
ProgressBar1.Max = TB_COUNT
Set objRs = New ADODB.Recordset
For i = 1 To TB_COUNT
strSQL = "select * from user_tab_columns where table_name='" & Trim(TBNameList(i)) & "'"
objRs.Open strSQL, mobjConn, adOpenStatic, adLockOptimistic
iTableRowCount = objRs.RecordCount
If iTableRowCount <> 0 Then
'if the Table has field , then record them
' cB = "B" & Trim(Str(iTotalCount)) 'Table Name
' Range(cB).Select
' ActiveCell.FormulaR1C1 = TBNameList(i)
objRs.MoveFirst
Debug.Print "Field counts of " & TBNameList(i) & "are: " & Str(iTableRowCount)
ReDim DataTypeList(1 To TB_COUNT, 1 To iTableRowCount)
For j = 1 To iTableRowCount 'Start Inner Loop
cm = "G" & Trim(Str(iTotalCount)) 'Data Type and data length
cf = "E" & Trim(Str(iTotalCount)) 'Field Name
cB = "B" & Trim(Str(iTotalCount)) 'Table Name
cI = "I" & Trim(Str(iTotalCount)) 'Table Name
DataTypeList(i, j).TableName = TBNameList(i)
If objRs.Fields("DATA_TYPE").Value = "NUMBER" Then ' Only number type has data scale
'if the data Precision is null,then replace it with zero
If IsNull(objRs.Fields("DATA_PRECISION").Value) = True Then
DataTypeList(i, j).XLSDataTypeColumn = objRs.Fields("DATA_TYPE").Value _
& "(" & objRs.Fields("DATA_LENGTH").Value & "," & "0" & ")"
DataTypeList(i, j).FieldName = objRs.Fields("COLUMN_NAME").Value
DataTypeList(i, j).IsNullField = objRs.Fields("NULLABLE").Value
'if the data precision is not null, then replace it with DATA_TYPE+DATA_PRECISION
Else
DataTypeList(i, j).XLSDataTypeColumn = objRs.Fields("DATA_TYPE").Value _
& "(" & objRs.Fields("DATA_LENGTH").Value & "," & objRs.Fields("DATA_PRECISION").Value & ")"
DataTypeList(i, j).FieldName = objRs.Fields("COLUMN_NAME").Value
DataTypeList(i, j).IsNullField = objRs.Fields("NULLABLE").Value
End If
Else ' if the data type is not number, no data precision needed
DataTypeList(i, j).XLSDataTypeColumn = objRs.Fields("DATA_TYPE").Value _
& "(" & objRs.Fields("DATA_LENGTH").Value & ")"
DataTypeList(i, j).FieldName = objRs.Fields("COLUMN_NAME").Value
DataTypeList(i, j).IsNullField = objRs.Fields("NULLABLE").Value
End If
Range(cB).Select
ActiveCell.FormulaR1C1 = DataTypeList(i, j).TableName
Range(cm).Select
ActiveCell.FormulaR1C1 = DataTypeList(i, j).XLSDataTypeColumn
Range(cf).Select
ActiveCell.FormulaR1C1 = DataTypeList(i, j).FieldName
Range(cI).Select
ActiveCell.FormulaR1C1 = DataTypeList(i, j).IsNullField
objRs.MoveNext
iTotalCount = iTotalCount + 1
Debug.Print DataTypeList(i, j).TableName & "*" & DataTypeList(i, j).FieldName & "*" & DataTypeList(i, j).XLSDataTypeColumn
Next 'End Inner Loop
objRs.Close
Else
'if the Table has no fields, then redim the Array to DataTypeList(1 to 440,1 to 1)
'and set the XLSDataTypeColumn to empty
ReDim DataTypeList(1 To TB_COUNT, 1 To 1)
DataTypeList(i, 1).XLSDataTypeColumn = ""
objRs.Close
End If
ProgressBar1.Value = i
Next
ProgressBar1.Visible = False
Set objRs = Nothing
Set mobjConn = Nothing
End Sub
'Set DB connection to MGISDBSRV
Dim DBcfg As DBconfig
Dim strSQL As String
Dim iRowscount, iTableRowCount, iTotalCount, iArrayCount As Integer
Dim i, j As Integer
Dim cm, cf, cB, cI As String 'cm is Cell Datatype "G" , cf is Cell FieldName "E", cb is the Cell Table Name "B"
' cI is cell isNull type "I"
With DBcfg
.strPassword = txtPwd.Text
.strServerName = txtServerName.Text
.strUserName = txtPwd.Text
.strSDEInstance = "sde_gisdbw"
.strSIDName = txtSID.Text
.strSDEOwner = txtSDEOwner.Text
End With
Set mobjConn = New ADODB.Connection
mstrConn = "Provider=OraOLEDB.Oracle.1;Persist Security Info=False;Data Source=" & DBcfg.strSIDName & ";User ID =" & DBcfg.strUserName & ";Password=" & DBcfg.strPassword
mobjConn.Open mstrConn
'iRowsCount = Sheet1.Cells(Sheet1.Rows.Count, "G").End(xlUp).Row
iRowscount = ActiveSheet.UsedRange.Rows.Count
iTotalCount = 1
ProgressBar1.Visible = True
ProgressBar1.Max = TB_COUNT
Set objRs = New ADODB.Recordset
For i = 1 To TB_COUNT
strSQL = "select * from user_tab_columns where table_name='" & Trim(TBNameList(i)) & "'"
objRs.Open strSQL, mobjConn, adOpenStatic, adLockOptimistic
iTableRowCount = objRs.RecordCount
If iTableRowCount <> 0 Then
'if the Table has field , then record them
' cB = "B" & Trim(Str(iTotalCount)) 'Table Name
' Range(cB).Select
' ActiveCell.FormulaR1C1 = TBNameList(i)
objRs.MoveFirst
Debug.Print "Field counts of " & TBNameList(i) & "are: " & Str(iTableRowCount)
ReDim DataTypeList(1 To TB_COUNT, 1 To iTableRowCount)
For j = 1 To iTableRowCount 'Start Inner Loop
cm = "G" & Trim(Str(iTotalCount)) 'Data Type and data length
cf = "E" & Trim(Str(iTotalCount)) 'Field Name
cB = "B" & Trim(Str(iTotalCount)) 'Table Name
cI = "I" & Trim(Str(iTotalCount)) 'Table Name
DataTypeList(i, j).TableName = TBNameList(i)
If objRs.Fields("DATA_TYPE").Value = "NUMBER" Then ' Only number type has data scale
'if the data Precision is null,then replace it with zero
If IsNull(objRs.Fields("DATA_PRECISION").Value) = True Then
DataTypeList(i, j).XLSDataTypeColumn = objRs.Fields("DATA_TYPE").Value _
& "(" & objRs.Fields("DATA_LENGTH").Value & "," & "0" & ")"
DataTypeList(i, j).FieldName = objRs.Fields("COLUMN_NAME").Value
DataTypeList(i, j).IsNullField = objRs.Fields("NULLABLE").Value
'if the data precision is not null, then replace it with DATA_TYPE+DATA_PRECISION
Else
DataTypeList(i, j).XLSDataTypeColumn = objRs.Fields("DATA_TYPE").Value _
& "(" & objRs.Fields("DATA_LENGTH").Value & "," & objRs.Fields("DATA_PRECISION").Value & ")"
DataTypeList(i, j).FieldName = objRs.Fields("COLUMN_NAME").Value
DataTypeList(i, j).IsNullField = objRs.Fields("NULLABLE").Value
End If
Else ' if the data type is not number, no data precision needed
DataTypeList(i, j).XLSDataTypeColumn = objRs.Fields("DATA_TYPE").Value _
& "(" & objRs.Fields("DATA_LENGTH").Value & ")"
DataTypeList(i, j).FieldName = objRs.Fields("COLUMN_NAME").Value
DataTypeList(i, j).IsNullField = objRs.Fields("NULLABLE").Value
End If
Range(cB).Select
ActiveCell.FormulaR1C1 = DataTypeList(i, j).TableName
Range(cm).Select
ActiveCell.FormulaR1C1 = DataTypeList(i, j).XLSDataTypeColumn
Range(cf).Select
ActiveCell.FormulaR1C1 = DataTypeList(i, j).FieldName
Range(cI).Select
ActiveCell.FormulaR1C1 = DataTypeList(i, j).IsNullField
objRs.MoveNext
iTotalCount = iTotalCount + 1
Debug.Print DataTypeList(i, j).TableName & "*" & DataTypeList(i, j).FieldName & "*" & DataTypeList(i, j).XLSDataTypeColumn
Next 'End Inner Loop
objRs.Close
Else
'if the Table has no fields, then redim the Array to DataTypeList(1 to 440,1 to 1)
'and set the XLSDataTypeColumn to empty
ReDim DataTypeList(1 To TB_COUNT, 1 To 1)
DataTypeList(i, 1).XLSDataTypeColumn = ""
objRs.Close
End If
ProgressBar1.Value = i
Next
ProgressBar1.Visible = False
Set objRs = Nothing
Set mobjConn = Nothing
End Sub
相关文章推荐
- Some commonly used commands in linux
- some common used tips in web development
- Is it possible to show some Word Document (or Excel document) in a UniGUI Frame ?
- [Javascript] Some very simple functions for Word and Excel handling
- some useful softwares in linux
- Some projects cannot be imported because they already exist in the workspace
- Some index files failed to download. They have …… or old ones used instead
- How to Disable Protected View in Microsoft Excel
- Impersonate: use specified credential to execute some code in C#
- the port already in used
- The frequent used operation in Linux system
- Some commands about setting network in ubuntu
- A macro to get all interior colorindex has been used in thisworkbook
- wireshark: no interface can be used for capturing in this system
- [BTS] Some code in BizTalk.Trace V1.0
- There are inconsistent line endings in the 'xxx' script. Some are Mac OS X (UNIX) and some are Windows
- 安卓问题报告小记(四):Some projects cannot be imported because they already exist in the workspace
- excel in group discussion
- some functions in assembly
- Linux 配置收集 - Some Configuration In Linux - By黑月君