HI,
我正在使用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")
以这种方式表示INSERT语句将被调用2次:) 有人知道什么是正确的方法吗?我已经没有想法了
编辑:我正在使用最新的psqlODBC驱动程序
答案 0 :(得分:1)
假设您有一个保存的pass-though查询,那么您可以动态修改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。所以,第一个例子应该运行良好并注意我甚至没有声明一个变量来使这个工作。您提到的只是需要一个保存的传递查询。
答案 1 :(得分:0)
似乎下面的功能可以解决问题......不确定性能虽然:)
'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