我在MS Access中有一个非常大的表,它超出了Excel可容纳的行数。由于许可问题,我们无法使用访问作为外部数据源,但我们可以使用Excel存储表,直到我们可以使用几个月内即将推出的SQL Server。
我的任务是将桌子分成几个国家。
获取查询以获取所有不同的国家/地区是没有问题的。
Select distinct Country_Code
from AllCountries
但是我需要为每个国家获得一个结果集。
在来到这里之前,我去过几个试图解决这个问题的网站。 我知道这是一个基本的问题,不幸的是,距离场地10年,让我生锈。
我需要创建这些较小的表0r结果集并导出它们。我迷失了这个。
答案 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。只需确保数据库运行而无需导航窗格(即主菜单导航)。