2016-03-05 140 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

不客气。祝你的项目好运。问候, –