Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

如何使用sql的存储过程

汪武龍  发表于:2009-05-07 11:36:25  
复制

查到以前有人問過以下問題,因看不到答案,老師能否再解答一次?

 

在ACCESS中如何使用使用SQL SEVER中的存储过程?并将存储过程作为输入窗体的数据来源(即存储过程返回的记录集可以追加新记录也可以修改已经存在的记录)!

 

Top
竹笛 发表于:2009-05-12 10:58:33

以下为朱亦文提供的回复,代为上传:
以下示例使用 CreateQueryDef 和 OpenRecordset 方法以及 SQL 属性,查询 Microsoft SQL Server 示例数据库 Pubs 中的书名表,并返回最畅销书籍的书名和书名标识符。然后查询作者表,并指示用户根据每个作者的版税份额向其发送红利支票(总红利为 ¥1,000,每个作者应收到该金额的一定份额)。

Visual Basic for Applications
Sub ClientServerX2()

   Dim dbsCurrent As Database
   Dim qdfBestSellers As QueryDef
   Dim qdfBonusEarners As QueryDef
   Dim rstTopSeller As Recordset
   Dim rstBonusRecipients As Recordset
   Dim strAuthorList As String

   ' Open a database from which QueryDef objects can be
   ' created.
   Set dbsCurrent = OpenDatabase("DB1.mdb")

   ' Create a temporary QueryDef object to retrieve
   ' data from a Microsoft SQL Server database.
   Set qdfBestSellers = dbsCurrent.CreateQueryDef("")
   With qdfBestSellers
      ' Note: The DSN referenced below must be configured to
      '       use Microsoft Windows NT Authentication Mode to
      '       authorize user access to the Microsoft SQL Server.
      .Connect = "ODBC;DATABASE=pubs;DSN=Publishers"
      .SQL = "SELECT title, title_id FROM titles " & _
         "ORDER BY ytd_sales DESC"
      Set rstTopSeller = .OpenRecordset()
      rstTopSeller.MoveFirst
   End With

   ' Create a temporary QueryDef to retrieve data from
   ' a Microsoft SQL Server database based on the results from
   ' the first query.
   Set qdfBonusEarners = dbsCurrent.CreateQueryDef("")
   With qdfBonusEarners
      ' Note: The DSN referenced below must be configured to
      '       use Microsoft Windows NT Authentication Mode to
      '       authorize user access to the Microsoft SQL Server.
      .Connect = "ODBC;DATABASE=pubs;DSN=Publishers"
      .SQL = "SELECT * FROM titleauthor " & _
         "WHERE title_id = '" & _
         rstTopSeller!title_id & "'"
      Set rstBonusRecipients = .OpenRecordset()
   End With

   ' Build the output string.
   With rstBonusRecipients
      Do While Not .EOF
         strAuthorList = strAuthorList & "  " & _
            !au_id & ":  $" & (10 * !royaltyper) & vbCr
         .MoveNext
      Loop
   End With

   ' Display results.
   MsgBox "Please send a check to the following " & _
      "authors in the amounts shown:" & vbCr & _
      strAuthorList & "for outstanding sales of " & _
      rstTopSeller!Title & "."

   rstTopSeller.Close
   dbsCurrent.Close

End Sub



竹笛 发表于:2009-05-12 10:58:54

朱亦文(23699869)  10:40:45
如果在窗体中使用,并绑定窗体的话
可以在窗体的加载事件中来处理这个
 
朱亦文(23699869)  10:46:14
Private Sub Form_Load()
   Dim sql As String
   sql = "exec " & "yourProcedure " & _
      "参数1, 参数2, ..."
  
   Dim qry As DAO.Qurey
   Set qry=CurrentDB().CreateQueryDef("")
   qry.Connect = "ODBC;DATABASE=yourDatabase;DSN=yourDNS"
   qry.SQL = sql
   Set Me.Recordset = qry.OpenRecordset()
End Sub


朱亦文(23699869)  10:47:21
这样就可以执行存储过程并返回记录集,同时绑定到窗体

 

朱亦文(23699869)  10:50:44
其中的关键
Set qry = CurrentDB().CreateQueryDef("")
表示创建一个临时查询
而通过
qry.Connect="ODBC;..."
表示是一个传递查询



总记录:2篇  页次:1/1 9 1 :