生成dbf,文件名长度问题

TimZhuFaith 2011-11-24 12:33:20
各位好,下面的代码可以生成一个dbf文件。代码中想生成一个test20111122文件,但在有的电脑上生成dbf文件的文件名只有8位,结果为test2011文件。实在不知道什么原因。。

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
go
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
go
EXEC sp_configure 'allow updates', 0; --设置为0

GO
RECONFIGURE WITH OVERRIDE;
GO


sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
declare @path nvarchar(500), @over int, @obj int, @sql nvarchar(1000)

set @path = N'D:\test\test20111122.dbf'
set @over = 1

declare @flag int, @cmd1 nvarchar(500), @cmd2 nvarchar(500)
declare @directorypath nvarchar(100), @constr nvarchar(1000)

set @directorypath = N'D:\test\'
if object_id(N'tempdb..#tb') is not null
drop table #tb


create table #tb(a bit,b bit,c bit)
insert into #tb exec master..xp_fileexist @path
if exists(select 1 from #tb where a = 1)
if @over=1
begin
set @path=N'del ' + @path
--print @path
exec master..xp_cmdshell @path,no_output
end
else
set @over=0
else
begin

set @cmd1 = N'dir ' + @directorypath
set @cmd2 = N'md ' + @directorypath

exec @flag = xp_cmdshell @cmd1 , NO_OUTPUT

if @flag != 0
exec master.dbo.xp_cmdshell @cmd2
set @over=1

end

if right(@directorypath,1)<>'\'
set @directorypath = @directorypath + '\'

--数据库创建语句
set @constr = N'Provider = Microsoft.Jet.OLEDB.4.0; Extended Properties=''dBASE III;' + 'HDR=yes;IMEX=2;DATABASE=' + @directorypath + ''''

declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
--连接数据库
exec @err=sp_OACreate 'adodb.connection', @obj out
if @err<>0
begin
exec sp_OAGetErrorInfo 0, @src out, @desc out
print @src
print @desc
--print 'connection'

end

set @constr = replace(@constr, '&', '^&')
--打开数据库
exec @err=sp_OAMethod @obj, 'open', null, @constr
if @err<>0
begin
exec sp_OAGetErrorInfo 0,@src out,@desc out
print @src
print @desc

end

declare @filepath varchar(50)

set @filepath = 'test20111122.dbf'
set @sql = 'Id decimal(5, 0), Name nvarchar(10), fenshu decimal(5, 2)'

select @sql= 'create table ' + @filepath
+ '(' + @sql +')'

if @over=1
begin
exec @err=sp_OAMethod @obj, 'execute', @out out, @sql
if @err<>0
begin
-- rollback tran
exec sp_OAGetErrorInfo 0,@src out,@desc out
print @src
print 'execute'
print @desc

end

end




exec @err = sp_OADestroy @obj


...全文
336 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
esc2358 2011-12-20
  • 打赏
  • 举报
回复
楼主问题解决了么?我也遇到这个问题,
原因如1楼所说。
找到一个解决方法,还没测试过,lz有其他解决方法么?
http://www.lizhecome.com/post/e585b3e4ba8eDBFe79a84e69687e4bbb6e5908de995bfe5baa6e99990e588b6e997aee9a298.aspx
-晴天 2011-11-24
  • 打赏
  • 举报
回复
这是因为 VFP 自由表的表名,必须遵守DOS时代 8.3 结构,即文件名 8 位,扩展名 3 位.
TimZhuFaith 2011-11-24
  • 打赏
  • 举报
回复
装了个vfp9.0 依然没解决问题。。。[Quote=引用 10 楼 qianjin036a 的回复:]
你可以去下一个VFP装一装,然后卸载掉,驱动就有了.


引用 9 楼 timzhufaith 的回复:
网上多是一个895K的驱动,不知道是不是vfp6的驱动,另外我测试的机子都安装了这个驱动,只有那台机子不行

引用 8 楼 qianjin036a 的回复:
引用 6 楼 timzhufaith 的回复:
并不是所有windows03都有问题

引用 5 楼 fredric……
[/Quote]
-晴天 2011-11-24
  • 打赏
  • 举报
回复
你可以去下一个VFP装一装,然后卸载掉,驱动就有了.

[Quote=引用 9 楼 timzhufaith 的回复:]
网上多是一个895K的驱动,不知道是不是vfp6的驱动,另外我测试的机子都安装了这个驱动,只有那台机子不行

引用 8 楼 qianjin036a 的回复:
引用 6 楼 timzhufaith 的回复:
并不是所有windows03都有问题

引用 5 楼 fredrickhu 的回复:
server版的和XP,win7也许有所区别。

当然没有去证实过。


如果你的机……
[/Quote]
TimZhuFaith 2011-11-24
  • 打赏
  • 举报
回复
网上多是一个895K的驱动,不知道是不是vfp6的驱动,另外我测试的机子都安装了这个驱动,只有那台机子不行[Quote=引用 8 楼 qianjin036a 的回复:]
引用 6 楼 timzhufaith 的回复:
并不是所有windows03都有问题

引用 5 楼 fredrickhu 的回复:
server版的和XP,win7也许有所区别。

当然没有去证实过。


如果你的机器上正确地安装有VFP 6 的驱动,那一定会是 8.3 结构的,除非系统并不能正确识别VFP自由表.
[/Quote]
-晴天 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 timzhufaith 的回复:]
并不是所有windows03都有问题

引用 5 楼 fredrickhu 的回复:
server版的和XP,win7也许有所区别。

当然没有去证实过。
[/Quote]

如果你的机器上正确地安装有VFP 6 的驱动,那一定会是 8.3 结构的,除非系统并不能正确识别VFP自由表.
tgbd 2011-11-24
  • 打赏
  • 举报
回复
1楼正解
TimZhuFaith 2011-11-24
  • 打赏
  • 举报
回复
并不是所有windows03都有问题[Quote=引用 5 楼 fredrickhu 的回复:]
server版的和XP,win7也许有所区别。

当然没有去证实过。
[/Quote]
--小F-- 2011-11-24
  • 打赏
  • 举报
回复
server版的和XP,win7也许有所区别。

当然没有去证实过。
TimZhuFaith 2011-11-24
  • 打赏
  • 举报
回复
windows 2003[Quote=引用 3 楼 fredrickhu 的回复:]
操作系统是什么?
[/Quote]
--小F-- 2011-11-24
  • 打赏
  • 举报
回复
操作系统是什么?
TimZhuFaith 2011-11-24
  • 打赏
  • 举报
回复
这个问题不是所有电脑都有的,你意思是升级一些程序?[Quote=引用 1 楼 qianjin036a 的回复:]
这是因为 VFP 自由表的表名,必须遵守DOS时代 8.3 结构,即文件名 8 位,扩展名 3 位.
[/Quote]

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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