PDA

Ver la Versión Completa : Guardar archivos en sql2000


kurono
14-10-2012, 04:05:00
hola amigos quisiera saber cual es el tipo de campo para guardar cualquier tipo de datos en sql2000 osea necesito estos tipo de archivos exe,pdf,mp3,zip etc

e leido este hilo http://www.clubdelphi.com/foros/showthread.php?t=53976 donde muestra supuestamente como hacerlo pero no me funciona no guarda nada

Casimiro Notevi
14-10-2012, 08:30:22
Campos BLOB

kurono
14-10-2012, 20:45:16
no veo definido ese tipo de datos en SQL 2000

Casimiro Notevi
14-10-2012, 22:33:30
Los BLOB son (Binary Large Objects), así que lo mismo en MS SQL se llaman binary o algo así.

No hay más que hacer una sencilla búsqueda en google:
BINARY VARBINARY
BINARY VARYING
BIT VARYING 1 byte por carácter Se puede almacenar cualquier tipo de datos en un campo de este tipo. Los datos no se traducen (por ejemplo, a texto). La forma en que se introducen los datos en un campo binario indica cómo aparecerán al mostrarlos.

kurono
14-10-2012, 23:22:02
ok probare luego les cuento

kurono
14-10-2012, 23:49:09
E cambiado el tipo de datos a binary y escribe el siguiente codigo para cargar un archivo y me da error


begin
if Open.Execute then
begin
dbedit4.text:=open.fileName;
TBlobField(ADOTable1.FieldByName('archivos')).LoadFromFile(Open.FileName);
end;
else
Open.Destroying;
end;


el error me dice invalid class typecast

kurono
19-10-2012, 04:57:05
alguien tiene algun ejemplo de como guardar un archivo en sql2000 ya que no me funcionan lo que estoy haciendo

nlsgarcia
19-10-2012, 21:28:57
kurono, (http://www.clubdelphi.com/foros/member.php?u=20415)

Revisa estos links:

http://www.clubdelphi.com/foros/showthread.php?t=22147&highlight=TBlobStream

http://www.clubdelphi.com/foros/showthread.php?t=81040&highlight=BLOB

http://www.clubdelphi.com/foros/showthread.php?t=80380&highlight=BLOB

http://www.onlinedelphitraining.com/newsletters/blobs.htm

http://delphi.about.com/od/database/a/record2blob.htm

http://www.scalabium.com/faq/dct0141.htm

Los metodos de manejo de campos BLOB descritos en los links son aplicables en general a cualquier tipo de BD.

Espero sea util :)

Nelson.

kurono
20-10-2012, 02:56:45
analizare los codigo luego les cuento cual me funciono

kurono
24-10-2012, 04:15:34
amigos les cuento que e probado varios codigo de los link los cuales en si son todos parecidos y en todos el codigo me da error en una linea del codigo



procedure guardar(FileName, FieldName: string);
var
blob, myFileStream : TStream;
begin
blob := cds.CreateBlobStream(cds.FieldByName(FieldName), bmWrite);
try
blob.Seek(0, soFromBeginning);
myFileStream := TFileStream.Create(FileName, fmShareDenyWrite);
try
blob.CopyFrom(myFileStream, myFileStream.Size) ;
finally
myFileStream.Free ;
end;
finally
blob.Free ;
end;
end;

la parte tachada en negrita es donde me da el error y el cds lo declare como TDataSet

nlsgarcia
24-10-2012, 05:11:35
Kurono,

Revisa este fragmento de código del link : http://delphi.about.com/od/database/a/record2blob.htm

var
User : TUser;
blobF : TBlobField;
bs : TStream;
begin
User.Name := edName.Text;
User.NumberOfQuestions := StrToInt(edNOQ.Text) ;
User.CanAsk := chkCanAsk.Checked;

myTable.Insert;

blobF := myTable.FieldByName('data') as TBlobField;
bs := myTable.CreateBlobStream(blobF, bmWrite) ;
try
bs.Write(User,SizeOf(User)) ;
finally
bs.Free;
end;
end;

¿Ves como definen el campo blobF como un TBlobField antes de usarlo?. Creo que también es válido definirlo así:

bs := myTable.CreateBlobStream(myTable.FieldByName('data') as TBlobField, bmWrite);

Espero sea útil :)

Nelson

kurono
25-10-2012, 01:09:22
hare algunas prueba con el codigo luego te cuento

kurono
25-10-2012, 03:38:48
amigo nlsgarcia (http://www.clubdelphi.com/foros/member.php?u=16291) no me funciona de ninguna manera crees que sea algo con la base de datos en sql2000 el campo lo tengo declarado binary incluso lo declare varbinary y nada

kurono
25-10-2012, 04:57:20
hola amigos les cuento que hise prueba con una base de datos acces y todo funciona bien pero en sql2000 no funciona sera porque en access el campo si se declara como blod mientras que en sql2000 se declara como binary

nlsgarcia
25-10-2012, 05:58:53
Kurono,

Revisa estos links:

1- http://www.dbforums.com/microsoft-sql-server/1636788-blob-field-sql-server-2000-a.html

2- http://www.databasejournal.com/features/mssql/article.php/3724556/Storing-Images-and-BLOB-files-in-SQL-Server-Part-2.htm

El tipo de campo blob en SQL Server 2000 es Image.

Tomado del libro : Microsoft SQL Server 2000 Bible de Paul Nielsen, Editorial Wiley.
"SQL Server can store any binary object up to 2GB, which definitely qualifies as a binary large object (blob) in an image column"Tomado del link 2:

"SQL BOL (Books On Line) gives a good example of the three binary types:

-Use Binary when the sizes of the column data entries are consistent (and less than 8,000 bytes).

-Use varBinary when the sizes of the column data entries vary considerably (and are less than 8,000 bytes).

-Use varBinary(max) when the column data entries exceed 8,000 bytes.

-For SQL 2000, use the Image data type. However, be aware that Microsoft has stated the Image data type is for backwards compatibility only, and may be discontinued on a future version."
Te anexo una tabla del mencionado libro que define el campo blob Image.

Espero sea útil :)

Nelson.

kurono
25-10-2012, 07:07:05
amigo nlsgarcia efectivamente declarando el campo como image ya puedo grabar archivos en la base de datos con sql2000 muchas gracia por tu ayuda aun asi leere tus link para documentarme mejor

nlsgarcia
25-10-2012, 07:47:08
Kurono,

Gracias por tus comentarios :)

Cuando puedas coloca en el post las rutinas de lectura y grabación del campo blob en SQL Server 2000 para que sirvan de ejemplo de como procesar este tipo de datos.

Nelson.

kurono
25-10-2012, 21:32:54
el codigo que utilize fue el mismo que mencione al principio del hilo


// De archivo en disco a campo BLOB
TBlobField(ADOTable1.FieldByName('pdf')).LoadFromFile('archivo.pdf');
// De campo BLOB a archivo en disco
TBlobField(ADOTable1.FieldByName('pdf')).SaveToFile('archivo.pdf');


este es un ejemplo de como lo utilize en mis codigo de pruebas

para guardar en la base de datos


begin
try
TBlobField(ADOTable1.FieldByName('archivos')).LoadFromFile(Open.FileName);
finally
ADOTable1.Post;
ShowMessage('archivo guardado');
end;
end;



y este es para guardar de la base de datos al disco


begin
TBlobField(ADOTable1.FieldByName('archivos')).SaveToFile('C:\'+ DBEdit1.Text+'.exe');
ShowMessage('archivo guardado');
end;