'保存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
几种办法,首先你可以保存好坐标、颜色、线宽度等,把这些数据保存到数据库中,下次进来重绘;另外,你可以利用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
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)
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
'下次打开时动态添加控件即可,例如
'你第一次画的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
这里提供给你两个函数,可以往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