Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从访问表单调用SQL Server函数_Sql Server_Function_Ms Access - Fatal编程技术网

Sql server 从访问表单调用SQL Server函数

Sql server 从访问表单调用SQL Server函数,sql-server,function,ms-access,Sql Server,Function,Ms Access,我正在寻找一种在Access前端使用SQL Server函数的正确方法。用一种方法使用它相当简单——只需要调用函数,使用括号,瞧,准备好了。但我坚持另一个案子。如果有两个单独的功能:一个用于“编码”,另一个用于“解码”数据,该怎么办?可以在此处找到问题的背景:。我想在我的access应用程序中使用此示例,但如何在MS access窗体中执行两个单独的单向操作?当然,如果除了创建表单之外,还需要创建其他视图或任何其他层来实现这一点,我不是很固执,只是有点懒-我很乐意这样做。我假设您想用函数解码查询

我正在寻找一种在Access前端使用SQL Server函数的正确方法。用一种方法使用它相当简单——只需要调用函数,使用括号,瞧,准备好了。但我坚持另一个案子。如果有两个单独的功能:一个用于“编码”,另一个用于“解码”数据,该怎么办?可以在此处找到问题的背景:。我想在我的access应用程序中使用此示例,但如何在MS access窗体中执行两个单独的单向操作?当然,如果除了创建表单之外,还需要创建其他视图或任何其他层来实现这一点,我不是很固执,只是有点懒-我很乐意这样做。

我假设您想用函数解码查询中的一些数据,在表单中显示解码的数据,在那里编辑,然后在保存数据的同时,用另一个函数将其重新编码

这在Access中的数据绑定表单中是不可能的。Access总是尝试将表单字段中输入的数据直接写入相应的表或查询字段。在这两者之间不可能进行任何数据处理(对编码函数的调用)

实现这一点的一种方法是使用未绑定的表单。
创建一个未绑定到任何记录源的表单,然后将查询中的数据读取到记录集中,并将记录集数据写入表单中的控件。要保存数据并读取控件的内容,请创建一条sql update语句,该语句调用您的编码函数并将数据保存到表中。

您所描述的内容确实可以通过绑定到ODBC链接表的访问表单来完成。您需要做的是在表单上创建两个控件

  • 绑定到链接表中字段的隐藏控件,以及
  • 用户可以与之交互的可见未绑定控件
  • 例如,假设您有一个名为[dbo_Temperations]的ODBC链接表,该表指向以摄氏度为单位存储温度值的SQL Server表:

    --(在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])上创建

  • 名为“txtTempC”的隐藏文本框绑定到[tempC]字段,以及
  • 名为“txtempf”的可见未绑定文本框
  • 表单有两个专用VBA函数来调用SQL Server函数

    私有函数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]字段,因此保存记录时,更改将写回表中。

    我不清楚您想做什么,也不清楚这里有什么问题。这就是我一直在寻找的。非常感谢你。