设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: hunrybecky
打印 上一主题 下一主题

[窗体] [讨论] 如何把用户选择的记录导出

[复制链接]

点击这里给我发消息

11#
发表于 2008-3-11 23:03:12 | 只看该作者
看看, 他的原目的未达到, 倒引出了不少精彩代码

点击这里给我发消息

12#
发表于 2008-3-11 23:19:13 | 只看该作者
把10楼的代码改一点加到1楼的这段代码中应该可以实现吧,把 Debug.Print  改为 Add,不过我还没试过
        '=================================================================循环输出记录
        For x = 0 To intRows - 1 '
            For y = 0 To intFieldCount - 1
                Debug.Print arrGetR(y, x) & ";";
            Next y
        Debug.Print vbCrLf
        Next x
        '=================================================================循环输出记录
13#
发表于 2008-3-11 23:21:50 | 只看该作者
如果要输出字段名称,  X须从1开始

点击这里给我发消息

14#
发表于 2008-3-11 23:55:29 | 只看该作者
下面代码我测试过了,可行。在子窗体中选择记录,在主窗体的一个标签上单击。

Private Sub Label2_Click()

With Me.Xzc.Form '子表单subMC

    If .SelHeight > 0 Then
        Dim intStartR As Integer   '定义用户选择的开始记录号
        Dim intEndR As Integer   '定义用户选择的结束记录号
        Dim intRows As Integer   '定义用户选择的行数  

        Dim dbs As New adodb.Connection
        Dim rst1 As New adodb.Recordset                     ' 电子表格记录集
        Dim rst As dao.Recordset                            '定义当前记录集

        Dim arrGetR As Variant, x As Integer, y As Integer '定义记录集数组,上标和下标
        Dim intFieldCount As Integer                       '定义并获取当前记录集的字段数量
        Dim sName As String, st1 As String
        Set rst = .RecordsetClone

        intFieldCount = rst.Fields.Count
        intStartR = .CurrentRecord
        intEndR = .SelTop + .SelHeight
        intRows = intEndR - intStartR    '获取用户选择的记录,注意的是用户必须从上而下选择记录,而不能从下而上选择记录
        arrGetR = rst.GetRows(intRows) ', .Bookmark) '获取记录集的指定行数

        sName = "c:\tmpOpt.xls"                                          ' 表格路径名称

         ' 获取子窗体数据源    如果数据源是SQL语句,后面有分号,改了一下,去掉分号
        st1 = Trim(.RecordSource)
        If Right(st1, 1) = ";" Then st1 = Left(st1, Len(st1) - 1)
        st1 = "(Select * From (" & st1 & ") Where False)"
        
       ' 建立并打开电子表格
        CurrentDb.Execute "SELECT * INTO [Excel 8.0;DATABASE=" & sName & "].Sheet1 FROM " & st1
        dbs.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sName & ";Extended Properties=""Excel 8.0;"""
        rst1.Open "Select * from [Sheet1$]", dbs, adOpenForwardOnly, adLockOptimistic

        '=================================================================循环输出记录
        For x = 0 To intRows - 1
                rst1.AddNew
            For y = 0 To intFieldCount - 1
                rst1.Fields(y) = arrGetR(y, x)
            Next y
            rst1.Update
        Next x
        '=================================================================循环输出记录
    End If
End With

End Sub

[ 本帖最后由 t小宝 于 2008-3-12 00:12 编辑 ]

点击这里给我发消息

15#
发表于 2008-3-12 01:48:26 | 只看该作者
有启发!!
16#
 楼主| 发表于 2008-3-12 14:19:37 | 只看该作者
我现在思路转换了下。在表中增加了一个选种字段,这样用户可以进行任意选择,不再受连续选择的限制了,而且比较灵活,所以我想这个上比较好的方法,而且不再需要写如表。
17#
 楼主| 发表于 2008-3-12 19:32:36 | 只看该作者
本来想用ADOX把获取的SQL生成一个查询,可是老是出现错误,调试了很久,真找不出自己哪里错了。代码如下,注意环境是ADP

Function TT(strQName As String)
Dim cat As New ADOX.Catalog
Set cat.ActiveConnection = CurrentProject.Connection
Dim cmd As New ADODB.Command
cmd.CommandText = "SELECT * FROM whMC2"
cat.Views.Append strQName, cmd
End Function

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
18#
 楼主| 发表于 2008-3-12 19:33:55 | 只看该作者
最好把表和代码弄到MDB中,测试通过。天拿,这ADP还真难搞。
真想把ADP换成MDB算了,一直用的DAO全部转想ADO太麻烦了。

点击这里给我发消息

19#
发表于 2008-3-12 19:35:04 | 只看该作者
小不点, 出错时,代码停在哪一行?
20#
 楼主| 发表于 2008-3-13 08:37:35 | 只看该作者
王大哥,如你所说,我真的很灰心了。决定把ADP换回MDB,反正,MDB也支持连接表到SQL。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-1-10 14:04 , Processed in 0.101721 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表