PDA

Ver la Versión Completa : Insertar cadena de carácteres


carmelina
11-06-2008, 18:42:27
Hola a todos!!!

Mi problema es que necesito insertar en mi base de datos una cadena de caracteres, pero esa cadena es una variable, ya que se escribe por teclado.
Mi problema es que usando:

Query1.SQL.Add('INSERT INTO misvideos VALUES (fecha, nombrevideo, "c:video")');
Query1.ExecSQL;

donde nombrevideo es una variable de tipo String que contendrá la cadena real, esto me inserta nombrevideo, no su contenido. Qué hago para que me inserte su contenido???

Muchas gracias de antemano.

Un Saludo

egostar
11-06-2008, 18:58:02
Hola

Query1.SQL.Add('INSERT INTO misvideos VALUES (fecha, nombrevideo, :RUTA)');
Query1.ParamByName('RUTA').Value := 'c:video'; //Podrias usar un Edit por ejemplo.
Query1.ExecSQL;


Salud OS

carmelina
11-06-2008, 19:32:40
Hola;

Muchas gracias pero me da error, yo he insertado estas lineas de codigo:
Query1.SQL.Add('INSERT INTO misvideos VALUES (:fecha, :nombrevideo, :ruta)');
Query1.Parameters.ParamByName('ruta').value:='c:video';
Query1.Parameters.ParamByName('fecha').value:=fecha;
Query1.Parameters.ParamByName('nombrevideo').value:=nombrevideo;

Pero no me funciona, no se como hacerlo. Si me pudieses ayudar te lo agradeceria mucho.

Un saludo

egostar
11-06-2008, 19:50:56
Hola;

Muchas gracias pero me da error, yo he insertado estas lineas de codigo:

Pero no me funciona, no se como hacerlo. Si me pudieses ayudar te lo agradeceria mucho.


Podrías indicarnos que error es el que se te muestra?, me imagino que debe de ser algo relacionado con el tipo de dato que estas usando.

Por ejemplo, el campo Fecha pudiera ser del tipo Date por lo que deberias de usar algo así


Query1.Parameters.ParamByName('fecha').value := strtodate(fecha);


Salud OS

carmelina
12-06-2008, 10:15:46
Hola de nuevo;

El error que me da es el siguiente:

Project Project1.exe raised exception class EOleException with message 'Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros'. Proceso stopped. Use Step or Run to Continue.

y tambien me aparece:

Project Project1.exe raised exception class EOleException with message
'Objeto Parameter mal definido. Se proporcionó información incompleta o incoherente'. Proceso stopped. Use Step or Run to Continue.

El código utilizado es este:

fecha:=GetLocalT;
Query1.SQL.Add('INSERT INTO misvideos VALUES (:fecha, :nombrevideo, :ruta)');
Query1.Parameters.ParamByName('fecha').value:=StrToDate(fecha);
Query1.Parameters.ParamByName('nombrevideo').value:=nombrevideo;
Query1.Parameters.ParamByName('ruta').value:='c:video';
Query1.ExecSQL;


donde la funcion GetLocalT tiene como código:

function GetLocalT: String;
var
stSystemDate : TSystemTime;
begin
Windows.GetLocalTime( stSystemDate );
Result := DateToStr( SystemTimeToDateTime( stSystemDate ) );
end;

Bueno, si podeis ayudarme sería genial, y si no gracias igualmente:-)

kuan-yiu
12-06-2008, 11:14:44
Yo nunca utilizo ".value" porque suele fallar, en tu caso lo haría así:
Query1.ParamByName('fecha').asDateTime:=fecha;
Query1.ParamByName('nombrevideo').asString:=nombrevideo;
Query1.ParamByName('ruta').asString:='c:video';
Query1.ExecSQL;

roman
12-06-2008, 16:15:10
El problema, como ya mencionaron egostar y kuan-yiu, muy posiblemente se deba al tipo de datos. Cuando usas Query1.Parameters.ParamByName('fecha').value, value es un variant, esto es, una variable que no lleva un tipo de datos específico, de manera que el objeto Query1 no sabe en qué formato mandar el dato al motor de bases.

El problema con la solución que plantea kuan-yiu -me parece- es que no es válida en tu caso, porque tú estás usando Parameters y no Params. Parameters es una colección de TParameter en lugar de TParam, y el problema es que, a diferencia de este último, TParameter no cuenta con los métodos AsDate, AsString, AsInteger, etc.

Entonces, lo que debes hacer es indicar explícitamente el tipo de datos del parámetro:


Query1.Parameers.ParamByName('fecha').DataType := ftDate;
Query1.Parameters.ParamByName('fecha').value;


// Saludos

carmelina
15-06-2008, 10:29:43
Hola a todos!!!

Muchas gracias por todos vuestros consejos. Al final el código que me va bien es:
Query1.SQL.Add('INSERT INTO misvideos VALUES (:fecha, :nombrevideo, :ruta)');
Query1.Parameters.ParamByName('fecha').value:=StrToDate(fech);
Query1.Parameters.ParamByName('nombrevideo').value:='nombrevideo';
Query1.Parameters.ParamByName('ruta').value:='c:\videos';
Query1.ExecSQL;

Editando en el Object Inspector el campo Parameters, con mis tres parametros(fecha, nombrevideo y ruta) y editando cada TParameter con su tipo correspondiente.

De nuevo muchas gracias por todo:-)

Un saludo