注册 登录
编程论坛 VB6论坛

有关sql execl表查询排序问题

shunlai 发布于 2016-08-16 21:22, 1930 次点击
诸位先生请教个问题,我在读取execl表时遇到一个编号相没有字段的问题。不知道如何查询排序,请大家指教。谢谢!
如:select*from [sheel1$] order by A列 desc.如何写对A列编号进行排序?
8 回复
#2
xiangyue05102016-08-17 08:52
这个语法就是你写的,不是很清楚excel中字段名是怎么定义的,是第一行的还是列名(也就是A、B)
这个解决很简单,搞清楚字段名就可以了。
一个方法是不排序select*from [sheel1$],在datagrid等控件中显示出来就行。
另外一个聪明的方法,也是先不排序select*from [sheel1$],获取recordset.field(0).name,最后放在SQL语句中进行排序查询

提醒一下,Excel对于你的第一列,A列,的数据认为是什么样的数据类型,对排序的结果是有影响的。
比如 1,2,10 这几个数如果按照数字类型排序,就是前面的顺序,但是如果当成了字符类型的话好像应该是 1 10 2
如果有必要SQL查询语句中加入字段类型的强制转换命令
#3
shunlai2016-08-17 09:35
首先非常感谢你的帮助与答复!
execl表中没有字段名,如A列(表列名)的数据是:
A
0
1
2
3
5
4
6
等等。我确实是读入datagrid表显示的,但是多execl表查询再集中读取datadrid中,故打算表先排序再显示,故就把我难住了~。你提出的聪明方法我还没搞得太明白,能更详细点指教吗?
再次表示感谢😊
#4
xiangyue05102016-08-17 10:09
其实就是先读取field(0).name。这个和datagrid显示的字段是一样。 说聪明是因为这个可以直接用,不管表格结构是不是变化。
#5
shunlai2016-08-17 11:13
哈哈,兄弟才疏学浅  谢谢!
我想想消化一下你的指教吧。你的意思是先查询出列的项目名如A,然后作为项列名再进行查询并排序~。如果有个小例子就好了。再次表示感谢!
#6
xiangyue05102016-08-17 20:03
程序代码:
Sub getFieldName()       ‘this sub function can get the field name
    Dim RS As ADODB.Recordset
    Dim CN As ADODB.Connection
    Dim FN As ADODB.Field
    Set CN = New ADODB.Connection
    Set RS = New ADODB.Recordset
     
    CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=access.mdb;Persist Security Info=False"

 
    RS.Open "Select * from Table1", CN
    For Each FN In RS.Fields
        List2.AddItem FN.Name
    Next
    RS.Close
    Set RS = Nothing
    CN.Close
    Set CN = Nothing
End Sub


[此贴子已经被作者于2016-8-17 20:07编辑过]

#7
ZHRXJR2016-08-17 23:33
程序代码:
    Dim RS As New ADODB.Recordset
    Dim cn As New ADODB.Connection
    Dim XX As String
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=false;Data Source=" & App.Path & "\ABCD.xls;Extended Properties='Excel 8.0;HDR=Yes'"
    RS.Open "Select * From [Sheel1$]", cn, 3, 2
        XX = RS.Fields(0).Name    '取得第一个字段的字段名称
    RS.Close
    Set RS = Nothing
    RS.Open "Select * From [Sheel1$] Order BY " & XX & " Desc", cn, 3, 2    '以第一个字段从大到小排序,注意语句中必须的空格
    Do While Not RS.EOF
    '这里是用控件显示排序后数据的代码
    RS.MoveNext
    Loop
    RS.Close
    Set RS = Nothing
    cn.Close
    Set cn = Nothing

应该没有问题,已经通过测试

[此贴子已经被作者于2016-8-17 23:39编辑过]

#8
shunlai2016-08-18 20:03
太谢谢以上的二位高人的指教,谢了!
这二天我按着第一位版主的方法采用先查询后排序的方法,搞了半天好歹把程序搞出来了,且效果和目的也达到了~。但我今天一上网一看,第二位版主指教的方法更简单,而且更贴里我的的要求。哈哈真是谢谢!我回头再把程序改改试试,棒!
在谢谢二位!
#9
xiangyue05102016-08-19 08:37
恭喜了。
其实是一样的,都是先进行一次查询,把字段名提取之后再来排序,差别就是用代码实现提取还是眼睛看一下
1