我有一个MS Access 2010应用程序。我有一个带有名为InkSign的inkPicture控件的表单,用户可以在其中放置签名。我将inkPicture控件的内容存储在名为sig的青少年变量中,如下所示:
sig = Me.InkSign.Ink.save()
现在我可以使用以下方法将此变量数据读回到控件中:
Dim newInk As New InkDisp
newInk.Load sig
Me.InkSign.Ink.DeleteStrokes
Me.InkSign.InkEnabled = False
Set InkSign.Ink = newInk
Me.InkSign.InkEnabled = True
我想保留并读回SQL Server数据库表中的签名数据。
我已经尝试过:
Private Sub btnSaveSig_Click()
Dim rst As ADODB.Recordset
sig = Me.InkSign.Ink.save()
Set rst = New ADODB.Recordset
With rst
'.CursorLocation = adUseClient
.Open "SELECT * FROM sign WHERE signID = 1", cnnC, adOpenKeyset, adLockOptimistic
If .BOF And .EOF Then .AddNew
.Fields("signDate") = Date
.Fields("signedBy") = "Pipo"
.Fields("sign") = sig
.Fields("docType") = "so"
.Fields("docID") = "1"
.Update
.Close
End With
Set rst = Nothing
MsgBox "signature saved"
End Sub
sign
列的类型为NVARCHAR(MAX)
。数据已存储,但看起来像汉字。但这是存储二进制数据的正确方法吗?
我正在尝试回读数据,但在此行上失败:newInk.Load sig
Private Sub LoadSignature()
Dim newInk As New InkDisp
sig = Nz(cLookup("sign", "sign", "signID = 1"), "")
If IsEmpty(sig) Then Exit Sub
newInk.Load sig
Me.InkSign.Ink.DeleteStrokes
Me.InkSign.InkEnabled = False
Set InkSign.Ink = newInk
Me.InkSign.InkEnabled = True
End Sub
clookup函数是从SQL Server表中检索数据的函数。我得到的错误是
无效的过程调用或参数
我认为我应该使用ADO流对象来写和读回数据。但我不知道如何。
有人可以帮助我使此代码正常工作吗?
感谢Emphyrio
尝试,未测试。
Private Sub btnSaveSig_Click()
Dim rst As ADODB.Recordset
Dim oStream As ADODB.Stream
Dim fn As String
sig = Me.InkSign.Ink.Save()
'Set rst = New ADODB.Recordset
Set oStream = New ADODB.Stream
fn = "c:\myImageFile" '<~~"Your image file path"
With oStream
.Type = adTypeBinary
.Open
.LoadFromFile fn
End With
If oStream.Size > 0 Then
With rst
'.CursorLocation = adUseClient
.Open "SELECT * FROM sign WHERE signID = 1", cnnC, adOpenKeyset, adLockOptimistic
If .BOF And .EOF Then .AddNew
.Fields("signDate") = Date
.Fields("signedBy") = "Pipo"
.Fields("sign") = oStream.Read '<~~ image read
.Fields("docType") = "so"
.Fields("docID") = "1"
.Update
.Close
End With
End If
Set rst = Nothing
oStream.Close
Set oStream = Nothing
MsgBox "signature saved"
End Sub