Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring

_Créditos das imagens: ChatGPT_ ### LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring Resolver o problema do [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/description/) é um exercício clássico de programação, que desafia desenvolvedores a encontrar a maior substring palindrômica dentro de uma string. Recentemente, exploramos soluções tanto em Harbour quanto em TLPP (Total Language Protheus Programming). Neste artigo, comparamos as implementações nessas duas linguagens, destacando suas semelhanças, diferenças e funcionalidades específicas. #### Implementações em Harbour ##### Versão 5.1 Essa solução utiliza a técnica de expansão a partir do centro do palíndromo. Cada caractere ou par de caracteres consecutivos é considerado um possível "centro". O algoritmo expande em ambas as direções enquanto os caracteres forem iguais, retornando o maior palíndromo encontrado. ##### Versão 5....

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).
MV_REPOSIT (Conteúdo) MV_REPOSIT (Descrição)
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:
PROTHEUS_REPOSIT
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

Comentários

  1. Naldo você é incrível! Não sei se você tem noção do tamanho da ajuda que você nos proporciona...
    Eu 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?

    ResponderExcluir
    Respostas
    1. Utilize a classe TBmpRep : Classe responsável pela manipulação (inserção, alteração, exclusão e visualização) do repositório de imagens.

      http://tdn.totvs.com.br/display/public/mp/TBmpRep

      Excluir
  2. Naldo é 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 ?

    ResponderExcluir
  3. Naldo!!
    Obrigada pela ajuda de sempre!!

    Abs,

    ResponderExcluir

Postar um comentário

Postagens mais visitadas