2016-03-05 137 views
1

我在Oracle數據庫一個表 - 這將有兩列(項目名稱,視圖名)。在當您篩選項目名稱表,我們將獲得與該項目的所有視圖名的基礎上,再次那些視圖名稱,我們需要寫像select * from projectname$viewaname;查詢來獲取該視圖相關的數據。的MS Access查詢創建多個表

手動這樣做是需要長時間爲每一個項目。所以我的想法是創建MS ACCESS數據庫來爲選定的項目創建表並將它們導出爲excel文件到C:\temp folder

我需要你的幫助一次性創建多個表(使用查詢/傳遞查詢或任何其他選項)在MS Access從Oracle數據庫中獲取數據。

爲此,我創建了MS訪問文件,創建了一個鏈接表(其中我有項目和視圖名稱)。

之後,我創建了一個窗體,使用項目字段作爲鏈接表中的組合框和更新後的設置,例如此窗體應該在啓動時打開。

當我打開訪問文件時,會自動打開這個表單,並要求我輸入oracle數據庫用戶標識和密碼 - 輸入憑證後,組合框正在更新,我可以在該列表中選擇我的項目。

之後,我已經創建使用主表和基於在所述形式的選擇應用的過濾條件的一個查詢。現在我得到了像最終用戶選定項目的項目和視圖名稱的結果。

我需要你的幫助一樣,

現在我們在表中有數據如下圖所示。

Project | Viewname 
A  | A1 
A  | A2 
A  | A3 
A  | A4 
A  | A5 

SQL查詢來查看個人觀點的數據是:

select * from projectname$view_name;

例如:select * from A$A1;

項目名稱,視圖名稱,且行(查看),在視圖中的列是動態 - 將根據項目進行更改。

我需要你的幫助來動態創建多個表(每個視圖一個) - 請給我最好的選擇。

問候, 穆拉利

+0

你提的問題是過於寬泛。請縮小範圍,添加代碼並指定有問題的部分。感謝和問候, –

+0

我有ms訪問表。每行都與每個查詢。我的問題是如何運行每個行(每個查詢)通過(查詢/傳遞查詢)連接到數據庫,獲取查詢相關數據 - 使用該ms創建表訪問。然後移動到第二條記錄 - 通過該查詢 - 獲取 - 創建表......如同所有記錄所有表一樣......如何創建從現有表中循環查詢的表。請幫忙。 – user2039795

+0

你的問題聽起來像是對開發的要求。只是將其縮小到單個編程問題並向您展示導致問題的代碼(VBA,SQL,表定義等)。祝好, –

回答

0

考慮反覆遍歷記錄集中的項目/視圖名稱查詢並創建傳遞查詢,然後導出到Excel電子表格。

Public Sub ImportOracleProjectViews() 
    Dim db As Database, rst As Recordset, qdef As QueryDef 
    Dim constr As String, strSQL As String, mkTBL As String 

    Set db = CurrentDb 
    ' ENTER QUERY HOLDING PROJECT AND VIEW NAMES ' 
    Set rst = db.OpenRecordset("QUERYNAME") 

    ' DELETE TEMP QUERYDEF IF EXISTS ' 
    For Each qdef In db.QueryDefs 
     If qdef.Name = "temp" Then 
      db.QueryDefs.Delete ("temp") 
     End If 
    Next qdef 

    If rst.RecordCount = 0 Then Exit Sub 
    rst.MoveLast: rst.MoveFirst 

    ' LOOP THROUGH EACH RECORD OF RECORDSET ' 
    Do While Not rst.EOF 

     ' SQL STATEMENTS ' 
     strSQL = "SELECT * FROM " & rst!projectname & "$" & rst!viewname 

     ' ORACLE CONNECTION STRING ' 
     constr = "ODBC;Driver={Microsoft ODBC for Oracle};Server=myServerAddress;" _ 
           & "Uid=myUsername;Pwd=myPassword;" 

     ' PASS THRU QUERY ' 
     Set qdef = db.CreateQueryDef("temp") 
     qdef.Connect = constr 
     qdef.SQL = strSQL 
     qdef.Close 

     ' EXPORT TO MS EXCEL SPREADSHEET ' 
     DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, temp, _ 
      "C:\Path\To\Output\Folder\" & rst!projectname & "_" & rst!viewname & ".xlsx", _ 
      True 

     rst.MoveNext 
    Loop 

    rst.Close 

    Set rst = Nothing 
    Set qdef = Nothing 
    Set db = Nothing 

    MsgBox "Successfully imported views to local tables and " _ 
        & "Excel spreadsheets!", vbInformation 

End Sub 

資源

+0

您好Parfait,我得到運行時錯誤3010(表已存在) - 在這裏它是創建第一個表 - 導出第一個表和臨時視圖第一個表中的數據在那裏。但它不會移動到下一個表格。請幫忙。還有一件事是在導出到C:驅動器文件夾後,我不需要數據庫中的表格 - 我只需要輸出excel文件。 – user2039795

+0

跳過make table查詢(您必須先刪除之前的表)。查看更新,您只需將'temp' querydef輸出到電子表格。 – Parfait

+0

嗨Parfait,我得到了運行時錯誤2495 - 我檢查了谷歌和應用「」臨時像「臨時」 - 現在代碼正在運行,現在它顯示 - 運行時錯誤3146 - 表/視圖不退出。 – user2039795

0

你問多個問題,所以答案是相應地結構化:

爲了創建MS Access表中使用VBA參考下面的示例代碼段:

Public Sub CreateTableVBA() 
    Dim SQL As String 
    SQL = "CREATE TABLE ThisTable " & "(FirstName CHAR, LastName CHAR);" 
    DoCmd.RunSQL SQL 
End Sub 

爲了創建多個表,你應該有表名和SQL語句的對應陣列的陣列,如上所示的一個。然後可以循環通過使用VBA For-Next代碼塊陣列,運行DoCmd.RunSQL命令。

或者,而不是DoCmd.RunSQL你可以在VBA Database對象使用Execute()功能,如下面所示:

Sub CreateTableXSQL() 

    Dim dbs As Database 

    ' include the path to MyDb.mdb on your computer. 
    Set dbs = OpenDatabase([Path to MyDb.mdb]) 

    ' create a table SQL with two text fields. 
    dbs.Execute "CREATE TABLE ThisTable " & "(FirstName CHAR, LastName CHAR);" 

    dbs.Close 

End Sub 

希望這有助於。

+0

謝謝。我會試試這個。 – user2039795

+0

不客氣。祝你的項目好運。問候, –