操作数据库的时候如何取消系统自带的running query框?

cyxin2121921 2009-10-15 11:09:26
public mypath
mypath=""
mypath=getfile("xls")
if empty(mypath) &&判断文件名是否为空
wait clear
return
endif
_ole_excel = CreateObject("Excel.Application")
_ole_excel.WorkBooks.Open(mypath) && 要打开的工作表名(xls)必须是全路径
_ole_excel.WorkSheets(1).Activate &&激活指定的工作簿
bookExcel = _ole_excel.APPLICATION.Workbooks.OPEN(mypath)
nrows=bookExcel.Worksheets(1)
UsedRange =nrows.UsedRange
r = UsedRange.ROWS.COUNT
if used('dinge')
select dinge
use
endif
USE dinge
&&select dinge
delete all
pack

for i=2 TO r
&&IF EMPTY(NVL(_ole_excel.cells(i,1).value,'')) AND empty(nvl(_ole_excel.cells(i,2).value,''))
IF empty(nvl(_ole_excel.cells(i,2).value,''))
EXIT
else
With _ole_excel
Insert Into dinge;
(材料编码,材料名称,规格型号,计量单位,数量,计划单价,计划金额,部门) ;
Values(;
Cast(NVL(.cells(i,1).value,'') as C(20)),;
Cast(Nvl(.cells(i,2).value,'') as C(30)),;
Cast(Nvl(.cells(i,3).value,'') as C(30)),;
Cast(Nvl(.cells(i,4).value,'') as C(10)),;
Cast(Nvl(.cells(i,5).value,'') as N(10,2)), ;
Cast(Nvl(.cells(i,6).value,'') as N(10,2)), ;
Cast(Nvl(.cells(i,7).value,'') as N(10,2)), ;
Cast(Nvl(.cells(i,8).value,'') as C(20)))
EndWith
endif
ENDFOR
_ole_excel.quit
select 材料编码,材料名称,规格型号,计量单位,sum(数量) as 数量,计划单价,sum(计划金额) as 计划金额,部门 from dinge group by 材料编码,材料名称,规格型号,部门 into cursor temp

if used('dinge_1')
select dinge_1
use
endif
use dinge_1 in 1
delete from dinge_1
select dinge_1
PACK
append from dbf('temp')

UPDATE A SET A.计划单价=B.计划单价,A.计划金额=A.计划单价*A.数量 FROM dinge_1 A INNER JOIN cwb_1 B ON;
IIF(NVL(a.材料编码,'AAA')='AAA' OR EMPTY(a.材料编码),ALLTRIM(A.材料名称)=ALLTRIM(B.材料名称) AND ALLTRIM(A.规格型号)=ALLTRIM(B.规格型号),A.材料编码=B.材料编码)


_SCREEN.ActiveForm.pageframe1.page2.grid1.recordsource=''
_SCREEN.ActiveForm.pageframe1.page2.grid1.recordsourcetype=1
_SCREEN.ActiveForm.pageframe1.page2.grid1.recordsource='dinge_1'

问题1 上述update部分(红色部分)运行时,会弹出系统的running query对话框,请问如何屏蔽掉,变成自定义的对话框或是一个进度条之类的东西?
问题2 我上传到了http://access911.net/csdn/FileDescription.asp?mdb=2009-10-15&id=13这个地址上的dinge.xls一个表,问题是,它的“材料编码”字段导入VFP时候出现了问题,在EXCEL2003中,这个字段的设置“单元格格式”的“数字”选项中,选择了“文本”,但是类似“9510011”这个字段而言,他的左上角没有三角号,不像别的这个字段会有“非文本形式存储的数字”这样的说明,当它用上述代码保存到dbf中的时候,它的结果为9510011.0000000000,请问这种情况如何去除?
...全文
160 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
十豆三 2009-10-17
  • 打赏
  • 举报
回复
关于第2个问题:

如果还用 Excel 的话,可以这样:
1、先建立DBF或临时表,然后用 Append From 方式将 Excel 文件读入。

2、9510011变成9510011.0000000000这样记录,将小数去掉即可,至于去掉的方法很多了,可以转成整型再写入,或用字符串函数Transform(9510011.0000000000),或一点一点截取。


如果用文本就不用说了,上面大家也介绍了。
十豆三 2009-10-17
  • 打赏
  • 举报
回复
关于 running query对话框 的问题,在主程序开头加如下命令试试:

Set Escape Off
wwwwb 2009-10-16
  • 打赏
  • 举报
回复
即先删除已经存在的TXT文件,修改为你的TXT路径名+文件名
WWWWA 2009-10-16
  • 打赏
  • 举报
回复
真是服了你了,我用上述代码,TXT文件内容是不同的,根据不同的EXCEL文件,要么你在SAVEAS前

DELETE FILE "r:\temp\123.txt"
cyxin2121921 2009-10-16
  • 打赏
  • 举报
回复
但是我这里的temp1。txt 还是没有发生改变!
我觉得是不是我的VFP有问题或是我的计算机或是真是EXCEL的问题?
问题怎么这么多呢!
WWWWA 2009-10-16
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 cyxin2121921 的回复:]
SQL code_ole_excel.ActiveWorkbook.SAVEAS("temp.TXT",-4158)
STRTOFILE(STRTRAN(FILETOSTR("temp.TXT"),CHR(9),','),"temp1.TXT")
_ole_excel.quit
RELEASE _ole_excel
APPENDFROM temp1.TXT DELIMITEDWITH charac ,
那我这么写应该的对的吧?
[/Quote]
yes
cyxin2121921 2009-10-16
  • 打赏
  • 举报
