2016-09-26 14 views
0

Excelで保持できる行の量を超える非常に大きなテーブルがMS Accessにあります。ライセンスの問題により、外部データソースとしてアクセスを使用することはできませんが、Excelを使用して数か月後にSQL Serverを使用できるようになるまでテーブルを格納できます。大きなテーブルを小さなテーブルに分割してエクスポートする

私は、テーブルを国に分割する任務があります。

すべての国を取得するためのクエリを取得することは問題ありません。

Select distinct Country_Code 
from AllCountries 

しかし、各国の結果セットを取得する必要があります。

私はここに来る前にこれを理解しようとしているいくつかのサイトに行ってきました。 私はそれが基本的な質問であることを知っています。残念なことに、脳卒中と野外から10年間は​​私を錆びさせてしまいました。

これらのより小さいテーブルを作成し、結果セットをエクスポートする必要があります。私はこの人に迷っています。

+0

ユーザーは今後数か月のうちにどのテーブルにアクセスする必要がありますか? Access 2016 Runtime(https://www.microsoft.com/en-us/download/details.aspx?id=50040)と呼ばれるAccessデータベースエンジンを自由に再配布してExcel内からクエリを使用することはできません必要に応じて?私は間違いなくこれを分割し、ユーザーが簡単に操作できる形式にすることを推奨したくありません。実際の目標は何ですか、どの程度のレベルですか? MySQLまたはPostgresSQLは、彼らが自由にライセンスされている一時的な時間のオプションですか? – Matt

答えて

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 
+0

それは魅力のように働いた、ありがとう! –

1

あなたの主張は完全に正しくないとして、あなたのセットアップを再考:

ライセンスの問題により、我々は/外部データ ソース

MS Accessの.MDBとしてアクセスを使用することはできません.accdbファイルは、ライセンスを必要とするMSAccess.exeプログラムに関係なく、任意のPCマシンで使用できます。 MS Accessの基礎となるテクノロジーは、通常はPCマシンにプリインストールされている一連のWindows .dllファイルであるJET/ACE SQL Engineです。アクセスはデフォルトでこのエンジンを使用する単なるGUIです。

データ保管と整合性のためにフラットファイルExcelワークシートではなく、実際のリレーショナルデータベース(.mdb/.accdb)ファイルを引き続き使用してください。 Accessを持たないマシンでは、ファイルはいずれのプログラムでも直接開くことができない空のアイコンで表示されますが、ODBC/OLEDB接続またはCOMオブジェクトを介してExcelや他のランゲージ(PHP、R、Python、Java)またはDAO。実際、Windowsコンピュータは、完全な本格的なAccessプログラムなしで.mdb/.accdbファイルを作成できます。以下の図のためのExcelマクロです:

(DAO付き)DATABASEをCREATE

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付き)TABLESさらに

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 

をCREATE MS AccのGUIアプリケーションが必要ですフォーム、レポート、マクロ、およびモジュールを使用すると、データベースに設計変更を加えるには、1人の開発者だけが本格的なMS Accessを持つ必要があります。一方、他のすべてのユーザーは、無料のランタイムバージョンをMicrosoft.com経由でダウンロードすることができます:2007/2010/2013/2016ナビゲーションペイン(メインメニューのナビゲーション)を使わずにデータベースを起動させてください。

関連する問題