2010-09-26 107 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來做這個工作。你所提到的只需要一個保存的傳遞查詢。