回复
_ole_excel.ActiveWorkbook.SAVEAS("temp.TXT",-4158)
STRTOFILE(STRTRAN(FILETOSTR("temp.TXT"),CHR(9),','),"temp1.TXT")
_ole_excel.quit
RELEASE _ole_excel
APPEND FROM temp1.TXT DELIMITED WITH charac ,

那我这么写应该的对的吧?
wwwwb 2009-10-16
  • 打赏
  • 举报
回复
你的TXT只有一个TMP,没有生成新的,当然不行,先SAVEAS TXT,再转换
cyxin2121921 2009-10-16
  • 打赏
  • 举报
回复
对应xls转化为txt代码如下
_SCREEN.ActiveForm.pageframe1.activepage=2
SET TALK OFF
SET SAFETY OFF

public mypath
mypath=""
mypath=getfile("xls")
if empty(mypath)
wait clear
return
endif
_ole_excel = CreateObject("Excel.Application")
_ole_excel.WorkBooks.Open(mypath) && 要打开的工作表名(xls)必须是全路径
_ole_excel.WorkSheets(1).Activate &&激活指定的工作簿
bookExcel = _ole_excel.APPLICATION.Workbooks.OPEN(mypath)
_ole_excel.ActiveWorkbook.saved = .T.
_ole_excel.DisplayAlerts = .F.
_ole_excel.ActiveWorkbook.SAVEAS(STRTOFILE(STRTRAN(FILETOSTR("temp.TXT"),CHR(9),','),"temp.TXT"),-4158)
_ole_excel.quit
RELEASE _ole_excel

if used('dinge')
select dinge
use
endif

USE dinge
delete all
pack
APPEND FROM G:\崔亚新\定额、指标与实际发生的比较\temp.TXT DELIMITED WITH charac ,

SELECT 材料编码,材料名称,规格型号,计量单位,sum(数量) as 数量,计划单价,sum(计划金额) as 计划金额,部门 FROM dinge group by 材料编码,材料名称,规格型号,部门 INTO CURS temp1

WWWWA 2009-10-16
  • 打赏
  • 举报
回复
代码有问题,先要SAVEAS TXT文件,再用
STRTOFILE(STRTRAN(FILETOSTR("R:\TEMP\QQ.TXT"),CHR(9),','),"R:\TEMP\QQ1.TXT")
转换。
你的代码只是一个TMP.TXT文件,当然内容不变。
cyxin2121921 2009-10-16
  • 打赏
  • 举报
回复
我在VFP6.0中能够很好的实现显示
但是也有问题 就是 我使用这条语句的时候
_ole_excel.ActiveWorkbook.SAVEAS(STRTOFILE(STRTRAN(FILETOSTR("temp.TXT"),CHR(9),','),"temp.TXT"),-4158)
虽然也能谈出 修改temp.TXT对话框 但是里面的内容却不能改变
比如我一开始是导入的是dinge.xls
但是当我导入cwb.xls时候 却不能够改变temp.TXT中的内容
请教为何原因?
nianzhang747 2009-10-16
  • 打赏
  • 举报
回复
txt 以tab分割
cyxin2121921 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwwwb 的回复:]
2、用另存为TXT方法是最简单的
[/Quote]
主要是这里的所有人都用得是EXCEL2003
而我这里生成的时候 每次导入的时候都会多出三条记录来
但是这几条记录 只有 数量 计划单价 计划金额 这三个字段的内容 且这三个 字段的内容均为0.00 而别的字段是没值的
WWWWA 2009-10-15
  • 打赏
  • 举报
回复
1 上述update部分(红色部分)运行时,会弹出系统的running query对话框,请问如何屏蔽掉,变成自定义的对话框或是一个进度条之类的东西?

只能做一个假的
WWWWA 2009-10-15
  • 打赏
  • 举报
回复
1
SET TALK OFF
wwwwb 2009-10-15
  • 打赏
  • 举报
回复
2、用另存为TXT方法是最简单的
cyxin2121921 2009-10-15
  • 打赏
  • 举报
回复
恩 我试一试先
WWWWA 2009-10-15
  • 打赏
  • 举报
回复
您的意思是 每次选择了xls表以后,当转化为txt后,都会覆盖掉原来的txt文件?
YES

因为有一种情况:里面如果存在类似双引号的其中一个的话(“),这一行显示就有问题了,列与列就错位了!
STRTOFILE(STRTRAN(FILETOSTR("R:\TEMP\QQ.TXT"),CHR(9),','),"R:\TEMP\QQ1.TXT")
用上述代码测试是可以的
cyxin2121921 2009-10-15
  • 打赏
  • 举报
回复
所以想用 , 进行分割
cyxin2121921 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wwwwb 的回复:]
2、这个txt文件不发生变化:内容不变?不会吧
[/Quote]
您的意思是 每次选择了xls表以后,当转化为txt后,都会覆盖掉原来的txt文件?

因为有一种情况:里面如果存在类似双引号的其中一个的话(“),这一行显示就有问题了,列与列就错位了!
加载更多回复(8)

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