我在oracle数据库中有一个表 - 它有两列(项目名称,视图名称)。在该表中,当您过滤项目名称时,我们将获得与该项目相关的所有视图名称,再次基于这些视图名称,我们需要编写select * from projectname$viewaname;
之类的查询来获取该视图相关数据。
手动执行此操作需要很长时间才能完成每个项目。所以我的想法是创建 MS ACCESS 数据库来为所选项目创建表格,并将它们作为 excel 文件导出到C:\temp folder
。
我需要你帮助在MS Access从oracle数据库中获取数据时一次创建多个表(使用查询/直通查询或任何其他选项)。
为此,我创建了MS访问文件,创建了一个链接表(我有项目和视图名称)。
之后我创建了一个表单,使用项目字段作为链接表中的组合框和更新的设置,例如,此表单应该在启动时打开。
当我打开访问文件时,自动打开这个表单并要求我输入oracle数据库用户ID和密码 - 输入凭据后,组合框正在更新,我可以在该列表中选择我的项目。
之后,我使用主表创建了一个查询,并根据表单中的选择应用了过滤条件。现在我得到了最终用户选择项目的项目和视图名称等结果。
我需要你的帮助,
现在我们的数据如下表所示。
Project | Viewname
A | A1
A | A2
A | A3
A | A4
A | A5
查看单个视图数据的SQL查询是:
select * from projectname$view_name;
ex:select * from A$A1;
项目名称,视图名称和行数(视图),视图中的列是动态的 - 将根据项目进行更改。
我需要你的帮助来动态创建多个表(每个视图一个) - 请建议我最好的选择。
此致 穆拉利
答案 0 :(得分:0)
您提出了多个问题,因此答案的结构相应:
要使用VBA创建MS Access Table,请参阅以下示例代码段:
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
命令。
或者,您可以在VBA DoCmd.RunSQL
对象上使用Execute()
函数代替Database
,如下所示:
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
希望这可能会有所帮助。
答案 1 :(得分: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
<强>资源强>