Bom dia a todos,
Estou com uma dúvida quanto a inserir/atualizar registros com arquivo de imagem no banco mysql formato blob.
Sei que não é o ideal devido ao tamanho do banco / performance, mas é uma exigência do cliente!
banco de dados = mysql
access = 2019
formato do campo imagem = blob
Tenho o seguinte código para inserir os registros:
Lendo as mensagens do forum sobre assuntos relacionados, encontrei o seguinte para salvar arquivos:
Quando tento incluir o registro recebo um erro em rs.Fields("pt02arquivo").Value = mstream.Read.
---------------------------
Erro
---------------------------
Erro: 3251 - O conjunto de registros atual não oferece suporte para atualização. Isso pode ser uma limitação do provedor ou do tipo de bloqueio selecionado.
---------------------------
OK
---------------------------
Peço por favor ajuda dos mestres do forum de como adaptar os códigos e conseguir salvar o registro com o arquivo.
Para fazer o download do arquivo para uma pasta x ao clicar em um botão tenho esse código que consegui aqui no forum e que irei tentar usar quando a inclusão for bem sucedida.
Desde já agradeço a ajuda de todos.
Obrigado
Estou com uma dúvida quanto a inserir/atualizar registros com arquivo de imagem no banco mysql formato blob.
Sei que não é o ideal devido ao tamanho do banco / performance, mas é uma exigência do cliente!
banco de dados = mysql
access = 2019
formato do campo imagem = blob
Tenho o seguinte código para inserir os registros:
- Código:
Call fnConn
sSQL = "INSERT INTO pt02itens " _
& "(pt02idfilial ,pt02idprojetos ,pt02tipodesenho, pt02arquivo , pt02nomearquivo ," _
& "pt02datacad ,pt02dataaut , pt02idusuariocad )" _
& "VALUES " _
& "(" & TempVars!varidFilial & " ,'" & pt01idprojetos & "' ,'" & pt02tipodesenho & "' ,'" & pt02arquivo & "' ,'" & pt02nomearquivo & "' , " _
& "'" & Format(Date, "yyyy-mm-dd") & "' ,'" & Format(Now, "yyyy-mm-dd hh:mm:ss") & "' , " & TempVars!varidusuario & ")"
cn.Execute sSQL
cn.Close
Lendo as mensagens do forum sobre assuntos relacionados, encontrei o seguinte para salvar arquivos:
- Código:
Dim mstream As ADODB.Stream
Call fnConn
sSQL = ("SELECT * FROM pt02itens WHERE pt02iditens = " & pt02iditens & "")
rs.Open sSQL, cn, adOpenKeyset ', adLockReadOnly
If Len(strfName) > 0 Then
Set mstream = New ADODB.Stream
mstream.type = adTypeBinary
mstream.Open
mstream.LoadFromFile strfName
rs.Fields("pt02arquivo").Value = mstream.Read
rs.Update
End If
rs.Close
cn.Close
Quando tento incluir o registro recebo um erro em rs.Fields("pt02arquivo").Value = mstream.Read.
---------------------------
Erro
---------------------------
Erro: 3251 - O conjunto de registros atual não oferece suporte para atualização. Isso pode ser uma limitação do provedor ou do tipo de bloqueio selecionado.
---------------------------
OK
---------------------------
Peço por favor ajuda dos mestres do forum de como adaptar os códigos e conseguir salvar o registro com o arquivo.
Para fazer o download do arquivo para uma pasta x ao clicar em um botão tenho esse código que consegui aqui no forum e que irei tentar usar quando a inclusão for bem sucedida.
- Código:
Private Sub btDown_Click()
Dim intChoice As Integer
Dim strPath As String, strSQL As String
Dim strFilename As String
Dim strAttachN As String
'''''''Exporta o arquivo do banco de dados
Call fnConn
sSQL = ("SELECT * FROM pt02itens WHERE pt02iditens = " & pt02iditens & "")
rs.Open sSQL, cn, adOpenKeyset, adLockReadOnly
On Error Resume Next ' Aqui você pode tratar o erro, pois quando o campo da atbela aparece vazia, ocorre erro, porém, nesse caso, o Resume Next funciona perfeitamente.
strFilename = rs.Fields("pt02nomearquivo")
strAttachN = rs.Fields("pt02arquivo").Value
If strAttachN = "" Then
MsgBox "Documento não disponível para download!", vbInformation, "Aviso"
Exit Sub
Else
''''''Salvar como
Application.FileDialog(msoFileDialogSaveAs).Title = "Salvar como"
'nome inicial do ficheiro
Application.FileDialog(msoFileDialogSaveAs).InitialFileName = strFilename
'mostrar
intChoice = Application.FileDialog(msoFileDialogSaveAs).Show
'determinar escolha
If intChoice <> 0 Then
'obter o caminho do arquivo selecionado pelo usuário
strPath = Application.FileDialog(msoFileDialogSaveAs).SelectedItems(1)
End If
On Error GoTo Fim
Set mstream = New ADODB.Stream
mstream.type = adTypeBinary
mstream.Open
mstream.Write rs.Fields("pt02arquivo").Value
mstream.SaveToFile (strPath), adSaveCreateOverWrite
rs.Close
cn.Close
If MsgBox("O download do arquivo foi realizado com sucesso!" & vbCrLf & strPath & vbCrLf & "Deseja abrir o arquivo?", vbQuestion + vbYesNo, "Aviso") = vbYes Then
Shell "explorer.exe " & strPath, vbMaximizedFocus
End If
End If
Fim:
If err.Number = 3001 Then
MsgBox "Download cancelado!", vbInformation, "Aviso"
rs.Close
cn.Close
Cancel = True
End If
End Sub
Desde já agradeço a ajuda de todos.
Obrigado