Sql server 从访问表单调用SQL Server函数
我正在寻找一种在Access前端使用SQL Server函数的正确方法。用一种方法使用它相当简单——只需要调用函数,使用括号,瞧,准备好了。但我坚持另一个案子。如果有两个单独的功能:一个用于“编码”,另一个用于“解码”数据,该怎么办?可以在此处找到问题的背景:。我想在我的access应用程序中使用此示例,但如何在MS access窗体中执行两个单独的单向操作?当然,如果除了创建表单之外,还需要创建其他视图或任何其他层来实现这一点,我不是很固执,只是有点懒-我很乐意这样做。我假设您想用函数解码查询中的一些数据,在表单中显示解码的数据,在那里编辑,然后在保存数据的同时,用另一个函数将其重新编码 这在Access中的数据绑定表单中是不可能的。Access总是尝试将表单字段中输入的数据直接写入相应的表或查询字段。在这两者之间不可能进行任何数据处理(对编码函数的调用) 实现这一点的一种方法是使用未绑定的表单。Sql server 从访问表单调用SQL Server函数,sql-server,function,ms-access,Sql Server,Function,Ms Access,我正在寻找一种在Access前端使用SQL Server函数的正确方法。用一种方法使用它相当简单——只需要调用函数,使用括号,瞧,准备好了。但我坚持另一个案子。如果有两个单独的功能:一个用于“编码”,另一个用于“解码”数据,该怎么办?可以在此处找到问题的背景:。我想在我的access应用程序中使用此示例,但如何在MS access窗体中执行两个单独的单向操作?当然,如果除了创建表单之外,还需要创建其他视图或任何其他层来实现这一点,我不是很固执,只是有点懒-我很乐意这样做。我假设您想用函数解码查询
创建一个未绑定到任何记录源的表单,然后将查询中的数据读取到记录集中,并将记录集数据写入表单中的控件。要保存数据并读取控件的内容,请创建一条sql update语句,该语句调用您的编码函数并将数据保存到表中。您所描述的内容确实可以通过绑定到ODBC链接表的访问表单来完成。您需要做的是在表单上创建两个控件
--(在SQL Server Management Studio中创建表的代码)
创建表dbo.temperatures(
id INT标识主键,
观测日期时间,
tempC INT)
SQL Server中还有两个标量函数,用于将值从摄氏度转换为华氏度,反之亦然
CREATE函数dbo.fnCtoF(@tempC AS INT)返回INT
作为
开始
宣布@t为FLOAT;
设置@t=CONVERT(浮点,@tempC);
返回转换(INT,(@t*9/5)+32);
结束
及
CREATE函数dbo.fnFtoC(@tempF AS INT)返回INT
作为
开始
宣布@t为FLOAT;
设置@t=CONVERT(浮点,@tempF);
返回转换(INT,(@t-32)*5/9);
结束
在表单(绑定到链接表[dbo_temperatures])上创建
私有函数getFahrenheit(t作为变量)作为变量
如果为空(t),则
getFahrenheit=Null
其他的
Dim cdb作为DAO.Database,qdf作为DAO.QueryDef,rst作为DAO.Recordset
设置cdb=CurrentDb
设置qdf=cdb.CreateQueryDef(“”)
qdf.Connect=cdb.TableDefs(“dbo_温度”).Connect
qdf.SQL=“选择dbo.fnCtoF(&t&”)作为x”
qdf.ReturnsRecords=True
Set rst=qdf.OpenRecordset(dbOpenSnapshot)
getFahrenheit=rst!x
rst.关闭
设置rst=无
设置qdf=无
设置cdb=无
如果结束
端函数
及
私有函数(t作为变量)作为变量
如果为空(t),则
GetCelsium=Null
其他的
Dim cdb作为DAO.Database,qdf作为DAO.QueryDef,rst作为DAO.Recordset
设置cdb=CurrentDb
设置qdf=cdb.CreateQueryDef(“”)
qdf.Connect=cdb.TableDefs(“dbo_温度”).Connect
qdf.SQL=“选择dbo.fnFtoC(“&t&”)作为x”
qdf.ReturnsRecords=True
Set rst=qdf.OpenRecordset(dbOpenSnapshot)
getCelsius=rst!x
rst.关闭
设置rst=无
设置qdf=无
设置cdb=无
如果结束
端函数
然后,您可以使用表单的On Current事件填充华氏文本框
Private子表单_Current()
Me.txtempf.Value=getFahrenheit(Me.txtempc.Value)
端接头
以及“华氏温度”文本框的“更新后”事件来更新“摄氏温度”文本框
Private Sub txtempf_AfterUpdate()
Me.txtTempC.Value=getCelsius(Me.txtTempF.Value)
端接头
由于“摄氏度”文本框绑定到[tempC]字段,因此保存记录时,更改将写回表中。我不清楚您想做什么,也不清楚这里有什么问题。这就是我一直在寻找的。非常感谢你。