kesho
07-08-2004, 09:59 AM
I am having problems working out how to bind a picturebox to a ADO recorset to save and load pictures to a database.
I have tried the following:
Option Explicit
Dim cnnCurtID As ADODB.Connection
Dim rstID As New ADODB.Recordset
Private Sub cmdExit_Click()
Unload Me
End Sub
Private Sub cmdLoad_Click()
If Not IsNumeric(Text1) Then Exit Sub
If rstID.State = adStateOpen Then rstID.Close
rstID.Open "SELECT * FROM ID WHERE MemberNo = " & txtMemNo & " ;", cnnCurtID, adOpenStatic, adLockOptimistic
If Not rstID.EOF Then
Set Signature.DataSource = rstID
Signature.DataField = "Signature"
End If
End Sub
Private Sub cmdSave_Click()
If Not IsNumeric(txtMemNo) Then Exit Sub
If rstID.EOF = True Then
rstID.AddNew
End If
rstID!MemberNo = CLng(txtMemNo)
rstID.Update
End Sub
Private Sub cmdSignature_Click()
If BrowseToFile(CD, "Signature.bmp", "Bitmap files (*.bmp)|*.bmp|JPeg files (*.jpg)|*.jpg", "Open Signature file", , App.Path) = False Then
MsgBox "Signature import cancelled", vbInformation + vbOKOnly, "Error"
Exit Sub
End If
Signature.Picture = LoadPicture(CD.FileName)
cmdSave.Enabled = True
End Sub
Private Sub Form_Load()
Set cnnCurtID = New ADODB.Connection
cnnCurtID.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\data\CurtID.mdb;Persist Security Info=False"
cnnCurtID.Open
End Sub
Private Sub Form_Unload(Cancel As Integer)
If cnnCurtID.State = adStateOpen Then cnnCurtID.Close
If rstID.State = adStateOpen Then rstID.Close
Set cnnCurtID = Nothing
Set rstID = Nothing
End Sub
Private Sub txtMemNo_Change()
txtMemNo.SelStart = 0
txtMemNo.SelLength = Len(txtMemNo)
If Not IsNumeric(txtMemNo) Then Exit Sub
If rstID.State = adStateOpen Then rstID.Close
rstID.Open "SELECT * FROM ID WHERE MemberNo = " & txtMemNo & " ;", cnnCurtID, adOpenStatic, adLockOptimistic
If Not rstID.EOF Then
lblEOF.Visible = False
Set Signature.DataSource = rstID
Signature.DataField = "Signature"
Else
lblEOF.Visible = True
End If
End Sub
Private Sub txtMemNo_GotFocus()
txtMemNo.SelStart = 0
txtMemNo.SelLength = Len(txtMemNo)
End Sub
Which works in a similar way to how I used to do it with a DataControl. However this does not seem to work in this case.
Any suggestions would be appreciated, as I am sure that I am just missing soneting simple.
I have tried the following:
Option Explicit
Dim cnnCurtID As ADODB.Connection
Dim rstID As New ADODB.Recordset
Private Sub cmdExit_Click()
Unload Me
End Sub
Private Sub cmdLoad_Click()
If Not IsNumeric(Text1) Then Exit Sub
If rstID.State = adStateOpen Then rstID.Close
rstID.Open "SELECT * FROM ID WHERE MemberNo = " & txtMemNo & " ;", cnnCurtID, adOpenStatic, adLockOptimistic
If Not rstID.EOF Then
Set Signature.DataSource = rstID
Signature.DataField = "Signature"
End If
End Sub
Private Sub cmdSave_Click()
If Not IsNumeric(txtMemNo) Then Exit Sub
If rstID.EOF = True Then
rstID.AddNew
End If
rstID!MemberNo = CLng(txtMemNo)
rstID.Update
End Sub
Private Sub cmdSignature_Click()
If BrowseToFile(CD, "Signature.bmp", "Bitmap files (*.bmp)|*.bmp|JPeg files (*.jpg)|*.jpg", "Open Signature file", , App.Path) = False Then
MsgBox "Signature import cancelled", vbInformation + vbOKOnly, "Error"
Exit Sub
End If
Signature.Picture = LoadPicture(CD.FileName)
cmdSave.Enabled = True
End Sub
Private Sub Form_Load()
Set cnnCurtID = New ADODB.Connection
cnnCurtID.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\data\CurtID.mdb;Persist Security Info=False"
cnnCurtID.Open
End Sub
Private Sub Form_Unload(Cancel As Integer)
If cnnCurtID.State = adStateOpen Then cnnCurtID.Close
If rstID.State = adStateOpen Then rstID.Close
Set cnnCurtID = Nothing
Set rstID = Nothing
End Sub
Private Sub txtMemNo_Change()
txtMemNo.SelStart = 0
txtMemNo.SelLength = Len(txtMemNo)
If Not IsNumeric(txtMemNo) Then Exit Sub
If rstID.State = adStateOpen Then rstID.Close
rstID.Open "SELECT * FROM ID WHERE MemberNo = " & txtMemNo & " ;", cnnCurtID, adOpenStatic, adLockOptimistic
If Not rstID.EOF Then
lblEOF.Visible = False
Set Signature.DataSource = rstID
Signature.DataField = "Signature"
Else
lblEOF.Visible = True
End If
End Sub
Private Sub txtMemNo_GotFocus()
txtMemNo.SelStart = 0
txtMemNo.SelLength = Len(txtMemNo)
End Sub
Which works in a similar way to how I used to do it with a DataControl. However this does not seem to work in this case.
Any suggestions would be appreciated, as I am sure that I am just missing soneting simple.