PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 28 → Guardar ficheros fisicos en base de datos HFSQL
Guardar ficheros fisicos en base de datos HFSQL
Débuté par Juan, 16 avr. 2017 09:08 - 11 réponses
Posté le 16 avril 2017 - 09:08
Hola y gracias,
Quiero guardar ficheros fisicos Word o excel o rtf directamente en la base de datos HFSQL, como puedo hacerlo si incluyo un selector de ficheros en disco duro y luego lo intento guardar en un campo de la tabla de mi base de datos.
Gracias
Posté le 18 avril 2017 - 13:55
Hola Juan

Aqui tienes un link explica entre otras cosas como guardar una imagen .



PD:Esta en portugués pero se entiende.

espero que te sirva.

Saludos
victor
Posté le 20 avril 2017 - 23:30
Que tal Juan.

Hay dos formas de guardar ficheros físicos en la BD la primera de ellas haciendo uso de FloadBuffer

Se utiliza de la siguiente forma

bufFile is Buffer = fLoadBuffer("c:\escritorio\archivoejemplo.docx")
TablaBD.CampoTabla = bufFile

Y luego solo haría falta guarda con hadd,el ejemplo completo sería algo como:

Hreset(TablaBD)
bufFile is Buffer = fLoadBuffer("C:\escritorio\archivo.docx")
TablaBD.CampoTabla = bufFile
Hadd(TABLABD)

La otra forma es haciendo uso de Hlinkmemo

Hreset(TablaBD)
HLinkMemo(TABLABD, CampoTabla , ""C:\escritorio\archivo.docx")
HAdd(TABLABD)

Si luego quieres extraer la información sería algo como

HReadSeekFirst(TablaBD, ID, 1)
IF HFound THEN
fSaveBuffer("C:\escritorio\archivo.docx", TablaBD.CampoTabla)
ELSE
Error("HFSQL error: " + HErrorInfo())
END


Espero el comentario sea claro y le sirva de ayuda.

Saludos!
Membre enregistré
8 messages
Posté le 20 avril 2017 - 23:44
Que tal Juan.

Hay dos formas de guardar ficheros físicos en la BD la primera de ellas haciendo uso de FloadBuffer

Se utiliza de la siguiente forma

bufFile is Buffer = fLoadBuffer("c:\escritorio\archivoejemplo.docx")
TablaBD.CampoTabla = bufFile

Y luego solo haría falta guarda con hadd,el ejemplo completo sería algo como:

Hreset(TablaBD)
bufFile is Buffer = fLoadBuffer("C:\escritorio\archivo.docx")
TablaBD.CampoTabla = bufFile
Hadd(TABLABD)

La otra forma es haciendo uso de Hlinkmemo

Hreset(TablaBD)
HLinkMemo(TABLABD, CampoTabla , ""C:\escritorio\archivo.docx")
HAdd(TABLABD)

Si luego quieres extraer la información sería algo como

HReadSeekFirst(TablaBD, ID, 1)
IF HFound THEN
fSaveBuffer("C:\escritorio\archivo.docx", TablaBD.CampoTabla)
ELSE
Error("HFSQL error: " + HErrorInfo())
END


Espero el comentario sea claro y le sirva de ayuda.

Saludos!

--
Christian D.
Posté le 21 avril 2017 - 09:08
Muchas gracias a los dos por vuestras respuestas y disculpad el retardo.
Lo probaré ya que quiero usar el poder guardar formato word o rtf con el nuevo control de tratamiento de texto de pcsoft.
Muchas gracias a los dos, Victor y Christian y saludos,
Juan
Posté le 21 avril 2017 - 09:18
Hola Christian, disculpa pero tengo otra pregunta referente a mi primera.
Para poder guardar el fichero fisico directamente en HFSQL, que tipo de dato tengo que crear para guardar el fichero fisico, es : sonido, imagen, binario o que tipo de dato(campo) a declarar en la tabla ???
Christian disculpa si no traduzco bien ya que uso la version francesa de WD.

Gracias Christian por tu ayuda y saludos
Membre enregistré
8 messages
Posté le 21 avril 2017 - 18:39
Hola juan.

El tipo de campo que debes crear en la BD es tipo memo.

--
Christian D.
Posté le 21 avril 2017 - 19:22
Gracias Christian, disculpa es, un Imagen(memo binario) o otro memo binario ?
Muchas gracias por tu ayuda y buen fin de semana.
Juan
Membre enregistré
8 messages
Posté le 25 avril 2017 - 00:33
Hola Juan.

El campo tipo memo en HF sirve para almacenar objetos binarios (imagenes, documentos, videos etc). es similar al campo tipo blob de mysql

Saludos!

--
Christian D.
Posté le 25 avril 2017 - 10:42
Primero de todo gracias Christian por tu ayuda.
He intentado guardar con un selector de ficheros en disco el fichero .docx, pero no veo si miro en la base de datos el fichero...
Disculpa pero no tengo experiencia en este asunto ya que nunca lo he hecho.
Podrías explicarme lo que hago mal?, he usado tu segunda opción que me indicastes.
Saludos y gracias
Membre enregistré
8 messages
Posté le 26 avril 2017 - 18:28
Que tal Juan, aquí un pequeño ejemplo

SelectedFile is string
SelectedFile = fSelect("\Directories", "","Seleccione un archivo","Tmagen (*.JPG)" + TAB + "*.jpg" + CR + "Todo" + TAB + "*.*", "txt")
// Se indica la tabla y el campo donde se almacenara el archivo, en este caso se guardara un archivo tipo imagen, consulte
//https://help.windev.com/en-US/… para que vea los valores que puede tomar el cuarto parámetro dependiendo del //archivo a subir
HLinkMemo(TABLA,CAMPOTABLA,SelectedFile ,hMemoImg)
IF Hadd(NOMBRETABLA) THEN
Toastdisplay("Archivo almacenado")
ELSE
Error("HFSQL error: " + HErrorInfo())
END




Tenga en cuenta que la funcion fselect aplica para Windev o Windev Mobile, si intenta hacer la misma funcionalidad en WebDev utilice un control tipo upload en el evento (receiving the file upload) del botón quedaría algo como:




fMakeDir(fWebDir()+"\Fotos") // crea el directorio fotos en la carpeta del proyecto
RutaFoto is string = fWebDir()+"\Fotos\" + UploadCopyFile(MySelf, fWebDir()+"\Fotos\","NOMBREFOTO"+"_"+ SysDateTime)

// Se indica la tabla y el campo donde se almacenara el archivo, en este caso se guardara un archivo tipo imagen, consulte
//https://help.windev.com/en-US/… para que vea los valores que puede tomar el cuarto parámetro dependiendo del //archivo a subir

HLinkMemo(TABLA,CAMPOTABLA,RutaFoto ,hMemoImg)
IF Hadd(NOMBRETABLA) THEN
Toastdisplay("Archivo almacenado")
ELSE
Error("HFSQL error: " + HErrorInfo())
END


Espero sea útil la respuesta.


Saludos!

--
Christian D.
Posté le 26 avril 2017 - 22:52
Muchas gracias por su ayuda Christian.
Voy aplicar sus consejos y quiero agradecerle el tiempo dedicado y sus ejemplos.
Saludos y hasta la próxima,:merci:
Juan:merci: