想请教一个困扰已久的问题:
有一个几千条记录的dbf数据表,里面每一条记录的某一字段(价格)的详细构成情况,都在一个excel文件的3个工作表中的某个位置以小表格的形式有详细的细目构成列表明细,我想在查询某一dbf记录时实现自动调用这个工作表中的相应小表, 。如果把每个小表以手动的方式截取放到MEMO字段,显然工作量太大,不知有没有好的方法?另外,因为这个excel表很大,打开很慢,调用时有没有快捷一点的方法(这个excel表工作表中表里有表,似乎很难转成DBF表格)?先在此谢过!
32 个解决方案
#2
举例说明,将EXCEL全部转换为DBF是否可行?
#3
一、先回复“wwwwb”:谢谢前辈回复,excal表很大,里面表结构很复杂,表中有表,字段数量也尽相同,转换较难。
二、回复十豆三前辈:之前拜读过<VFP全面控制EXCEL>,现在又查看了一下,很有益,那是一篇很好的文章。但是我在这个案例里是不仅仅要打开相应的excel文件,而且要快速定位到相应的小表上。再次感谢!
二、回复十豆三前辈:之前拜读过<VFP全面控制EXCEL>,现在又查看了一下,很有益,那是一篇很好的文章。但是我在这个案例里是不仅仅要打开相应的excel文件,而且要快速定位到相应的小表上。再次感谢!
#4
快速定位到相应的小表上:举例说明
#5
sorry! 上面“字段数量也尽相同” 应为“字段数量也不尽相同”。
#6
你用手工打开 Excel,然后录制宏并完成你的手工操作,停止当制宏,再看宏代码,根据宏代码参考 VBA 手册就可以转写成 vfp 代码。
#7
"快速定位到相应的小表上:举例说明":
即同上面要求上的:“有一个几千条记录的dbf数据表,里面每一条记录的某一字段(价格)的详细构成情况,都在一个excel文件的3个工作表中的某个位置以小表格的形式有详细的细目构成列表明细,我想在查询某一dbf记录时实现自动调用这个工作表中的相应小表,”
比如:我打开一条记录,显示“车架安装,综合单价800元”,而这800元的详细组成则在“价构成”这个excel文件的某个工作表里面的小表中(一个工作表里有N多个小表组成,每个小表对应前述dbf表中的一条记录)。我想在查看该记录时,能通过点击等方式调用该“价构成”表,且打开时,该表已显示在我要的那个小表位置。顺便说一下,该excel文件很大,打开很慢,还想变慢为快。谢谢!
即同上面要求上的:“有一个几千条记录的dbf数据表,里面每一条记录的某一字段(价格)的详细构成情况,都在一个excel文件的3个工作表中的某个位置以小表格的形式有详细的细目构成列表明细,我想在查询某一dbf记录时实现自动调用这个工作表中的相应小表,”
比如:我打开一条记录,显示“车架安装,综合单价800元”,而这800元的详细组成则在“价构成”这个excel文件的某个工作表里面的小表中(一个工作表里有N多个小表组成,每个小表对应前述dbf表中的一条记录)。我想在查看该记录时,能通过点击等方式调用该“价构成”表,且打开时,该表已显示在我要的那个小表位置。顺便说一下,该excel文件很大,打开很慢,还想变慢为快。谢谢!
#8
回复十豆三前辈:关于用录制宏来解决的方法,可否详细些,因为我的功力很低,惭愧!
#9
如果可以的话,
上传你的dbf xls 到www.access911.net/csdn
,用WINRAR压缩
上传你的dbf xls 到www.access911.net/csdn
,用WINRAR压缩
#10
回wwwwb版主:这个dbf是一个朋友店里的资料,还不方便上传,请万谅!
#11
修改此DBF中的内容,去掉敏感的内容,要调用的XLS文件名、SHEET名不要修改
有数据才能测试
有数据才能测试
#12
挺复杂的~
#13
打开你的 Excel,“工具” 菜单,“宏” 子菜单,选择 “录制新宏”,“确定”,
手工操作你要完成的工作,操作完了,点 “停止录制”。
再打开,“工具” 菜单,“宏” 子菜单,选择 “宏”,选择你的录制宏名称,点击“编辑”,就能看到你刚才手工操作的 VBA代码 了,有了这段代码,就可以参照写程序了。
#14
谢谢前辈指点,我按此方法试试,看看是不是笨到不能授教了。
#15
碰到一个细节问题,我是以 brow ...nomodify 来显示查到的dbf记录的,要浏览这个记录的详细构成,需要查找excel文件“价构成”中的内容,但brow 生成的不是表单,怎么触发这个动作呢? 最好能在双击dbf 相应记录时实现对另一表的查询。
#16
#17
不用表单中的 Grid 来显示主要是因为一是grid显示的表太小,另一方面对grid不是很熟练,感觉代码编写太复杂,不如brow不得快。
不过您的建议很好,可解决触发问题,只是在grid的显示栏中点击某行时让其触发的代码应写在哪里?
不过您的建议很好,可解决触发问题,只是在grid的显示栏中点击某行时让其触发的代码应写在哪里?
#18
写到 AfterRowColChang 事件中
#19
非常感谢,原来grid还可以这样。
#20
非常谢谢!原来grid还可以这样。
#21
前辈:下面的程序总提醒我找不到变量m1,可调试窗已显示m1的具体值了,不知为什么?另其中的zm1=bitxor(asc(subs(allt(a2),i,1)),9) 最后一位9不能是大于2位数的,是不是bitxor比对时不能超出前面的二进制位数?
IF ( .NOT. empty(thisform.combo1.value)) .and. ( .NOT. empty(thisform.text1.value))
* clea all
use mi
a1=allt(thisform.combo1.value)
a2=allt(thisform.text1.value)
n=1
* m1=""
DO WHIL n<=3
loca for allt(yh)==a1
IF .not. eof()
m1=allt(code)
cd1=""
for i=1 to len(allt(a2))
zm1=bitxor(asc(subs(allt(a2),i,1)),9)
cd1=cd1+chr(zm1)
endf
if cd1=m1
jc=1
exit
endi
if cd1#m1 .and. n<3
k=3-n
messagebox("密码错误,你还有 "+k+" 次机会!",60,"密码错误提示")
n=n+1
else
jc=0
exit
endi
ELSE
jc=2
exit
ENDI
ENDD
do case
case jc=0
messagebox("非授权用户,你无权使用本系统!",60,"")
clear events
release thisform
quit
case jc=1
release thisform
do form main
case jc=2
messagebox("用户名错误,请检查后重新输入!",60,"提示")
retu
endc
ENDI
IF ( .NOT. empty(thisform.combo1.value)) .and. ( .NOT. empty(thisform.text1.value))
* clea all
use mi
a1=allt(thisform.combo1.value)
a2=allt(thisform.text1.value)
n=1
* m1=""
DO WHIL n<=3
loca for allt(yh)==a1
IF .not. eof()
m1=allt(code)
cd1=""
for i=1 to len(allt(a2))
zm1=bitxor(asc(subs(allt(a2),i,1)),9)
cd1=cd1+chr(zm1)
endf
if cd1=m1
jc=1
exit
endi
if cd1#m1 .and. n<3
k=3-n
messagebox("密码错误,你还有 "+k+" 次机会!",60,"密码错误提示")
n=n+1
else
jc=0
exit
endi
ELSE
jc=2
exit
ENDI
ENDD
do case
case jc=0
messagebox("非授权用户,你无权使用本系统!",60,"")
clear events
release thisform
quit
case jc=1
release thisform
do form main
case jc=2
messagebox("用户名错误,请检查后重新输入!",60,"提示")
retu
endc
ENDI
#22
1、哪句报错?
2、bitxor(),没明白你说的什么意思。
2、bitxor(),没明白你说的什么意思。
#23
1、if cd1=m1 语句报错。
2、窗口调试时,zm1=bitxor(asc(subs(allt(a2),i,1)),9) 最后的9不能改大于1位的,否则下一句cd1=cd1+chr(zm1)报错。
#24
bitxor(),没明白你说的什么意思。
补充:zm1=bitxor(asc(subs(allt(a2),i,1)),9) 最后的9不能改大于1位数的原因是不是异或比较时bitxor()中的两个数后者不能超出前者的二进制位数?
#25
求救:为什么上述程序中 if cd1=m1 语句报“找不到变量m1” ?。
另谁可提供VFP6.0帮助文件,发邮件或离线文件到 qq:459629910
另谁可提供VFP6.0帮助文件,发邮件或离线文件到 qq:459629910
#26
你安装完 vfp ,就有帮助文件。
换一个变量名称试试。
换一个变量名称试试。
#27
VFP6.0 安装了多次,帮助文件一直灰色。我的安装盘上没有此文件,网上下载了几回,都没用。
m1出错的问题,也试过更换变量,可都没用。程序在有时真的莫名其妙。
#28
#29
谢谢热心提供,但没法下载,1th链接我没该站金币,2th链接我还没开通支付宝。
#30
址址2不需要付钱,是论坛金币。
#32
谢谢十豆三老师,终于下载到了。
问了这么多问题,按理应该结帖了,但问题好像更多了,看了许多论坛上相关文章,最终感到许多似乎没有明确的结果:比如:
1、编译后一闪而过的问题(调整showindow、加read events等问题依旧),似乎没人点出核心的关键原因.
2、编译中出现的apphook.vcx正在使用的错误提示,论坛上有很多“解决”方法,但试了一下,好像没一个 有用的。
3、编译后原目录内的文件不能双击打开了。
4、还有我在这21楼的程序报错问题(if cd1=m1提示找不到变量)
天啊!10多年的vfp经历(虽然中间停顿了很长时间),我从没这么痛苦过。
问了这么多问题,按理应该结帖了,但问题好像更多了,看了许多论坛上相关文章,最终感到许多似乎没有明确的结果:比如:
1、编译后一闪而过的问题(调整showindow、加read events等问题依旧),似乎没人点出核心的关键原因.
2、编译中出现的apphook.vcx正在使用的错误提示,论坛上有很多“解决”方法,但试了一下,好像没一个 有用的。
3、编译后原目录内的文件不能双击打开了。
4、还有我在这21楼的程序报错问题(if cd1=m1提示找不到变量)
天啊!10多年的vfp经历(虽然中间停顿了很长时间),我从没这么痛苦过。
#1
#2
举例说明,将EXCEL全部转换为DBF是否可行?
#3
一、先回复“wwwwb”:谢谢前辈回复,excal表很大,里面表结构很复杂,表中有表,字段数量也尽相同,转换较难。
二、回复十豆三前辈:之前拜读过<VFP全面控制EXCEL>,现在又查看了一下,很有益,那是一篇很好的文章。但是我在这个案例里是不仅仅要打开相应的excel文件,而且要快速定位到相应的小表上。再次感谢!
二、回复十豆三前辈:之前拜读过<VFP全面控制EXCEL>,现在又查看了一下,很有益,那是一篇很好的文章。但是我在这个案例里是不仅仅要打开相应的excel文件,而且要快速定位到相应的小表上。再次感谢!
#4
快速定位到相应的小表上:举例说明
#5
sorry! 上面“字段数量也尽相同” 应为“字段数量也不尽相同”。
#6
你用手工打开 Excel,然后录制宏并完成你的手工操作,停止当制宏,再看宏代码,根据宏代码参考 VBA 手册就可以转写成 vfp 代码。
#7
"快速定位到相应的小表上:举例说明":
即同上面要求上的:“有一个几千条记录的dbf数据表,里面每一条记录的某一字段(价格)的详细构成情况,都在一个excel文件的3个工作表中的某个位置以小表格的形式有详细的细目构成列表明细,我想在查询某一dbf记录时实现自动调用这个工作表中的相应小表,”
比如:我打开一条记录,显示“车架安装,综合单价800元”,而这800元的详细组成则在“价构成”这个excel文件的某个工作表里面的小表中(一个工作表里有N多个小表组成,每个小表对应前述dbf表中的一条记录)。我想在查看该记录时,能通过点击等方式调用该“价构成”表,且打开时,该表已显示在我要的那个小表位置。顺便说一下,该excel文件很大,打开很慢,还想变慢为快。谢谢!
即同上面要求上的:“有一个几千条记录的dbf数据表,里面每一条记录的某一字段(价格)的详细构成情况,都在一个excel文件的3个工作表中的某个位置以小表格的形式有详细的细目构成列表明细,我想在查询某一dbf记录时实现自动调用这个工作表中的相应小表,”
比如:我打开一条记录,显示“车架安装,综合单价800元”,而这800元的详细组成则在“价构成”这个excel文件的某个工作表里面的小表中(一个工作表里有N多个小表组成,每个小表对应前述dbf表中的一条记录)。我想在查看该记录时,能通过点击等方式调用该“价构成”表,且打开时,该表已显示在我要的那个小表位置。顺便说一下,该excel文件很大,打开很慢,还想变慢为快。谢谢!
#8
回复十豆三前辈:关于用录制宏来解决的方法,可否详细些,因为我的功力很低,惭愧!
#9
如果可以的话,
上传你的dbf xls 到www.access911.net/csdn
,用WINRAR压缩
上传你的dbf xls 到www.access911.net/csdn
,用WINRAR压缩
#10
回wwwwb版主:这个dbf是一个朋友店里的资料,还不方便上传,请万谅!
#11
修改此DBF中的内容,去掉敏感的内容,要调用的XLS文件名、SHEET名不要修改
有数据才能测试
有数据才能测试
#12
挺复杂的~
#13
打开你的 Excel,“工具” 菜单,“宏” 子菜单,选择 “录制新宏”,“确定”,
手工操作你要完成的工作,操作完了,点 “停止录制”。
再打开,“工具” 菜单,“宏” 子菜单,选择 “宏”,选择你的录制宏名称,点击“编辑”,就能看到你刚才手工操作的 VBA代码 了,有了这段代码,就可以参照写程序了。
#14
谢谢前辈指点,我按此方法试试,看看是不是笨到不能授教了。
#15
碰到一个细节问题,我是以 brow ...nomodify 来显示查到的dbf记录的,要浏览这个记录的详细构成,需要查找excel文件“价构成”中的内容,但brow 生成的不是表单,怎么触发这个动作呢? 最好能在双击dbf 相应记录时实现对另一表的查询。
#16
#17
不用表单中的 Grid 来显示主要是因为一是grid显示的表太小,另一方面对grid不是很熟练,感觉代码编写太复杂,不如brow不得快。
不过您的建议很好,可解决触发问题,只是在grid的显示栏中点击某行时让其触发的代码应写在哪里?
不过您的建议很好,可解决触发问题,只是在grid的显示栏中点击某行时让其触发的代码应写在哪里?
#18
写到 AfterRowColChang 事件中
#19
非常感谢,原来grid还可以这样。
#20
非常谢谢!原来grid还可以这样。
#21
前辈:下面的程序总提醒我找不到变量m1,可调试窗已显示m1的具体值了,不知为什么?另其中的zm1=bitxor(asc(subs(allt(a2),i,1)),9) 最后一位9不能是大于2位数的,是不是bitxor比对时不能超出前面的二进制位数?
IF ( .NOT. empty(thisform.combo1.value)) .and. ( .NOT. empty(thisform.text1.value))
* clea all
use mi
a1=allt(thisform.combo1.value)
a2=allt(thisform.text1.value)
n=1
* m1=""
DO WHIL n<=3
loca for allt(yh)==a1
IF .not. eof()
m1=allt(code)
cd1=""
for i=1 to len(allt(a2))
zm1=bitxor(asc(subs(allt(a2),i,1)),9)
cd1=cd1+chr(zm1)
endf
if cd1=m1
jc=1
exit
endi
if cd1#m1 .and. n<3
k=3-n
messagebox("密码错误,你还有 "+k+" 次机会!",60,"密码错误提示")
n=n+1
else
jc=0
exit
endi
ELSE
jc=2
exit
ENDI
ENDD
do case
case jc=0
messagebox("非授权用户,你无权使用本系统!",60,"")
clear events
release thisform
quit
case jc=1
release thisform
do form main
case jc=2
messagebox("用户名错误,请检查后重新输入!",60,"提示")
retu
endc
ENDI
IF ( .NOT. empty(thisform.combo1.value)) .and. ( .NOT. empty(thisform.text1.value))
* clea all
use mi
a1=allt(thisform.combo1.value)
a2=allt(thisform.text1.value)
n=1
* m1=""
DO WHIL n<=3
loca for allt(yh)==a1
IF .not. eof()
m1=allt(code)
cd1=""
for i=1 to len(allt(a2))
zm1=bitxor(asc(subs(allt(a2),i,1)),9)
cd1=cd1+chr(zm1)
endf
if cd1=m1
jc=1
exit
endi
if cd1#m1 .and. n<3
k=3-n
messagebox("密码错误,你还有 "+k+" 次机会!",60,"密码错误提示")
n=n+1
else
jc=0
exit
endi
ELSE
jc=2
exit
ENDI
ENDD
do case
case jc=0
messagebox("非授权用户,你无权使用本系统!",60,"")
clear events
release thisform
quit
case jc=1
release thisform
do form main
case jc=2
messagebox("用户名错误,请检查后重新输入!",60,"提示")
retu
endc
ENDI
#22
1、哪句报错?
2、bitxor(),没明白你说的什么意思。
2、bitxor(),没明白你说的什么意思。
#23
1、if cd1=m1 语句报错。
2、窗口调试时,zm1=bitxor(asc(subs(allt(a2),i,1)),9) 最后的9不能改大于1位的,否则下一句cd1=cd1+chr(zm1)报错。
#24
bitxor(),没明白你说的什么意思。
补充:zm1=bitxor(asc(subs(allt(a2),i,1)),9) 最后的9不能改大于1位数的原因是不是异或比较时bitxor()中的两个数后者不能超出前者的二进制位数?
#25
求救:为什么上述程序中 if cd1=m1 语句报“找不到变量m1” ?。
另谁可提供VFP6.0帮助文件,发邮件或离线文件到 qq:459629910
另谁可提供VFP6.0帮助文件,发邮件或离线文件到 qq:459629910
#26
你安装完 vfp ,就有帮助文件。
换一个变量名称试试。
换一个变量名称试试。
#27
VFP6.0 安装了多次,帮助文件一直灰色。我的安装盘上没有此文件,网上下载了几回,都没用。
m1出错的问题,也试过更换变量,可都没用。程序在有时真的莫名其妙。
#28
VFP9.0汉化帮助文件下载地址:
http://www.nbdown.net/file/2353.html
http://www.mzvfp.com/bbs/dispbbs.asp?boardid=2&Id=86826
http://www.nbdown.net/file/2353.html
http://www.mzvfp.com/bbs/dispbbs.asp?boardid=2&Id=86826
#29
谢谢热心提供,但没法下载,1th链接我没该站金币,2th链接我还没开通支付宝。
#30
址址2不需要付钱,是论坛金币。
#31
#32
谢谢十豆三老师,终于下载到了。
问了这么多问题,按理应该结帖了,但问题好像更多了,看了许多论坛上相关文章,最终感到许多似乎没有明确的结果:比如:
1、编译后一闪而过的问题(调整showindow、加read events等问题依旧),似乎没人点出核心的关键原因.
2、编译中出现的apphook.vcx正在使用的错误提示,论坛上有很多“解决”方法,但试了一下,好像没一个 有用的。
3、编译后原目录内的文件不能双击打开了。
4、还有我在这21楼的程序报错问题(if cd1=m1提示找不到变量)
天啊!10多年的vfp经历(虽然中间停顿了很长时间),我从没这么痛苦过。
问了这么多问题,按理应该结帖了,但问题好像更多了,看了许多论坛上相关文章,最终感到许多似乎没有明确的结果:比如:
1、编译后一闪而过的问题(调整showindow、加read events等问题依旧),似乎没人点出核心的关键原因.
2、编译中出现的apphook.vcx正在使用的错误提示,论坛上有很多“解决”方法,但试了一下,好像没一个 有用的。
3、编译后原目录内的文件不能双击打开了。
4、还有我在这21楼的程序报错问题(if cd1=m1提示找不到变量)
天啊!10多年的vfp经历(虽然中间停顿了很长时间),我从没这么痛苦过。