将大表分成较小的表用于导出

时间:2016-09-26 21:07:21

标签: sql ms-access

我在MS Access中有一个非常大的表,它超出了Excel可容纳的行数。由于许可问题,我们无法使用访问作为外部数据源,但我们可以使用Excel存储表,直到我们可以使用几个月内即将推出的SQL Server。

我的任务是将桌子分成几个国家。

获取查询以获取所有不同的国家/地区是没有问题的。

Select distinct Country_Code
from AllCountries

但是我需要为每个国家获得一个结果集。

在来到这里之前,我去过几个试图解决这个问题的网站。 我知道这是一个基本的问题,不幸的是,距离场地10年,让我生锈。

我需要创建这些较小的表0r结果集并导出它们。我迷失了这个。

2 个答案:

答案 0 :(得分:1)

这样的东西?

PUBLIC FUNCTION exportFiles() AS Boolean
    Dim db AS DAO.DATABASE
    Dim qdf AS DAO.QueryDef
    Dim rsRptGroup AS DAO.Recordset
    Dim sSQL AS String
    Dim sRptGroup AS String
    Dim sPath AS String

    Const sQryExport AS String = "qryExport"

    sPath = Application.CurrentProject.PATH

    SET db = CurrentDb
    SET qdf = db.CreateQueryDef(sQryExport, sSQL)
    qdf.NAME = sQryExport

    ' Get list of labeler values
    sSQL = "SELECT DISTINCT labeler FROM qry_export"
    Set rsRptGroup = db.OpenRecordset(sSQL, dbOpenDynaset, dbReadOnly)

    ' Now LOOP THROUGH list OF labeler VALUES AND CREATE a QUERY FOR EACH labeler
    ' so that the data can be exported
    Do While Not rsRptGroup.EOF
        sRptGroup = rsRptGroup("labeler")
        sSQL = "SELECT * FROM qry_export WHERE labeler = '" & sRptGroup & "'"
        qdf.sql = sSQL

        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, sQryExport, sPath & "\xls\" & sRptGroup & ".xls"

        rsRptGroup.MoveNext
    Loop

    rsRptGroup.Close
    Set rsRptGroup = Nothing    
    db.Close
    Set db = Nothing    
    exportFiles = True
End Function

答案 1 :(得分:1)

重新考虑您的设置,因为您的声明不完全正确:

  

由于许可问题,我们无法将访问权用作外部数据   源

MS Access .mdb / .accdb文件可供任何PC机使用,无论MSAccess.exe程序是否需要许可。 MS Access的基础技术是JET / ACE SQL引擎,它是一组Windows .dll文件,通常预先安装在PC机器上。 Access只是一个默认使用此引擎的GUI。

因此,继续使用实际的关系数据库(.mdb / .accdb)文件,而不是使用flatfile Excel工作表进行数据存储和完整性。在没有Access的计算机上,文件将显示空白图标,无法使用任何一个程序直接打开,但可以通过ODBC / OLEDB连接或COM对象与Excel或其他语言(PHP,R,Python,Java)连接--ADO或DAO。事实上,Windows计算机可以创建.mdb / .accdb文件而无需完整的Access程序。下面是用于说明的Excel宏:

创建数据库 (使用DAO)

Sub CreateDatabase()
On Error GoTo ErrHandle
    Dim fso As Object
    Dim olDb As Object, db As Object
    Dim strpath As String
    Const dbLangGeneral = ";LANGID=0x0409;CP=1252;COUNTRY=0"

    strpath = "C:\Path\To\Access\Database.accdb"

    ' CREATE DATABASE
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set olDb = CreateObject("DAO.DBEngine.120")

    If Not fso.FileExists(strpath) Then
        Set db = olDb.CreateDatabase(strpath, dbLangGeneral)
    End If

    Set db = Nothing
    Set olDb = Nothing
    Set fso = Nothing

    MsgBox "Successfully created database!", vbInformation
    Exit Sub

ErrHandle:
    MsgBox Err.Number & " - " & Err.Description
    Exit Sub
End Sub

创建表格 (使用ADO)

Sub CreateTables()
On Error GoTo ErrHandle
    Dim strpath As String, constr As String
    Dim objAccess As Object
    Dim conn As Object

    strpath = "C:\Path\To\Access\Database.accdb"

    ' CONNECT TO DATABASE
    constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strpath & ";"
    Set conn = CreateObject("ADODB.Connection")
    conn.Open constr

    ' CREATE TABLES
    conn.Execute "CREATE TABLE Clients (" _
                    & " ClientID AUTOINCREMENT," _
                    & " ClientName TEXT(255)," _
                    & " Address TEXT(255)," _
                    & " Notes TEXT(255)," _
                    & " DateCreated DATETIME" _
                    & ");"

    conn.Execute "CREATE TABLE Orders (" _
                    & " OrderID AUTOINCREMENT," _
                    & " ClientID INTEGER," _
                    & " Item TEXT(255)," _
                    & " Price DOUBLE," _
                    & " OrderDate DATETIME," _
                    & " Notes TEXT(255)" _
                    & ");"

    ' CLOSE CONNECTION
    conn.Close
    Set conn = Nothing

    MsgBox "Successfully created Clients and Orders tables!", vbInformation
    Exit Sub

ErrHandle:
    MsgBox Err.Number & " - " & Err.Description
    Exit Sub

End Sub

此外,如果您需要具有表单,报表,宏和模块的MS Access GUI应用程序,则只有一个人(开发人员)需要具有完整的MS Access才能对数据库进行设计更改。同时,所有其他用户(用户)可以使用可通过Microsoft.com下载的免费运行时版本:2007 / 2010 / 2013 / 2016。只需确保数据库运行而无需导航窗格(即主菜单导航)。