BlackTDN :: PROTHEUS_REPOSIT
Em função de uma dúvida levantada por Marcelo Sanches(*) e a uma ajuda à minha amiga Priscila Castro na verificação de problemas de impressão do logo na Ficha de Registro, descobri, recente e acidentalmente, que é possível armazenar as imagens do SIGAADV.BMD no SGBD/DBMS.
(*)
Existe uma forma de conseguir acessar imagens armazenadas em SGBD em formato binário através do Protheus e exibi-las em tela como imagens, por exemplo, na tabela SB1?
Por motivos de segurança a empresa em que eu trabalho não quer mais armazenar os arquivos JPEG numa pasta no servidor, como é hoje, no repositório de imagens e sim no SGBD. Você tem algum "case" estudado para isso? Abraços, Sanches |
De fato a implementação dessa alteração é muito simples.
Basta incluir a chave RepositInDataBase=1 no .ini do Protheus Server essa chave trabalha em conjunto com o parâmetro MV_REPOSIT (Indica o tipo de armazenamento do repositório de imagens. 1=Genérico, 2=Por modulo, 3=Especifico).
Ao fazer isso o sistema irá criar a tabela PROTHEUS_REPOSIT no SGBD com as seguintes colunas: BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,MEMO,D_E_L_E_T_,R_E_C_N_O_.
A carga das informações contidas no arquivo SIGAADV.BMD é feita automaticamente a partir da primeira manutenção na tabela e, em função disso, recomendo que a modificação seja feita quando ninguém estiver utilizando o sistema.
O Protheus irá armazenar as informações da seguinte forma:
Recuperando-as utilizando as seguintes instruções obtidas a partir do dbAccess.
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ?
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 2 )
tDBServer::GoTo -- Goto 2 on Table PROTHEUS_REPOSIT [OK]
tMSSQLConnection::SetRowCount SET ROWCOUNT 40
tISAMFile::GoTop SELECT R_E_C_N_O_ FROM dbo.PROTHEUS_REPOSIT WHERE D_E_L_E_T_ = ' ' ORDER BY BMPNAME,ALIAS,SEQ,R_E_C_N_O_
tISAMFile::GoTop -- Load [19] record(s) to IsamCache
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 1 )
tDBServer::First -- First Recno 1 on Table PROTHEUS_REPOSIT [OK]
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 1
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 2 )
tDBServer::Skip -- End Skip to 2
tDBServer::BlobRead -- BLOB Read on PROTHEUS_REPOSIT Id 6 Recno 0 Length 0
tODBCStatement::GetBlob SELECT MEMO FROM PROTHEUS_REPOSIT WHERE R_E_C_N_O_ = 2
tDBServer::BlobRead -- BLOB Read on PROTHEUS_REPOSIT Id 6 Recno 2 Length 65001
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 2
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 3 )
tDBServer::Skip -- End Skip to 3
tDBServer::BlobRead -- BLOB Read on PROTHEUS_REPOSIT Id 6 Recno 0 Length 0
tODBCStatement::GetBlob SELECT MEMO FROM PROTHEUS_REPOSIT WHERE R_E_C_N_O_ = 3
tDBServer::BlobRead -- BLOB Read on PROTHEUS_REPOSIT Id 6 Recno 3 Length 5615
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 3
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 4 )
tDBServer::Skip -- End Skip to 4
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 4
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 5 )
tDBServer::Skip -- End Skip to 5
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 5
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 6 )
tDBServer::Skip -- End Skip to 6
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 6
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 7 )
tDBServer::Skip -- End Skip to 7
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 7
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 8 )
tDBServer::Skip -- End Skip to 8
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 8
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 9 )
tDBServer::Skip -- End Skip to 9
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 9
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 10 )
tDBServer::Skip -- End Skip to 10
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 10
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 11 )
tDBServer::Skip -- End Skip to 11
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 11
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 12 )
tDBServer::Skip -- End Skip to 12
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 12
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 13 )
tDBServer::Skip -- End Skip to 13
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 13
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 14 )
tDBServer::Skip -- End Skip to 14
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 14
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 15 )
tDBServer::Skip -- End Skip to 15
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 15
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 16 )
tDBServer::Skip -- End Skip to 16
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 16
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 17 )
tDBServer::Skip -- End Skip to 17
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 17
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 18 )
tDBServer::Skip -- End Skip to 18
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 18
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 19 )
tDBServer::Skip -- End Skip to 19
tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 19
tDBServer::Skip -- End Skip - [NO_RECORD_FOUND] [EOF]
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 2 )
tDBServer::GoTo -- Goto 2 on Table PROTHEUS_REPOSIT [OK]
[]s
иαldσ dj
иαldσ dj
Naldo você é incrível! Não sei se você tem noção do tamanho da ajuda que você nos proporciona...
ResponderExcluirEu preciso exatamente disto, guardar imagens no BD (fotos) e, aproveitando da sua boa vontade, existe alguma função no Protheus para que eu visualize a imagem?
Utilize a classe TBmpRep : Classe responsável pela manipulação (inserção, alteração, exclusão e visualização) do repositório de imagens.
Excluirhttp://tdn.totvs.com.br/display/public/mp/TBmpRep
Obrigado!
ExcluirNaldo é possível usar o repositório de imagens com uma tabela customizada, usando a classe TBmpRep para recuperar as imagens e gravá-las no SGBD diretamente ?
ResponderExcluirNaldo!!
ResponderExcluirObrigada pela ajuda de sempre!!
Abs,