Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-12-2003
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
boolean nulo

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
Responder Con Cita
  #2  
Antiguo 05-12-2003
Avatar de Voutarks
Voutarks Voutarks is offline
Miembro
 
Registrado: jul 2003
Ubicación: Islas Canarias
Posts: 118
Poder: 21
Voutarks Va por buen camino
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.
__________________
Emilio J. Curbelo
Responder Con Cita
  #3  
Antiguo 05-12-2003
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Gracias Voutarks, pero no se soluciona nada.

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

Cita:
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


Cita:
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.
Responder Con Cita
  #4  
Antiguo 05-12-2003
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Hola a todos,

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

Código:
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
Responder Con Cita
  #5  
Antiguo 05-12-2003
Avatar de Voutarks
Voutarks Voutarks is offline
Miembro
 
Registrado: jul 2003
Ubicación: Islas Canarias
Posts: 118
Poder: 21
Voutarks Va por buen camino
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.
__________________
Emilio J. Curbelo
Responder Con Cita
  #6  
Antiguo 05-12-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #7  
Antiguo 05-12-2003
Avatar de Voutarks
Voutarks Voutarks is offline
Miembro
 
Registrado: jul 2003
Ubicación: Islas Canarias
Posts: 118
Poder: 21
Voutarks Va por buen camino
Tienes razón, ha sido un lapsus
__________________
Emilio J. Curbelo
Responder Con Cita
  #8  
Antiguo 05-12-2003
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 08:05:50.


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
Copyright 1996-2007 Club Delphi