主题:发现一个问题,求证?!!
hw2007name
[专家分:4790] 发布于 2009-03-22 22:40:00
VFP中创建的MDB数据库远程视图的日期或日期时间型字段好像不能为CTOD("")或CTOT("")值,如果其字段实在没有确定的数据,则都应设置此字段值为NULL,如果像VFP中设置为CTOD("")或CTOT("")值,VFP中是通过了,但当TABLEUPDATE()时会失败,查MESSAGE()值为"ODBC 的数据类型不匹配",如果字段值为NULL,则TABLEUPDATE()时就通过,不知道各位网友有没有遇到此类问题,反正我现在是遇到的这个问题是如上所说才能实现,如果有不同意见的朋友,请发表一下见解,相时指点一下兄弟,在此不胜感激!
说老实话,如果要把所有没有数据的日期或日期时间字段设置为NULL才能保存的话,我的程序改动起来有点麻烦,况且这个程序是几年前我编写老程序了,我不是为了解决使用此程序的客户问题,我真是不想再去看这个程序了,因为代码全是以前自己想的笨办法,要修改则要涉及全程,真是头都大了.
回复列表 (共3个回复)
沙发
菜鸭 [专家分:5120] 发布于 2009-03-23 07:46:00
远程视图中的语句要用服务器端的语言
access要用vba
sqlserver要用t-sql
等等
板凳
hw2007name [专家分:4790] 发布于 2009-03-23 10:42:00
难道这样不行吗?
CREATE DATABASE 临时数据库
CREATE CONNECTION 命名连接 CONNSTRING ....&&建立MDB数据库的命名连接
CREATE SQL VIEW 视图名 REMOTE CONNECTION 命名连接 AS SELECT * FROM "MDB中的表"
&&这个MDB数据表中就有日期或日期时间型字段
use 视图名 in 0
CURSORSETPROP("UpdateType",1,视图名)
CURSORSETPROP("AllowSimultaneousFetch",.F.,视图名)
CURSORSETPROP("Buffering",5,视图名)
CURSORSETPROP('KeyFieldList',"RID",视图名)
CURSORSETPROP('SENDUPDATES',.T.,视图名)&&设置可以用视图更新远程数据
insert into 视图名 (产品名,生成日期,入库日期,出库日期...) ;
VALUES ("产品1",ctot("^2009-01-03"),ctot(""),ctot("").....)
if TABLEUPDATE(1,.T.,视图名)
**保存成功
else
**保存失败
TABLEREVERT(.T.,视图名)&&放弃对缓冲行、缓冲表或临时表的修改
messagebox(message(),64,"")
endif
**为什么上面会失败,而把INSERT语句修改一下就可以:
insert into 视图名 (产品名,生成日期,入库日期,出库日期...) ;
VALUES ("产品1",ctot("^2009-01-03"),null,null.....)
**日期或日期时间没数据就设置为NULL则保存就成功,这是为什么?
3 楼
CCB2000 [专家分:690] 发布于 2009-03-23 10:58:00
* SQL数据库日期空值
PUBLIC m.p_sql_emptydate
m.p_sql_emptydate=DATE(1900,1,1)
我来回复