注册 登录
编程论坛 VFP论坛

数据导入后异常

sarge_xp 发布于 2021-04-05 11:02, 3535 次点击
从考勤机下载的数据格式为XLS,放在程序指定目录后,用程序导入后,发现日期数据与XLS明显不同,又找不出什么原因,表的相关字段类型都换过了,不知道哪出错了。[code]
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
18 回复
#2
sdta2021-04-05 11:21
EXCEL表中的数据如何导入DBF的
1、EXCEL中另存为DBF
2、单独一条命令方式导入VFP
3、编程方式导入VFP
请选择一项
最好的解决方法,是在EXCEL数据导出前,将时间字段的 时间 类型,转换为 文本 类型
#3
sdta2021-04-05 11:32
在EXCEL中试试将 07:56:28 前面加个单引号
'07:56:28
#4
sdta2021-04-05 12:52
只有本站会员才能查看附件,请 登录
#5
sdta2021-04-05 12:52
只有本站会员才能查看附件,请 登录
#6
sarge_xp2021-04-05 13:59
回复 2楼 sdta
方式一行不通的,将来操作的人只是个文员,哪有什么DBF或存为文本的概念?用户只想将下载的XLS数据文件存到指定的目录下,通过我们设计的click,一下将数据汇总,进行其它统计;方式二用什么命令呢 ?我用的是方式三,各种办法尝试了,包括修改dbf时间字段的属性,都没有成功。
#7
sdta2021-04-05 15:44
解决方案:
将EXCEL文件另存为 以制表符分隔的文本文件,再导入VFP表中
CJ.DBF表中 时间 字段数据类型改为字符型,时间(TIME)在VFP中本身也是字符型
代码如下:
程序代码:
CLOSE DATABASES
oExcel = CreateObject("Excel.Application")
WITH oExcel
    .WorkBooks.Open(SYS(5) + SYS(2003) + "\0326.xls")
    .DisplayAlerts = .F.
    .ActiveWorkbook.Saveas(SYS(5) + SYS(2003) + "\0326.Txt", -4158)  && 保存为 以制表符分隔的文本文件
    .ActiveWorkbook.Close
    .DisplayAlerts = .T.
    .Quit
ENDWITH
RELEASE oExcel
USE cj
ZAP
APPEND FROM 0326.TXT DELIMITED WITH TAB
BROWSE
ERASE 0326.txt


[此贴子已经被作者于2021-4-5 15:49编辑过]

#8
sarge_xp2021-04-05 17:14
回复 7楼 sdta
调试通过了,多谢大神! VFP之前用了2年多了,看看大神提供的源码还是有点费劲,可见大神功底深厚啊!


有一点还是不明白,对于关系型数据库,VFP的功能这么强大,微软怎么要放弃 ?它的换代产品又是什么  ?
#9
sdta2021-04-05 17:21
以下是引用sarge_xp在2021-4-5 17:14:33的发言:

调试通过了,多谢大神! VFP之前用了2年多了,看看大神提供的源码还是有点费劲,可见大神功底深厚啊!


有一点还是不明白,对于关系型数据库,VFP的功能这么强大,微软怎么要放弃 ?它的换代产品又是什么  ?

有兴趣才想研究,只是应付工作那就另说了。只要有VFP可以运行的平台,VFP就不会被淘汰。做为中小型数据库,VFP还是不错的。
#10
sdta2021-04-05 17:28
只要EXCEL导入VFP数据异常,最安全的方法就是将EXCEL中的数据另存为以制表符分隔的文本文件。自EXCEL2007开始,EXCEL中就没有另存为DBF格式的功能了,如果想将EXCEL中的数据导入VFP,只有将数据另存为某一种VFP可以接受的数据格式了,文本文件应该是首先。
#11
sarge_xp2021-04-05 23:57
以下是引用sdta在2021-4-5 17:21:05的发言:


有兴趣才想研究,只是应付工作那就另说了。只要有VFP可以运行的平台,VFP就不会被淘汰。做为中小型数据库,VFP还是不错的。

但在就业方面,就不容易了,五年的经验,不及1年的JAVA就业机会多,唉!
#12
wengjl2021-04-06 09:52
只有本站会员才能查看附件,请 登录

换一个思路:把CJ的时间、编号字段设置为字符型,再增加3个,转换一下,不就解决了。如上图
#13
ycvf2021-04-06 12:20
只有本站会员才能查看附件,请 登录

先转为文本文件,导入后再增加楼上说的字段如上图。怎么实现楼上的转换?
#14
wengjl2021-04-06 14:14
REPLACE 时 WITH VAL(SUBSTR(时间,6,AT(':',时间,1)-6)) ALL
REPLACE 分 WITH VAL(SUBSTR(时间,AT(':',时间)+1,RAT(':',时间)-AT(':',时间))) ALL
REPLACE 秒 WITH VAL(SUBSTR(时间,RAT(':',时间)+1)) ALL

这是针对12楼的
#15
sarge_xp2021-04-06 18:13
非常好
#16
sdta2021-04-08 08:52
以下是引用wengjl在2021-4-6 14:14:35的发言:

REPLACE 时 WITH VAL(SUBSTR(时间,6,AT(':',时间,1)-6)) ALL
REPLACE 分 WITH VAL(SUBSTR(时间,AT(':',时间)+1,RAT(':',时间)-AT(':',时间))) ALL
REPLACE 秒 WITH VAL(SUBSTR(时间,RAT(':',时间)+1)) ALL

这是针对12楼的

可以用GETWORDNUM()
#17
wengjl2021-04-08 12:31
GETWORDNUM()
对这个有点陌生
#18
schtg2021-04-08 18:48
学习啦,谢谢各位!
#19
sarge_xp2021-04-21 07:35
回复 10楼 sdta
你的代码经调试,可行,如果要将Excel指定的列导入dbf,又如何做 ?  目前的做法是按你的方法,将Excel全部转为文本,存入DBF,再通过SQL选取相应的字段到新的表,有更高效直接的方法吗  ?
1