PDA

Ver la Versión Completa : ayuda con campos blob


squenda
31-03-2004, 21:09:48
Hola a todos, nuevamente el latoso de squenda jaja, bueno mi problema ahora es:

tengo un campo en donde requiero que mi cliente pueda capturar mas de 255 caracteres, de hecho el necesita capturar aproximadamente una hoja tamaño carta, asi que declare mi campo tipo BLOB SUB_TYPE 1, muy bien pero el problema es que nunca he usado este tipo y no se como hacerlo, de verdad no tengo ni idea, si alguien me pudiera ayudar mandandome algun ejemplo de como insertar y modificar dicho campo, estoy trabajando con interbase que viene con delphi 6, muchas gracias.
saludos.

cahp
01-04-2004, 14:28:40
La forma mas sencilla es hacerlo como en principio se trabaja con todos los tipos de datos, asignadole su componente de edicion, es decir un campo de tipo string lo editas con un DBedit, a uno de tipo blob, si es como tu caso para texto, le asignas un DBMemo o DBRichEdit.

Saludos

squenda
01-04-2004, 18:55:55
Gracias Cahp pero no utilizo controles DB, alguna vez alguien me comento que se utilizaba algo llamado STREAM o algo asi, no lo recuerdo, asi que por favor aaayyuuuuudaaa!!, gracias.

cahp
01-04-2004, 19:06:14
que utilizas para la edicion?
es decir donde escribes el texto?

Si lo dices te puedo ayudar.

Saludos

squenda
02-04-2004, 20:29:33
Hola CAHP, de antemano te agradezco tu atencion, mira yo utilizo controles normales, no uso controles db, en lugar de usar un DBEdit, uso un Edit, en lugar de usar un DBMemo uso un Memo, y asi me la llevo, como trabajo con puro query no me gustan los DB, y lo que hago que es que armo los querys al vuelo, ejemplo:

With qry_work, qry_work.SQL do
begin
Close;
Clear;
Add('INSERT INTO clientes (');
Add('Nombre,');
Add('Domicilio,');
Add('Observaciones');
Add('VALUES (');
Add(#39 + edt_nombre.text + #39 + ','); //Edit normal
Add(#39 + edt_domicilio.text + #39 + ','); //Edit normal
Add(#39 + m_observaciones.text + #39); //Memo normal
execSQL;
end;

pero nunca he utilizado tipos BLOB, asi que no se si utilizarlo como utilizaría un memo normal o que? espero que esta informacion te ayude a ayudarme jaja, mucha gracias y saludos

guillotmarc
02-04-2004, 20:43:53
pero nunca he utilizado tipos BLOB, asi que no se si utilizarlo como utilizaría un memo normal o que?Un campo Blob es un campo Memo.

En todo caso, no podrás asignar el contenido de un campo Blob en la misma sentencia SQL (como haces en el ejemplo), por lo que tendrás que recurrir a sentencias con parámetros. Entonces en el parámetro puedes asignarle directamente su valor si solo vas a guardar una string, o bien puedes utilizar métodos como el LoadFromFile para cargar datos desde un archivo, e incluso el LoadFromStream para, como te han comentado, cargar datos de un Stream (útil en el caso de que vayas a cargar datos binarios).

Saludos.

cahp
05-04-2004, 13:39:47
Suponiendo la query:


Add('INSERT INTO clientes')
Add('Nombre,');
Add('Domicilio,');
Add('Observaciones');
Add('VALUES (:nombre, :domicilio, :observaciones) ');



seria:


Query.parambyname('Nombre').AsString := EditNombre.Text;
Query.parambyname('Domicilio').AsString := EditDomicilio.Text;
Query.parambyname('Observaciones').AsString := Memo1.lines.Text;
Query.ExecSQL;


A ver si te sirve eso.

Saludos.

guillotmarc
05-04-2004, 14:08:01
Has olvidado cerrar entre paréntesis la lista de campos, ejplo :


Add('INSERT INTO clientes (Nombre, Domicilio, Observaciones)');
Add('VALUES (:nombre, :domicilio, :observaciones) ');


Saludos.

cahp
05-04-2004, 14:21:27
cierto, y puede ser que falte algo mas, lo he hecho de memoria.

Gracias.

Saludos.

Julià T.
05-04-2004, 21:34:20
Como SQUENDA me envió un mensaje privado, y he visto el tema, publico aquí la respuesta

Hola SQUENDA:

Antes de empezar decirte que los campos Blob de texto les puedes asignar un DBMemo que solitos se encargan del trabajo

En el primer caso casi se podria solucionar poniendo;

Add(QuotedStr( m_apuntes.text));//control TMemo
Add(QuotedStr( m_apuntes.text)+' )' );//control TMemo //aquí te falta cerrar parentesis del insert al final
En el segundo caso
Add(':apuntes'+' )');//parametro//aquí te falta cerrar el parentesis del insert al final
Prepared:=True;//para que se prepare la consulta y se regeneren los parámetros "hechos a mano"
ParamByName('observaciones').AsBlob:= m_observaciones.text;
ParamByName('apuntes').AsBlob:= m_apuntes.text;

squenda
08-04-2004, 07:12:48
Hola a todos, pues solo quiero agradecer la ayuda para resolver mi problema, un saludo.