| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5478 人关注过本帖
标题:数据表中的 memo 自动转化成为字符型字段。
只看楼主 加入收藏
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:20 
数据表中的 memo 自动转化成为字符型字段。
我用的是下面的代码:

主要功能:导出sql中的数据表并保存为对应的csv格式的文件。

问题点:导出数据后发现有部分数据是memo型的。而针对memo型字段在copy to d:\hyz type csv 时被自动忽略掉。

程序代码:
PUBLIC m.name 
b =DATETIME()

SET DEFAULT TO SYS(5)-'\kq\prg\hyz'

nCon=SQLSTRINGCONNECT("driver=SQL Server;Server=192.168.1.250;Uid=xx;pwd=xx;database=xxx") 
CLOSE TABLES 
USE prg
SCAN FOR cfm ='y'
    m.prg=ALLTRIM(prrg)
    m.name=ALLTRIM(book)
    ndd=SQLEXEC(nCon,m.prg,m.name)
    COPY TO 'd:\hyz\'-m.name  TYPE CSV 
*    do (m.name) 
ENDSCAN
搜索更多相关主题的帖子: 数据表 
2014-08-27 17:13
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:0 
VFP9的Cast()试试
最多只能保存254个字符

坚守VFP最后的阵地
2014-08-27 17:42
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:0 
贴上MEMO中的内容看看,如果其中有回车换行,数据转换也不会完整的。

坚守VFP最后的阵地
2014-08-27 17:45
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
会被自动忽略掉?
2014-08-27 18:46
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
表中的 memo 型字段在直接复制导出时,很多类型的文件是行不通的。 可以考虑转换的方式,而不是直接复制的方式:比如:将 m.name 的 memo 字段值,以参数形式引出,再存放 ..


[ 本帖最后由 qingfameng 于 2014-8-27 22:38 编辑 ]
2014-08-27 21:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
memo字段实际上就是字符串,只不过是突破254字符限制的内存型字符串而已(字段型字符串才限制长度)。要转换为某种外部文件的格式,关键是对方的数据协议是否支持这种超长字符串数据。对转换技术来说,根本就没什么问题。

授人以渔,不授人以鱼。
2014-08-27 22:05
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
**( vfp 9.0.仅供参考其中的形式 没有导出题目,需要时可加上)
close all
trq=DATE()
create cursor bb(a1 i,a2 c(20),a3 t,a4 m)
insert into bb values(1001,'第一',trq+1,'备注文字_1')
insert into bb values(1002,'第二',trq+2,'备注文字_2')
insert into bb values(1003,'第三',trq+3,'备注文字_3')
insert into bb values(1004,'第四',trq+4,'备注文字_4')
**********************************************************

zsj=''
scan
 zsj=zsj+STR(a1)+',"'+a2+'","'+DTOS(a3)+'","'+a4+'"'
endscan
 go bottom
 replace a4 with zsj
 copy memo a4 to txt.csv
 close all
 modify file txt.csv type csv && 打开文件游览
 
 

[ 本帖最后由 qingfameng 于 2014-8-28 15:30 编辑 ]
2014-08-28 02:32
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
以下是引用sdta在2014-8-27 17:45:49的发言:

贴上MEMO中的内容看看,如果其中有回车换行,数据转换也不会完整的。



这里涉及到23张表都是一次性从SQL中导出来的,memo字段的内容各不相同。

数据不完整没关系,只要能取到数就行。

以下是引用TonyDeng在2014-8-27 22:05:36的发言:

memo字段实际上就是字符串,只不过是突破254字符限制的内存型字符串而已(字段型字符串才限制长度)。要转换为某种外部文件的格式,关键是对方的数据协议是否支持这种超长字符串数据。对转换技术来说,根本就没什么问题。


转换的函数是cast  (  原字段 as c(180)) .

但问题是这里涉及到23张表可能更多,能不能自动帮忙搜索字段,看看哪些是备注型的,然后我们用replace m.name set memo字段  = cast(memo字段 as c(120))


以下是引用qingfameng在2014-8-28 02:32:11的发言:

**(仅供参考其中的形式 vfp 9.0)
close all
trq=DATE()
create cursor bb(a1 i,a2 c(20),a3 t,a4 m)
insert into bb values(1001,'第一',trq+1,'备注文字_1')
insert into bb values(1002,'第二',trq+2,'备注文字_2')
insert into bb values(1003,'第三',trq+3,'备注文字_3')
insert into bb values(1004,'第四',trq+4,'备注文字_4')
**********************************************************

zsj=''
scan
 zsj=zsj+STR(a1)+',"'+a2+'","'+DTOS(a3)+'","'+a4+'"'
endscan
 go bottom
 replace a4 with zsj
 copy memo a4 to txt.csv
 close all
 modify file txt.csv && 打开文件游览
 
 


你好,谢谢你的回复,可是我比较笨,不一定明白,还请帮忙,谢谢。
2014-08-28 08:51
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:0 
上传相关原始数据表,要对症下药。

坚守VFP最后的阵地
2014-08-28 09:01
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:0 
可以根据AFIELDS()判断某字段为M型。

坚守VFP最后的阵地
2014-08-28 09:03
快速回复:数据表中的 memo 自动转化成为字符型字段。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017273 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved