专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VFP

sql数据源不能更新解决思路

发布时间:2010-05-24 21:42:49 文章来源:www.iduyao.cn 采编人员:星星草
sql数据源不能更新
各位大位,我使用VFP9 + SQL 时,想把select 语句得到的Cursor设置为可更新,在Cursor数据变化时能自动更新服务器数据。但我把TempTable 设为可更新Cursor 后,更改数据服务器并不更新。代码如下,大家帮我指出错误吧。我是初学者,一切都是按网上搜索到的教程来的,所以自己也检查不出错误来,只好求助大家。

[code=VFP][/code]

* 连接远程数据库
  ……
* 读取用户新信息表
cSQL_CommandStr = "SELECT * from TableName WHERE 条件
nTemp = SQLEXEC(nHandle,cSQL_CommandStr,"TempTable") && 执行定义的操作


****************************** 本地表更新服务器表设置五步曲 *************************************
Select TempTable

* 第一步:此步骤设定的是数据源里(SQL Server)待更新的表名
CURSORSETPROP("TABLES", "zn_YongHuXinXi" , "TempTable" )

* 第二步:此步骤是设定关键字段的,这个关键字段是可更新Cursor的字段,而不是数据源里的字段。 
CURSORSETPROP("KEYFIELDLIST", "接收人" , "TempTable" )

* 第三步:此步骤设定的是在可更新Cursor里哪些字段的变动要被反映到数据源,即哪些字段时可更新的。 
CURSORSETPROP("UPDATABLEFIELDLIST", "接收人,发送人,发送时间,是否读取,信息文本" , "TempTable" )

* 第四步:此步骤设定SQL数据源字段与可更新Cursor字段的对应关系。 
CURSORSETPROP("UPDATENAMELIST", "接收人 TempTable.接收人, 发送人 TempTable.发送人,发送时间 TempTable.发送时间,是否读取 TempTable.是否读取,信息文本 TempTable.信息文本" , "TempTable" )

* 第五步:这个步骤是打开 SQL 发送开关,最关键的一步。 
CURSORSETPROP("SENDUPDATES",.T., "TempTable" )

*************************************** 维护可更新Cursor *******************************************

INSERT INTO TempTable (接收人,发送人,发送时间,是否读取,信息文本) ;
  SELECT 用户名 , (Pc_cYongHuMing) , (TTOC(DATETIME())) , "0" , (cXinXiTxt) FROM Temp WHERE X = .T.
SELECT Temp_YongHuXinXiTable
BROWSE

*断开连接
*SQLDISCONNECT(0)

------解决方案--------------------
SQL code
临时表更新SQL表的例子:
*------------------------

SQL服务器名:MyServer
SQL用户名:sa
SQL用户名:空

SQL中的表名:Kq_Yg
Kq_Yg表的字段:    Id Int 4
Name Char 10
Department Char 20

以下是FORM信息:

Form上有5个按钮,一个Grid,分别为:

1、增加(AddCmd),Click事件:
Select Temp1
Append Blank
Thisform.SaveCmd.Enabled=.T.
Thisform.Grid1.Refresh
Thisform.Grid1.ReadOnly=.F.
Thisform.Grid1.SetFocus

2、修改(EditCmd),Click事件:
Thisform.SaveCmd.Enabled=.T.
Thisform.Grid1.ReadOnly=.F.
Thisform.Grid1.SetFocus

3、删除(DelCmd),Click事件:
Delete
Thisform.Grid1.Refresh
Thisform.SaveCmd.Enabled=.T.

4、保存(SaveCmd),此按钮的Enabled值为.F.,Click事件:
Select Temp1
lSuccess=CursorSetProp("sendupdates",.T.,"Temp1")&&设置为可更新
m.lSuccess=Tableupdate(.T.,.F.) &&successful update
If m.lSuccess
    Messagebox("保存成功!",64,"信息提示")
    Thisform.SaveCmd.Enabled=.F.
    Thisform.Grid1.ReadOnly=.T.
Else
    Messagebox("保存失败!",16,"信息提示")
    Thisform.SaveCmd.Enabled=.T.
    Thisform.Grid1.ReadOnly=.F.
    Tablerevert(.T.)
Endif

5、退出(ExitCmd),Click事件:
SQLDisconnect(0) &&终止所有活动的连接。
Close Databases
Thisform.Release

6、Grid的ReadOnly值为.T.

7、Form的Init事件:
Close Databases
Set Safety Off
Public nhandle
nhandle=Sqlstringconnect("driver=SQL Server;server=MyServer;uid=sa;pwd=;database=MyServer") &&无需配ODBC
If nhandle<=0
    Messagebox("连接SQL Server 失败!!!",16, '错误信息')
    Cancel
Else
    Thisform.Grid1.RecordSource=Null
    Ac=SQLExec(nhandle,"Select * From Kq_Yg","Temp1")
    If Ac<0
        Messagebox("读取数据错误!",16, '错误信息')
        Cancel
    Endif
    Select Temp1
    Thisform.Grid1.RecordSource='Temp1'
    Thisform.Grid1.Refresh
    Set Multilocks On
    CursorSetProp("tables","Kq_Yg","Temp1")  &&设置临时表的更新目标表
    CursorSetProp("keyfieldlist","ID","Temp1")  &&设置临时表的关键字
    CursorSetProp("UpdateType",1,"Temp1")  &&设置用新数据更新旧数据
    CursorSetProp("updatablefieldlist","ID,Name,Department","Temp1")&&设置临时表的更新字段
    CursorSetProp("updatenamelist","ID Kq_Yg.ID ,Name Kq_Yg.Name,Department Kq_Yg.Department","Temp1")  &&&用Temp1中的相应字段更新Kq_Yg表
    CursorSetProp("wheretype",2)
    CursorSetProp("buffering",5)&&设置表缓冲
Endif
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: