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

Como reparar una DB SQL

En muchas ocasiones nuestra base de datos en sqlserver 2000 se puede dañar por fallas debido a que nuestro servidor se reinicia de manera inesperada o la memoria RAM o el disco duro tienen algunos problemas. Esto origina que en la base de datos se corrompan algunos objetos como tablas o índices. Cuando tratamos de seleccionar registros en nuestra tabla nos da un error grave del ( DBPROCESS is dead, Error Severities) Aquí es donde inicia nuestro problema, no podemos acceder a los registros de la tabla; la razón puede ser según el nivel de severidad del error, estos niveles están categorizados así: EXINFO 1 Informational, nonerror. EXUSER 2 User error. EXNONFATAL 3 Nonfatal error. EXCONVERSION 4 Error in DB-Library data conversion. 5 The server has returned an error flag. EXTIME 6 Time-out period exceeded while waiting for a response from the server; the DBPROCESS is still alive. EXPROGRAM 7 Coding error in user program. EXRESOURCE 8 Running out of resources; the DBPROCESS ma