搜索
首页 电脑/网络 软件

VFP中 怎么用SQL语言创建一个视图 ??

全部回答

2006-07-02

0 0

    网络摘抄,仅供参考!!!你可以用 VFP 后端开始编写客户/服务器应用程序直到决定使用 MS SQL Server, 或 Oracle, 或 Informix, 或 Sybase, 或 DB/2 等等。
   第一步。 基于视图的数据输入表单 在来到 VFP 客户/服务器应用程序的数据输入表单时, 你可以用 SQL Pass-through (SPT), 它简单的通过 ODBC 传递一个 SQL 串到数据源, 也可以使用远程视图, 这就意味着 DBC 中储存的 SQL 语句生成临时表产生的效果必需象 VFP 自己的表。
     SPT 将保存它的结果集到一个本地游标中, 因此你必需遍历表单上的控件并逐个绑定它们(例如, thisform。txtCustomer。Value = stomer)。
   当然, 要更新服务器需要由你自己创建适当的 SQL Update, Insert 和 Delete 语句, 不必提及也必须编码的多用户冲突检查 -- 相当乏味的, 容易出错的任务。   这是典型的在Visual Basic 处理事情的方法(因此你知道在VFP中必定有更好的办法,呵呵…)。
   在另一方面,远程视图让人不可相信地易于处理。 你所需要做的只是创建一个与表结构相同的视图, 打开视图(执行 SQL Select), 用操作 FoxPro 本地表相同的方法操作它所创建的临时表, 然后发布 TableUpdate 命令。
     TableUpdate 自动为你创建 SQL Update, SQL Insert 和SQL Delete 语句并传递它们到你的工作站上的 ODBC 驱动管理器。 ODBC 驱动管理器用 你已选定的ODBC 驱动程序来翻译 SQL 为后端可理解的语法。
   它是如此简单。   因此根据以下理由,我荐议数据输入表单使用远程视图: 一个代码集。 相同的代码集可以处理 VFP 表或 SQL Server上的远程视图。 因此你只需要本地视图或远程视图。
   性能。 在多种方法中, 视图可以快于 SPT ,因为 TableUpdate (一个低级 VFP 函数) 自动为你生成 SPT 代码。   你自己生成SQL update 和执行代码占用的时间将比 TableUpdate 多。
   如果你考虑 TableUpdate 到底做了多少  扫描改变了的缓冲, 决定更新类型, 读取视图属性, 生成批处理 SQL 语句, 传递它们到 ODBC 驱动管理器, 返回一个成功/失败标志, 并清除修改缓存  我相信你同意它干得比 SPT 好。
     以上所有处理没有语法错误。 视图属性提供额外了多于SPT 的功能。 例如, 要模仿一个 5个计数的 BatchUpdate, 你需要在传递它们到 ODBC 前,串接5个用逗号分开的 SQL 语句。
   SPT 在客户/服务器程序中,也有一个非常重要的地方; 我将在第三步中作更多的描述。   关于本地视图和远程视图的基本用途的更多信息,参阅 VFP 开发者指南。 第二步。
   所有与数据相关的命令将通过一个函数执行 转换应用程序到客户/服务器时的最困难的地方是你的代码中的类似于 SQL 语句, Zap, Pack, Reindex, Seek这样的硬编码的数据访问命令。
     换句话说, 你的程序是不是象以下所示一样? Function PurgeOrders * 该函数清除 (删除) 传递日期前已发运的订单。 Lparameter dShipDate Local lcMsg Select Count(*) as OrderCnt from Orders ; Where ShipDate <= dShipDate Into Cursor tcPurge If _Tally = 0 lcMsg = "没有要清除的订单。
    " Else Delete from Orders Where ShipDate <= dShipDate lcMsg = Trim(Str(_Tally)) + ; " 订单已从系统中清除。
  " Endif MessageBox(lcMsg) EndFunc 这种类型的 SQL 语句仅在能在系统中找到表时可以很好的工作。   在客户/服务器的世界中, 你通过连接句柄与数据源通信。
   对于视图, 远程连接 Create SQL View 的 子句允许视图访问远程数据。 而且对于 in-line SQL, FoxPro 函数 SQLExec() 用于通过 ODBC 传递 SQL 语句到服务器。
     以生错误时它返回 1,成功时返回 1, 如果有一个异步查询等待完成则返回0。 作为例子, 以下是如何用 SQL Pass-through 获取一个指定客户的销售订货: llSuccess = SQLExec(goEnv。
  nHandle, ; "Select * From ORDERS Where Customer = ?cCustomer",; "tcOrders") > 0 如果你为PurgeOrders中的SQL语句使用了封装函数, 那么在对于 SQL Server 上的数据你只能有条件的使用它, 相对于在文件服务器或本地工作站上的数据。
     你应当创建一个只包含该函数的类来使它访问后端独立数据。 以下是重写后客户/服务器方式的 PurgeOrders 函数: Function PurgeOrders * 该函数清除 (删除) 传递日期前已发运的订单。
   Lparameter dShipDate Local lcSQLStr lcSQLStr = "Select Count(*) as OrderCnt " + ; "from Orders " + ; "Where ShipDate <= ?dShipDate" This。
    SQLExecute(lcSQLStr, "tcPurge") If Reccount("tcPurge") = 0 lcMsg = "没有要清除的订单。
  " Else lcSQLStr = "Delete from Orders ; Where ShipDate <= ?dShipDate" This。  SQLExecute (lcSQLStr) lcMsg = Trim(Str(Reccount("tcPurge"))) ; + " 订单已从系统中清除。
  " Endif MessageBox(lcMsg) EndFunc。  。

类似问题换一批

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
软件
程序设计
电脑装机
操作系统/系统故障
硬件
笔记本电脑
百度
互联网
反病毒
软件
软件
多媒体软件
系统软件
办公软件
网络软件
图像处理软件
举报
举报原因(必选):
取消确定举报