我在Excel中有一些东西从没有DSN的Oracle数据库返回我的表:
With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DRIVER={Microsoft ODBC for Oracle};CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" & IP1 & ")(PORT=XXXX))" & _
"(CONNECT_DATA=(SERVICE_NAME=" & SvcNm & ")));" & _
"UID=" & UserName & ";" & _
"PWD=" & PassWord & " & ";", Destination:=Range("A1"))
.Sql = strSQL
.FieldNames = False
.RefreshStyle = xlOverwriteCells
.RowNumbers = False
.FillAdjacentFormulas = False
.RefreshOnFileOpen = False
.HasAutoFormat = False
.BackgroundQuery = False
.TablesOnlyFromHTML = True
.Refresh BackgroundQuery:=True
.SavePassword = False
.SaveData = True
.Delete
End With
这可以帮助我了解我所追求的目标。但如果我想在Access中使用类似的方法,我试过这个:
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim rs As DAO.Recordset
Set db = CurrentDb
Set qdf = db.CreateQueryDef("")
qdf.Connect = "ODBC;DRIVER={Microsoft ODBC for Oracle};CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" & IP & ")(PORT=XXXX))(CONNECT_DATA=(SERVICE_NAME=" & svcname & ")));" & _
"Uid=" & Username & ";PWD=" & password &";"
qdf.Sql = "---some query"
qdf.ReturnsRecords = True
Set rs = qdf.OpenRecordset
我最终得到的错误是:
我可以在这里找到任何东西,或者Access中的查询表没有相应的东西吗?
答案 0 :(得分:0)
我建议你创建一个传递查询,让它工作。您可以创建+运行PT查询而无需任何代码。使用Access UI获取100%的PT查询,然后尝试代码。
所以创建PT查询。当您在Access UI中单击该PT查询时它是否有效?
一旦(并且仅在此之后)您可以使用此查询,那么您可以使用以下代码运行该PT查询:
<record id="my_rule_date_foo" model="ir.rule">
<field name="name">foo bar</field>
<field name="model_id" ref="model_my_foo"/>
<field name="domain_force">
[('many2one_field.the_limit_date','≥', 'what_to_put_here_?')]
</field>
<field name="groups" eval="[(4, ref('group_peff'))]"/>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="False"/>
<field name="perm_unlink" eval="False"/>
如果你需要修改oracle查询的原始SQL,那么你可以去:
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("qryPassR")
如果您想执行存储过程,请转到
Dim rst As DAO.Recordset
With CurrentDb.QueryDefs("qryPassR")
.SQL = "select * from tblHotels"
Set rst = .OpenRecordset
End With
因此,一旦您创建了一个正在运行的PT查询,那么您可以在上面的代码中反复使用它。因此,无需在代码中放置连接字符串 - 只需创建PT查询,它将为您保存+管理连接字符串。
答案 1 :(得分:0)
尝试使用Driver = Microsoft ODBC for Oracle;而不是Driver = {Microsoft ODBC for Oracle}。后者是ADO格式。