Ms Access前端,PostgreSQL后端高效INSERT INTO ... RETURNING ...语句
问题描述:
HI,Ms Access前端,PostgreSQL后端高效INSERT INTO ... RETURNING ...语句
我使用MS Access作为PostgreSQL数据库的前端。 而我已经陷入死胡同:
我将如何获得传递SQL INSERT语句的返回值?
我想是这样的:
strSQL = "INSERT INTO someTable (col1, col2) VALUES ('val1', 'val2') RETURNING col0"
'Create passtrhough query dynamically (another function)
CreateSPT ("some_temp_query", strSQL)
idvalue = DLookup("col0", "some_temp_query")
Apparenty这样的INSERT语句将被调用2次:) 有谁知道什么是正确的方法是什么?我已经江郎才尽
编辑:我使用的是最新的驱动程序psqlODBC
答
似乎低于功能做的伎俩...不知道有关性能虽然:)
'Insert-SQL passthroug
'Pass here all the insert statements
Function ISPT(SQLString)
Dim strODBCString As String
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim result As Long
strODBCString = _
"DRIVER={PostgreSQL Unicode};DATABASE=" & settings_getDBName() & _
";SERVER=" & settings_getServerAddress & _
";PORT=" & settings_getServerPort & _
settings_getConnStrParams
cn.Open strODBCString
rs.Open SQLString, cn
'return value
result = rs.Fields(0).Value
'Cleanup
If rs.state <> adStateClosed Then rs.Close
Set rs = Nothing
If cn.state <> adStateClosed Then cn.Close
Set cn = Nothing
ISPT = result
End Function
答
假设你有一个保存的传递查询,然后您可以即时修改sql,并以这种方式返回值。下面的代码不需要声明任何变量即可运行。
With CurrentDb.QueryDefs("qryPassReturn")
.SQL = "INSERT INTO someTable (col1, col2) VALUES ('val1', 'val2') RETURNING col0"
Debug.Print .OpenRecordset()(0)
End With
我想你可以声明reocrdset接收返回值,并转到:
Dim rstReturn As DAO.Recordset
With CurrentDb.QueryDefs("qryPassReturn")
.SQL = "INSERT INTO someTable (col1, col2) VALUES ('val1', 'val2') RETURNING col0"
Set rstReturn = .OpenRecordset
End With
Debug.Print rstReturn(0)
所以,你可以通过SQL和返回的值将显示为标准reocrdset。所以,第一个例子应该运行良好,并注意我甚至没有声明一个varialbe来做这个工作。你所提到的只需要一个保存的传递查询。