Página 1 de 1

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Enviado: 30 Mai 2020 22:08
por Fernando queiroz
Segui as instruções como encontrei no site do MARIADB e usei

UPDATE PAGAR SET PAGAR.RECIBO=LOAD_FILE( 'C:/TEMP/XMLPDFPAGAR/004947444_01.PDF') WHERE PAGAR_ID ='00000000001'

mas o PDF nao foi carregado no banco, to meio perdido com o assunto, alguem ja usa esse tipo

criei o campo RECIBO LONGBLOB , MAS MESMO assim nao consegui exito

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Enviado: 31 Mai 2020 08:39
por tonicm
Eu uso assim no Mysql.
Espero ter ajudado.

Criar a tabela:

Código: Selecionar todos

      ExecutaMySQL( "CREATE TABLE `pdf_ficheiros` ( "+;
                    "   `ID` SMALLINT(6) NOT NULL AUTO_INCREMENT, "+;
                    "   `NOME` VARCHAR(50) NOT NULL, "+;
                    "   `FICHEIRO` MEDIUMBLOB NOT NULL, "+;
                    "   UNIQUE INDEX `ID` (`ID`) "+;
                    ") "+;
                    "COLLATE='utf8_general_ci' "+;
                    "ENGINE=InnoDB "+;
                    ";" )

Gravar o ficheiro na base de dados:

Código: Selecionar todos

PROCEDURE GRAVAR_BLOB( XCAMINHO, XFILE )
   LOCAL h1, tamanho, h4

   h1 := FOpen(XCAMINHO+XFILE)          // abre o arquivo de imagem para leitura
   tamanho := FSeek(h1, 0, 2)           // move o ponteiro pelo arquivo até o fim para pegar o tamanho
   FSeek(h1, 0, 0)                      // volta para o início
   h4 := Space(tamanho)                 // declara variável para receber o conteúdo do arquivo
   FRead(h1, @h4, tamanho)              // faz a leitura do conteúdo do arquivo jogando-a na variável de memória
   FClose(h1)                           // fecha o arquivo
   h4 := hb_base64Encode(h4, tamanho)   // converte o conteúdo do arquivo em base64

   ExecutaMySQL( "INSERT INTO pdf_ficheiros(NOME,FICHEIRO) "+;
                 "SELECT '"+XFILE+"','"+h4+"'" )
RETURN
Gravar o ficheiro no disco:

Código: Selecionar todos

PROCEDURE LER_BLOB(XID)
   oRsxB := ExecutaMySQL( "SELECT NOME,FICHEIRO "+;
                          "FROM pdf_ficheiros "+;
                          "WHERE ID="+ALLSTR(XID) )
   XiJPG := oRsxB:Fields( 1 ):Value
   iJPG := Array( 1, 1 )
   iJPG[1, 1] := XiJPG

   sJPG := hb_base64Decode( iJPG[1, 1] )                        // decodifica o conteúdo do campo blob (iJPG[1,1] é o resultado da sentença SQL)
   hJPG := FCreate("C:\TEMP\"+oRsxB:Fields( 0 ):Value, 0)       // cria um arquivo
   oRsxB:Close()
   FWrite(hJPG, sJPG)                                           // carrega o conteúdo do campo no arquivo
   FClose(hJPG)
RETURN

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Enviado: 31 Mai 2020 12:46
por Vlademiro
Muito interessante. Uma dúvida: já li, na internet, que o uso de campos do tipo BLOB compromete a performance do banco. Minha pergunta é: na prática isso tem acontecido com você ? Quantos registros a sua tabela tem ?

Notei que vc criou uma tabela só para armazenar esses arquivos. Essa medida tem lhe ajudado ?

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Enviado: 31 Mai 2020 15:39
por tonicm
Utilizo BLOB em várias tabelas, mas ainda tenho poucos registos - a maior tem pouco mais de 550 registos.
Nesta tabela do meu exemplo guardei apenas o ficheiro, mas tenho outras tabelas com vários dados além do campo BLOB.
Acho que depende dos dados que precisa armazenar, não é necessariamente obrigatório guardar os campos BLOB numa tabela à parte.
Para já não tive qualquer problema.

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Enviado: 31 Mai 2020 17:41
por Fernando queiroz
FIZ a opcao de gravar em uma tabela somente de recibos acho que fica melhor e todas as rotinas que geram recibos quardam la

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Enviado: 31 Mai 2020 18:43
por ANDRIL
Só em questão de armazenamento no DB, lembre-se que ao converter para base64 o conteúdo do arquivo aumenta consideravelmente.

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Enviado: 31 Mai 2020 19:15
por Fernando queiroz
Rotina pronta ficou super legal e muito rápida, valeu a ajuda tonicm
ja estou gravando PDF, JPG

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Enviado: 20 Jul 2021 17:59
por pauloa1
Olá Tonicm!!!

Vi que vc criou o campo tipo FICHEIRO = MEDIUMBLOB NOT NULL

Saberia dizer qual tipo de campo seria no postgresql ?

Paulo

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Enviado: 21 Jul 2021 11:23
por Itamar M. Lins Jr.
Olá!

https://www.convert-in.com/mysql-to-pos ... apping.htm

Saudações,
Itamar M. Lins Jr.

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Enviado: 22 Jul 2021 14:31
por pauloa1
Obrigado Itamar!!