PDA

Ver la Versión Completa : boolean nulo


Sick boy
05-12-2003, 12:29:55
Hola a todos,

Necesito saber que registros de una tabla tienen un valor boolean nulo, y no soy capaz de coinstuir el sql necesario.

Utilizo paradox.

Ya se que se habria resuelto poniendo un valor false al hacer el post, pero ahora ya es tarde.

He probado con campo="", con campo<>True, poniendo un param a null, y nada de nada, con los dos primeros simplemente no selecciona ningun registro, y poniendo el param = null da un error.

Ya que estamos, alguien sabe como establecer un valor por defecto en un campo de una tabla POR CODIGO (como lo de Default Value del Database DeskTop).

Saludos, y gracias a todos

Voutarks
05-12-2003, 12:44:42
Prueba a meter en la sentecia sql directamente where campo = null en vez utilizar un parámetro para eso.

Para establecer un valor por defecto lo puedes hacer mediante la sentencia de creacion de tabla. Si ya la tienes creada entonces la sentencia sería ALTER TABLE NombreDeTabla ALTER NombreDelCampo TYPE BOOLEAN DEFAULT False NOT NULL (es sql estándar, supongo que funciona con paradox). Asi evitas que pueda volver a ponerse nulo.

Sick boy
05-12-2003, 12:58:45
Gracias Voutarks, pero no se soluciona nada.

Lo que tu comentas es lo logico, y lo que yo pensaba, pero paradox no piensa igual.

Prueba a meter en la sentecia sql directamente where campo = null en vez utilizar un parámetro para eso.

No funciona, error: Invalid use of keyword. Token: null


Para establecer un valor por defecto lo puedes hacer mediante la sentencia de creacion de tabla. Si ya la tienes creada entonces la sentencia sería ALTER TABLE NombreDeTabla ALTER NombreDelCampo TYPE BOOLEAN DEFAULT False NOT NULL (es sql estándar, supongo que funciona con paradox). Asi evitas que pueda volver a ponerse nulo.

Tampoco funciona en Paradox, mismo error:
Invalid use of keyword. Token: ALTER

La solucion de poder alterar la tabla es la que más me interesa, ya que elimina por completo mi problema, y me sirve para futuras actualizaciones.

Voy a seguir buscando, si encuentro la forma lo posteo aqui mismo. (Si alguien sabe como hacerlo se lo agradeceria)

Mientras tanto, muchas gracias a todos.

Sick boy
05-12-2003, 14:35:24
Hola a todos,

Esto es lo que he encontrado y funciona, aunque no resuelve el problema:

query1.sql.add('ALTER TABLE mitabla.db"');
query1.sql.add('ADD micampo BOOLEAN');

Con esto se crea un nuevo campo llamado micampo del tipo boolean, pero ni DEFAULT ni NOT NULL son soportados por PARADOX (si me equivoco espero que alguien me corrija).

He llegado a estas conclusiones haciendo pruebas, y consultando este enlace:
http://www.latiumsoftware.com/es/pascal/0009.php

Pienso que debe existir alguna forma de establecer el NOT NULL y DEFAULT, pero estoy totalmente perdido..... voy a probar con los dbi, a ver si sale algo.

Gracias a todos

Voutarks
05-12-2003, 15:47:01
Pues no se si paradox lo soporta o no porque no lo he manejado, pero los estándares del SQL99 definen las palabras NULL y NOT NULL como restricciones sobre los campos en la instrucción CREATE TABLE.

Además establece que se puede poner a ALTER TABLE las palabras SET DEFAULT y DROP DEFAULT para establecer o quitar valores por defecto. (lo acabo de consultar, asi que lo que puese antes no era correcto, esto si)

Pero bueno, no se hasta que punto Paradox se acerca a los estándares.

roman
05-12-2003, 15:51:34
La verificación de si un campo es null no se hace con el operador de igualdad sino con el operador is:

where campo is null

Y sí, Paradox, maneja valores null y hasta donde entiendo el estandar sql que mencionan especifica que la comparación se hace con is en lugar de =.

// Saludos

Voutarks
05-12-2003, 16:07:28
Tienes razón, ha sido un lapsus

Sick boy
05-12-2003, 16:40:37
Cierto, muchas gracias.

Ahora puedo hacer un update que me permite cambiar los campos null por true/false.

Segui buscando, y encontre la forma de establecer valores por defecto y NOT NULL en tablas paradox.

Para ello se utiliza DbiDorestructure, de la api del BDE.
En los ejemplos de la ayuda del delphi esta la solucion.

Gracias a los dos por vuestra ayuda.