2010-09-26 72 views
1

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

回答

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 
1

假设你有一个保存的传递查询,然后您可以即时修改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来做这个工作。你所提到的只需要一个保存的传递查询。