Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   como guardar un nulo en un parametro (https://www.clubdelphi.com/foros/showthread.php?t=52675)

Velia 28-01-2008 13:22:06

como guardar un nulo en un parametro
 
Hola estoy haciendo una inserción y mando muchos
parametros de los cuales en algunas circunstancia necesito mandar un parámetro con valor nulo estoy haciendo lo siguiente y tengo error
[delhi]
Parameters.ParamByName('pId_marca').Value:= Null;

[/delphi]

por favor si alguien puede ayudarme para mandar un valor nulo a la BD?
Muchas gracias

Blackspike 28-01-2008 14:28:07

Prueba a poner esta linea.

Código Delphi [-]
Parameters.ParamByName('pId_marca').Clear;

Saludos.

Velia 28-01-2008 15:25:18

No soluciono
 
Hola Gracias por la ayuda. Pero no se si estoy haciendo mal porque no puedo con clear, anteriormente ya intente y el compilador no lo reconoce, directamente no deja ni compilarme el programa.
Estoy trabajando con un TADOquery y de esta manera no lo reconoce
Código Delphi [-]

ADOqueryInsert.Parameters.ParamByName('pId_marca').Clear;
Puede ser que sea el adoquery? Saludos Velia

AzidRain 28-01-2008 16:07:05

Clear no pone a nulo el parametro. Lo que hace es borrarlo de la lista de parámetros. Lo correcto es como lo pusiste en un principio, pero ¿Que error te da? ¿Quien te lo dá, Delphi o MySQL?.

Si el parámetro es una cadena, basta ponerla a '' y MySQL la tomará como nulo.

maeyanes 28-01-2008 16:20:20

Otra cosa...

Para poder usar Null necesitas que en la lista de uses se encuentre la unidad Variants...


Saludos...

jachguate 28-01-2008 19:43:56

Cita:

Empezado por AzidRain (Mensaje 261520)
Clear no pone a nulo el parametro. Lo que hace es borrarlo de la lista de parámetros. Lo correcto es como lo pusiste en un principio

No se de donde sacas esa idea, pero la ayuda de delphi dice:

Cita:

Empezado por TParam.Clear Method help
Use Clear to assign a NULL value to a parameter. Calling Clear neither sets nor clears the Bound property. When assigning a NULL value to a parameter, set the Bound property as well as calling Clear.

Hasta luego.

;)

Velia 29-01-2008 15:12:58

Estuve intentando de todas formas.
1 )Primero el metodo clear no esta disponible con TADOquery.Parameters.ParambyName('id_marca').

2) Con la instrucción de la siguiente forma

Código Delphi [-]
TADOquery.Parameters.ParambyName('id_marca').Value:= Null
tengo el siguiente error

"Parameter object is improperly defined. Inconsistent or incomplete information was provided."

3) también probe con VarNull
pero me graba el primer valor (1) de la tabla relacionada

Les sigo agradeciendo por la ayuda y el tiempo dedicado.
Saludos Velia

jachguate 29-01-2008 15:47:19

No me había topado con esta situación en ADO. Tampoco tengo tiempo de probarlo ahora, pero navegando por el help, pienso que quizás haga falta hacer esta asignación:

Código Delphi [-]
  ADOQuery1.Parameters.ParamByName('id_marca').Attributes :=
    ADOQuery1.Parameters.ParamByName('id_marca').Attributes + [paNullable];
  ADOquery1.Parameters.ParambyName('id_marca').Value:= Null;

Hasta luego.

;)

Velia 29-01-2008 16:22:36

Gracias por la ayuda pero no consigo solucionar el problema.
La que me queda es hacer la sentencia sql a mano y pasarles parametros de acuerdo al contenido de los mismos.

Si existe alguna forma voy a seguir probando
Saludos y gracias por el tiempo nuevamente

AzidRain 29-01-2008 17:48:00

Perdon tienen razon, lo quepasa es que yo no uso ADO. Yo solo trabajo con las fantásticas Zeos. jeje

keyboy 29-01-2008 20:58:35

Con ADO, dado que no existen los métodos AsXYZ que fuerzan el tipo de datos del parámetro, casi siempre hay que especificarlo explícitamente. Así parece ser en este caso, aun cuando el valor pasado sea NULL:

Código Delphi [-]
ADOquery1.Parameters.ParambyName('id_marca').DataType := ftInteger;
ADOquery1.Parameters.ParambyName('id_marca').Value:= Null;

No obstante, no especificas el uso del parámetro. Si es para asignar el valor de un campo, lo anterior te sirve, siempre y cuando el campo en la tabla realmente acepte valores nulos. Pero si se trata de un parámetro de comparación, por ejemplo:

Código:

select * from tabla where id_marca = :id_marca
entonces no creo que funcione ya que las comparaciones con NULL se hacen con el operador IS en lugar de =.

Bye

Velia 29-01-2008 22:47:13

Por Fin!!!!!!!!
Muchas gracias a todos por la ayuda
Funciona gracias a vos keyBoy :cool: es la única manera y me ahorraste laburo.
Saludos Velia


La franja horaria es GMT +2. Ahora son las 23:21:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi