Ms access Ms Access前端,PostgreSQL后端高效插入到。。。返回。。。陈述
嗨 我使用MS Access作为PostgreSQL数据库的前端。 我已经走到了死胡同: 如何获取passthrough SQL INSERT语句的返回值 我试过这样的方法:Ms access Ms Access前端,PostgreSQL后端高效插入到。。。返回。。。陈述,ms-access,postgresql,vba,Ms Access,Postgresql,Vba,嗨 我使用MS Access作为PostgreSQL数据库的前端。 我已经走到了死胡同: 如何获取passthrough SQL INSERT语句的返回值 我试过这样的方法: strSQL = "INSERT INTO someTable (col1, col2) VALUES ('val1', 'val2') RETURNING col0" 'Create passtrhough query dynamically (another function) CreateSPT ("some_tem
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次:)
有人知道什么是正确的方法吗?我已经没有主意了
编辑:我正在使用最新的PSQLDBC驱动程序似乎下面的函数实现了这个功能。。。但不确定性能:)
'Insert-SQL passthrough
'将所有insert语句传递给此处
函数ISPT(SQLString)
作为字符串的Dim strODBCString
Dim cn作为新的ADODB.连接
将rs设置为新ADODB.Recordset
结果很长
strODBCString=_
“DRIVER={PostgreSQL Unicode};DATABASE=“&settings_getDBName()&”_
“SERVER=“&settings\u getServerAddress&_
“PORT=“&settings\u getServerPort&_
设置\u getConnStrParams
cn.开放式strODBCString
rs.opensqlstring,cn
'返回值
结果=rs.字段(0).值
"清理",
如果rs.state已关闭,则rs.Close
设置rs=无
如果cn.state adstate已关闭,则cn.Close
设置cn=Nothing
ISPT=结果
端函数
下面的函数似乎起到了作用。。。但不确定性能:)
'Insert-SQL passthrough
'将所有insert语句传递给此处
函数ISPT(SQLString)
作为字符串的Dim strODBCString
Dim cn作为新的ADODB.连接
将rs设置为新ADODB.Recordset
结果很长
strODBCString=_
“DRIVER={PostgreSQL Unicode};DATABASE=“&settings_getDBName()&”_
“SERVER=“&settings\u getServerAddress&_
“PORT=“&settings\u getServerPort&_
设置\u getConnStrParams
cn.开放式strODBCString
rs.opensqlstring,cn
'返回值
结果=rs.字段(0).值
"清理",
如果rs.state已关闭,则rs.Close
设置rs=无
如果cn.state adstate已关闭,则cn.Close
设置cn=Nothing
ISPT=结果
端函数
假设您有一个已保存的传递查询,那么您可以动态修改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来实现这一点。如上所述,您只需要一个保存的传递查询。假设您有一个保存的传递查询,那么您可以动态修改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来实现这一点。如前所述,您只需要保存一个传递查询