Ir al contenido principal

Como guardar un PDF en un campo de una tabla en SQL SERVER utilizando PowerBuilder

1.- Crea un campo de tipo image en la tabla donde deseas guardar tu archivo.
2.- Luego lees el archivo pdf del path donde se encuentre
3.- Seguidamente actualizas el contenido leido en el campo de la tabla
Supongamos que tenemos una tabla que se llama prueba y utiliza una llave
unica sobre el campo tmp_llave. El campo campo image se llama tmp_archivo.
// Declaramos nuetros campos de tipo blog
blob lbl_data
blob lbl_temp
long ll_file, ll_long = 0, ll_tam
integer li_pos = 1
// leemos el archivo
ll_file = FileOpen("c:\temp\prueba.pdf",streammode!)
// barremos sus registros
Do While FileRead(ll_file,lbl_temp) > 0
lbl_data += lbl_temp
Loop
// cerramos el archivo
FileClose(ll_file)
// actualizamos nuestra base de datos
UPDATEBLOB prueba SET prueba.tmp_archivo = :lbl_data WHERE
prueba.tmp_llave = :li_llave;
// Para recuperar y mostrar el archivo:
SELECTBLOB tmp_archivo INTO :lbl_data FROM prueba WHERE
prueba.tmp_llave = :li_llave;
ll_file FileOpen("c:\temp\prueba2.pdf",StreamMode!,Write!)
ll_tam = len(lbl_data)
if ll_tam <= 32766 then
FileWrite(ll_file,lbl_data)
else
Do
lbl_temp = BlobMid(lbl_data,li_pos,32765)
ll_long = ll_long + FileWrite(ll_file,lbl_temp)
li_pos = li_pos + 32765
Loop While ll_long <= ll_tam
end if
// fin de la solucion

Comentarios

  1. Muy bueno el ejemplo, yo tengo varios dis buscando como hacer esto pero desde visual basic 6.0 y sql server 2000, por casualidad sabes como hacerlo?
    Me ayudaras muchisimo si me das almenos una idea, y me ahorraras muchos dias mas en mi busqueda.
    Te dejo mi mail por si acaso:
    e2mch@hotmail.es
    Muchas gracias desde ya

    ResponderEliminar
  2. Hola Alonso en realidad me parece interesante tu algoritmo ... pero si en determinado caso, quiero abrir el pdf sin indicarle la ruta exacta, es decir jalar desde el campo binario donde guarde.

    Saludos

    ResponderEliminar
  3. Dim ms1 As New System.IO.MemoryStream
    Do While rdrbusqueda.Read()
    If Not rdrbusqueda.IsDBNull(0) Then
    retval = rdrbusqueda.GetBytes(0, 0, outbyte, 0, buffersize)
    ms1 = New System.IO.MemoryStream(outbyte)
    mencontro = True
    End If
    Loop

    If mencontro Then
    pbProducto.Image = Image.FromStream(ms1)
    pbProducto.SizeMode = PictureBoxSizeMode.StretchImage ' Para ajustar la imagen al tamaño del objeto
    pbProducto.Invalidate()

    End If

    ResponderEliminar
  4. uhmmm.... en power builder no habra una forma??, o necesariamente armarlo en visual

    ResponderEliminar
  5. Hola quiero guardar una imagen en 3D en SQL Server y mostrar en Power Builder 11.5 nose si me podias ayudarme
    te dejo mi correo: gladyscc@hotmail.es

    ResponderEliminar
  6. esto esta bien pero cuando lo quiero vizualizar las paginas me las muestras unas en negro y otras bien , y las imagenes salen descoloridas, pero miro el original y estan bien

    ResponderEliminar
  7. esto esta bien pero al vizualizarlo las imagenes me salen descoloridas y distorcionadas, al igual algunas paginas me salen en negro y otras bien que puedo hacer helllllll

    ResponderEliminar
  8. Quiero abrir un pdf de mi base de datos oracle de un campo blob para imprimirlo.
    alguien me puede ayudar

    ResponderEliminar
  9. Alguien me puede ayudar tengo un campo blob y tengo un pdf guardado ahí quiero visualizarlo o colocarlo en algún lugar de mi pc para poder imprimirlo.
    Me podrian ayudar

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

GUARDAR DOCUMENTOS PDF EN LA BASE DE DATOS SQLSERVER DESDE .NET

Personalmente quiero contarles que para mi este proceso ha sido muy escabroso,he dedicado muchas horas de investigacion para encontrar la forma de hacerlos lo más sencillo posible. Anteriormente había guardado imagenes en la base de datos utilizando compos de tipo imagen, pero luego revisando la documentacion de sqlserver 2005 encontre que en el futuro este tipo de campo podría ser descartado, esto me llevo a buscar otras alternativas especialmente con los campos binarios o (varbinary(max)) . PASOS: 1.- Primero declare las siguientes variables de clase en su formulario windows form Dim fdlg As New OpenFileDialog Dim fs As System.IO.FileStream Dim mcorr_documento As Int32 Dim bw As System.IO.BinaryWriter ----- fin de las variables de clase 2.- Seguidamente en su formulario pegue un objeto de tipo OpenFileDialog que le servira para buscar el archivo que desea almacenar en la base de datos 3.- Cree un objeto de tipo Combo y agregue una lista de los tipos de archivos q...

REPARAR BASE DE DATOS EN ESTADO SOSPECHOSO (SUSPECT) SQL SERVER

Para reparar una base de datos que esté en este estado,  bastará con lanzar sobre ella cuatro consultas , estas cuatro: ALTER DATABASE NOMBREBBDD SET EMERGENCY; ALTER DATABASE NOMBREBBDD SET SINGLE_USER; DBCC CHECKDB (NOMBREBBDD, REPAIR_ALLOW_DATA_LOSS); ALTER DATABASE NOMBREBBDD SET MULTI_USER; Gracias a estos comandos y especialmente al del punto número tres,  estaremos solicitando una reparación de la misma, logrando así el resultado esperado en muchos de los casos  de bases de datos sospechosas. Si no hemos logrado el resultado esperado , también podemos realizar esta otra consulta: DBCC checkdb (NOMBREBBDD , REPAIR_REBUILD); Obviamente, en todos los casos  debemos sustituir  NOMBREBBDD  por el nombre real  de nuestra base de datos y también debemos contar con los privilegios necesarios para llevar a cabo esta tarea, pero es algo que dabamos por hecho. * Tomado de rootear.