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

上传相关原始数据表,要对症下药。

rwd.zip (1.8 KB)


像这样的数据表比较多,这套程序运行下来大概有二十多个,每一个表的memo字段都不同。
2014-08-28 09:13
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
至少要2个以上

坚守VFP最后的阵地
2014-08-28 09:19
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
以下是引用sdta在2014-8-28 09:19:28的发言:

至少要2个以上

rwd.rar (2.09 KB)
item.rar (1.4 KB)



这里准备了连个附档,压缩文件里面有具体的数据表,还有用该数据表直接copy to d:\item type csv来导出的csv文件。




谢谢你的回复。
2014-08-28 09:25
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:10 
CLOSE DATABASES
SET DEFAULT TO 'D:\1\rwd\' &&DBF文件路径
n1=ADIR(arr1,'*.dbf')
FOR i1=1 TO n1
    file1=ARR1[i1,1]
    USE (file1) IN 0 ALIAS dbf1
    field_s=''
    FOR i2=1 TO FCOUNT('dbf1')
        IF TYPE(FIELD(i2,'dbf1'))='M'
            field_s=field_s+"Cast("+FIELD(i2,'dbf1')+" as varchar (254)) AS "+FIELD(i2,'dbf1')+","
        ELSE
            field_s=field_s+FIELD(i2,'dbf1')+","
        ENDIF
    ENDFOR
    field_s=LEFT(field_s,LEN(field_s)-1)
    SELECT &field_s. FROM DBF1 INTO CURSOR DBF2
    SELECT DBF2
    COPY TO (JUSTSTEM(file1))  TYPE CSV
    USE IN DBF1
    USE IN DBF2
ENDFOR
2014-08-28 10:07
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:60 
程序代码:
Close Databases 
If Adir(Adbf,"*.Dbf")<=0
   Return 
EndIf
For lnI=1 To Alen(Adbf,1)
    Use (Adbf[lnI,1])
    lnZds=AFields(Afld)
    Use In (Adbf[lnI,1])
    lcStr="Select "
    For lnJ=1 To lnZds
        lcStr=lcStr+Iif(Afld[lnJ,2]=="M","Cast("+Afld[lnJ,1]+" As C(254))"+" "+Afld[lnJ,1],Afld[lnJ,1]+" "+Afld[lnJ,1])+Iif(lnJ<lnZds,","," From (Adbf[lnI,1]) Into Cursor Temp")
    EndFor
    *=MessageBox(lcStr,64,"代码显示")
    =ExecScript(lcStr)
    copy to Sys(5)+Sys(2003)+"\"+JustStem(Adbf[lnI,1]) type csv
    Use In Temp
EndFor

坚守VFP最后的阵地
2014-08-28 10:24
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
15楼的代码是按数据表中有M型字段处理的,如果数据表中没有M型字段,应该加容错处理。自己完善吧。

坚守VFP最后的阵地
2014-08-28 10:54
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
收藏
得分:10 
生产类型和两个编号字段都不会太长吧
你在sql中设置的字段长度为多少



目前来看
这三个字段完全不需要这么长的长度
修改这三个字段的长度在254以内
在vfp临时表中就不会是备注字段了

个性太多,无法显示
2014-08-28 12:18
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 17 楼 taohua300
浮出水面了

坚守VFP最后的阵地
2014-08-28 12:27
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:10 
刚上线看见楼主的回复:本人认为,以上各位版主的帖子很说明问题。值得参考。7楼帖子不难懂,意思是,如果表内有数值型、字符型、时间型、备注型共存时,只要简单转换即可。如果备注型字段是超多254字节的大备注字段,并且也必须保证备注字段的格式不能改变时,所采用的方法。因为这不是从 dbf 文件直接导出,是导出的备注字段值。如果结合以上版主们的方法,扩展一下,可以对多备注字段,多文件进行‘全信息’的导出。(仅供参考)
2014-08-28 15:21
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:10 
关于将备注型字段保存为字符型数据,我有两点使用体会:
1. 将 memo 型字段转换为 char 型字段时,为了最大程序地保留 memo 字段的内容,先删除字段内容中的段落结束符chr(13)+chr(10)、制表符 chr(9)、多余空格等,然后再截取左边的254个字符。
2. 如果是将 dbf 转换为 excel 格式,可使用 vba 语句逐条记录、逐个字段地导出,此时,可考虑直接导出 memo 字段的内容。因为每个 excel 单元格最多可保存 32K 个字符,可以满足一般需求。
总体来说,可以把 memo 型字段看作是一个没有长度限制的 char 型字段。

泉城飞狐
2014-08-29 08:50
快速回复:数据表中的 memo 自动转化成为字符型字段。
数据加载中...
 
   



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

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