求救:在查询分析器中运行一个使用openrowset()函数从DBF导入到SQL Server表中的存储过程,执行期间强行关闭之后,无法再次执行!!

spoky 2004-04-23 02:11:41
1。在delphi程序中使用CreateProcess()新建一个进程,这个进程其实就是调用isqlw.exe(查询分析器)在后台运行一个使用openrowset()函数从一个DBF导入到SQL Server一个表中的存储过程,在这个isqlw.exe进程执行期间强行关闭这个isqlw.exe进程之后,以后再次执行同样的操作就出现错误。即时重新启动系统和服务器都无法正常运行这个存储过程了。

2。存储过程中使用的openrowset()函数如下:
insert tbl1(col1,col2)
select col1,col2 from OpenRowSet('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceDB=C:\Table1.DBF;SourceType=DBF','select * from C:\Table1.DBF ')

3。运行期间出现错误提示:
服务器: 消息 7399,级别 16,状态 1,行 1OLE DB 提供程序 MSDASQL 报错。提供程序未给出有关错误的任何信息。OLE DB 错误跟踪[OLE/DB Provider MSDASQL ICommandText::Execute returned 0x80004005: 提供程序未给出有关错误的任何信息。]。

4。在还没有强行关闭线程之前,每天作同样的操作都是没有问题的。同时在出错之后,将这个SQL Server数据库放到其他机器上,执行同样的导入操作也都没有问题。

5。所以想问:是不是因为在openrowset()过程中出错之后,对SQL Server服务器或者这台电脑造成了什么影响,或者损坏了某些文件或者链接?有没有什么办法可以处理的呢?无限感激!!!
...全文
74 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
spoky 2004-04-23
  • 打赏
  • 举报
回复
问题已经查出来了,原来是系统盘的硬盘空间不够了!哭!!
因为运行这个存储过程会在系统盘的temp目录中暂时性生成temp文件,本来如果不出错,这个temp文件会自动删除,但是因为强行终止了isqlw.exe,这个temp文件无法自动删除,残留下来占用了大量的硬盘空间!!所以再次执行就没有空间了。呜呜~~~
aiirii 2004-04-23
  • 打赏
  • 举报
回复
还有,你这种,最好用事务管理比较安全
aiirii 2004-04-23
  • 打赏
  • 举报
回复
检查 *.dbf 有没有问题呢??

hunterht 2004-04-23
  • 打赏
  • 举报
回复
可能是执行过程对dbf文件进行了锁定,你用一个可以打开dbf文件的程序试试看能不能打开该文件,如果能打开则打开、关闭后再次执行导入操作看看行不行。


________________________欢迎访问和宣传我的论坛http://hthunter.vicp.net/
soaringsouth 2004-04-23
  • 打赏
  • 举报
回复
虽然我不知道怎么解决,但是你问题描述的很清楚,也很条理,值得大家学习!!

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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