access字段顺序的问题,很搞
环境:winxp+access2003+VB6.0
步骤;1、在access中创建一张表,加入若干个字段,fld1、fld2、fld3。
2、因为某些原因,在access中调整了字段的位置,变成fld1、fld3、fld2。
在vb中写下如下代码:
Dim mycat As New ADOX.Catalog
Dim i As Integer
Dim msg As String
mycat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\a.mdb;Persist Security Info=False "
For i = 0 To mycat.Tables( "test ").Columns.Count - 1
msg = msg & mycat.Tables( "test ").Columns(i).Name & " 类型: " & mycat.Tables( "test ").Columns(i).Type & vbCrLf
Next
MsgBox msg, 64, "
test "
上述代码的目的是想将test表中所有字段的名字和类型打印出来。但是,发现,即使access中,字段的位置从fld1、fld2、fld3变成了fld1、fld3、fld2,打印出来的顺序还是fld1、fld2、fld3。有什么方法可以将access表字段的属性名字用for循环以fld1、fld3、fld2打印出来(更进一步,如果顺序变成fld2、fld3、fld1或者其他,for循环也能正常处理)
[解决办法]
dim msg()
For i = 0 To mycat.Tables( "test ").Columns.Count - 1
redim preserve msg(i)
msg(i) = mycat.Tables( "test ").Columns(i).Name & " 类型: " & mycat.Tables( "test ").Columns(i).Type & vbCrLf
Next
然后输出时,按你想要的顺序输出
[解决办法]
字段是有规律的话, 可以尝试这样
Dim fld As ADOX.Column
For i = 0 To mycat.Tables( "test ").Columns.Count - 1
Set fld = mycat.Tables( "test ").Columns( "fld " & i)
Debug.Print fld.Name & " 类型: " & fld.Type
Next
[解决办法]
俺一般是这样输出字段类型
rs.Open "select * from xxxx where 1 <> 1 ", cn, adOpenForwardOnly, adLockReadOnly, adCmdText
For i = 0 To rs.Fields.Count - 1
Debug.Print rs.Fields(i).Name, rs.Fields(i).Type
Next
rs.close
cn.Close
而且,“即使access中,字段的位置从fld1、fld2、fld3变成了fld1、fld3、fld2”这句话有歧义:
1。通过表设计视图修改了字段顺序
2。在显示表数据的视图调整字段顺序
很明显,第2中方法不可能影响输入顺序