用VB6开发一个autocad图样管理软件,用mstream将SqlServer中保存的autocad图样读出并写到硬盘,程序可以执行并在硬盘上产生autocad图样文件,但用autocad打开时却报告“文件格式错误,无法打开”,为什么?ADO Lib用的是2.7版
程序如下:
Dim rstDrawingLib As ADODB.Recordset'rstDrawingLib指向sqlserver数据库,肯定无问题
        Dim mstream As ADODB.Stream        Set mstream = New ADODB.Stream
        mstream.Type = adTypeBinary
        mstream.Open
        mstream.Write rstDrawingLib.Fields("Drawing").Value
        mstream.SaveToFile App.Path + "c:\Temp.DWG", adSaveCreateOverWrite
每次产生的c:\Temp.DWG文件autocad都无法打开,说文件格式错误为什么?谢谢!

解决方案 »

  1.   

    原因估计是由于将autocad图样文件保存进数据库时,丢失了部分信息,建议在程序中将文件保存进数据库和读出。最好把文件保存到数据库,这样就不会丢失文件中的格式及所有其它的一些内容。 
    完整的代码如下:如果是用SQL那么保存文件的字段类型应该是Binary。如果是用Access,那么保存文件的字段应该用OLE对象,在表中显示为长二进制数据。     
        
         
     '将任何文件从数据库中下载到本地: 
    Public Function LoadFile(ByVal col As ADODB.Field, ByVal FileName As String) As Boolean '获得binary数据 
        On Error GoTo myerr: 
         Dim arrBytes() As Byte 
         Dim FreeFileNumber As Integer 
         lngsize = col.ActualSize 
         arrBytes = col.GetChunk(lngsize) 
         FreeFileNumber = FreeFile 
         Open FileName For Binary Access Write As #FreeFileNumber 
         Put #FreeFileNumber, , arrBytes 
         Close #FreeFileNumber 
         LoadFile = True 
        myerr: 
         If Err.Number <> 0 Then 
         LoadFile = False 
         Err.Clear 
         End If 
        End Function 
         
    '将文件从本地上传到数据库中 
    Public Function UpLoadFile(ByVal FileName, ByVal col As ADODB.Field) As Boolean 
         On Error GoTo myerr: 
         Dim arrBytes() As Byte 
         Dim FreeFileNumber As Integer 
         FreeFileNumber = FreeFile 
         Open FileName For Binary As #FreeFileNumber 
         n = LOF(FreeFileNumber) 
         ReDim arrBytes(1 To n) As Byte 
         Get #FreeFileNumber, , arrBytes 
         Close #FreeFileNumber 
         col.AppendChunk (arrBytes) 
         UpLoadFile = True 
        myerr: 
         If Err.Number <> 0 Then 
         UpLoadFile = False 
         Err.Clear 
         End If 
        End Function