我用line控件已经画出了斜线,现想保存到数据库中,以便下次打开时出现在picture上,该如何保存,保存哪些字段合适,请大家帮忙?

解决方案 »

  1.   

    '保存X1 , Y1, X2, Y2即可
    '下次打开时动态添加控件即可,例如
    '你第一次画的line1的坐标如下 (540,1050) (1050,2370)
    '保存在数据库 [坐标] 字段中内容为"540,1050,1050,2370"以下代码可以重新生成line1控件
    Dim lneObj1 As Object
    Private Sub Form_Load()
       dim str1() as string
       str1=split(rs!坐标,",")
       Form1.Controls.Add "VB.Line", "lneObj1", Picture1
       With Form1!lneObj1
          .Visible = True
          .X1 = str1(0)
          .Y1 = str1(1)
          .X2 = str1(2)
          .Y2 = str1(3)
       End WithEnd Sub
      

  2.   

    几种办法,首先你可以保存好坐标、颜色、线宽度等,把这些数据保存到数据库中,下次进来重绘;另外,你可以利用picturebox的picture属性,直接将这个图以大块数据(SQL Server的类型是Image或者text)保存到数据库中,关于SQL Server的大块数据的读取,你可以在MSDN中查ChunckData。
    这里提供给你两个函数,可以往SQLServer数据库中读取大块数据,不过往数据库写的时候,我的函数是从文件中写道数据库里,你可以自己改一下。Public Function GetFileFromDB(dbField As ADODB.Field, vData As Variant, Optional ByVal SaveAs As String = "", Optional PackageSize As Long = 8192&)
        On Error GoTo errHandle
        
        Dim lngActualSize As Long, lngCurrentSize As Long
        Dim vTemp As Variant, bTemp() As Byte
        Dim hFile As Long
        
        lngActualSize = dbField.ActualSize
        lngCurrentSize = 0
        
        If lngActualSize <= 0 Then
            Err.Raise ERR_SIZE_EQU_OR_LESS_ZERO, "getFileFromDB"
        End If
        
        If Trim(SaveAs) = "" Then
            Do While lngCurrentSize < lngActualSize
                vTemp = dbField.GetChunk(PackageSize)
                vData = vData & vTemp
                lngCurrentSize = lngCurrentSize + PackageSize
            Loop
        Else
            hFile = FreeFile()
            Open SaveAs For Binary As hFile
            
            Do While lngCurrentSize < lngActualSize
                vTemp = dbField.GetChunk(PackageSize)
                
                bTemp = vTemp
                Put #hFile, , bTemp
                
                vData = vData & vTemp
                lngCurrentSize = lngCurrentSize + PackageSize
            Loop
            
            Close
        End If
        
        GetFileFromDB = 0
        
        Exit Function
    errHandle:
        GetFileFromDB = Err.Number
    End Function
    Public Function SaveFileToDB(ByVal Filename As String, dbField As ADODB.Field, Optional PackageSize As Long = 8192&) As Long
        On Error GoTo errHandle
        Dim lngActualSize As Long, lngCurrentSize As Long
        Dim vTemp As Variant, bTemp() As Byte
        Dim hFile As Long
        
        Dim i As Integer
        Dim lChunkCount As Long
        Dim lChunkRemainder As Long
        
        lngActualSize = FileLen(Filename)
        lngCurrentSize = 0
        
        If lngActualSize <= 0 Then
            Err.Raise ERR_SIZE_EQU_OR_LESS_ZERO, "writeFileToDB"
        End If
        
        '读取文件内容
        hFile = FreeFile()
        Open Filename For Binary As hFile
        ReDim bTemp(PackageSize) '临时存贮块
        lChunkCount = (LOF(hFile) - Seek(hFile) + 1) \ PackageSize    '取块数
        lChunkRemainder = (LOF(hFile) - Seek(hFile) + 1) Mod PackageSize '取整块后余下的数据
        
        For i = 1 To lChunkCount
            Get hFile, , bTemp '从文件中取出一块
            dbField.AppendChunk (bTemp)  '将块写入字段中
        Next
        
        If lChunkRemainder > 0 Then
            ReDim bTemp(PackageSize) '临时存贮块
            Get hFile, , bTemp   '取出该块
            dbField.AppendChunk (bTemp) '写入字段中
        End If
        Close
        
        'MsgBox dbField.ActualSize
        
        SaveFileToDB = 0
        
        Exit Function
    errHandle:
        SaveFileToDB = Err.Number
        
    End Function