COMO GRAVAR UM PDF NO BANCO MARIADB ?

Forum sobre SQL.

Moderador: Moderadores

Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Mensagem 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
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
tonicm
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 08 Mar 2016 21:51
Localização: Porto

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Mensagem 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
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Mensagem 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 ?
tonicm
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 08 Mar 2016 21:51
Localização: Porto

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Mensagem 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.
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Mensagem 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
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Mensagem por ANDRIL »

Só em questão de armazenamento no DB, lembre-se que ao converter para base64 o conteúdo do arquivo aumenta consideravelmente.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Mensagem por Fernando queiroz »

Rotina pronta ficou super legal e muito rápida, valeu a ajuda tonicm
ja estou gravando PDF, JPG
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
pauloa1
Usuário Nível 3
Usuário Nível 3
Mensagens: 227
Registrado em: 25 Jun 2008 14:57
Localização: Augusto Pestana-RS

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Mensagem 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
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Mensagem por Itamar M. Lins Jr. »

Olá!

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

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
pauloa1
Usuário Nível 3
Usuário Nível 3
Mensagens: 227
Registrado em: 25 Jun 2008 14:57
Localização: Augusto Pestana-RS

COMO GRAVAR UM PDF NO BANCO MARIADB ?

Mensagem por pauloa1 »

Obrigado Itamar!!
Responder