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 29-08-2011
Avatar de Antoniov
Antoniov Antoniov is offline
Miembro
NULL
 
Registrado: ago 2011
Ubicación: Tenerife
Posts: 42
Poder: 0
Antoniov Va por buen camino
Mucha utilidad

Muchas veces, un campo no tiene por que tener un valor.

Por ejemplo, las veces que se permite borrar en cascada, hay que poner un null en las referencias borradas.

Otras veces se inserta un registro y en ese momento no se sabe que valor va a tener ese campo.

Ejemplo práctico:
Una base de datos que tiene tareas para los usuarios identificados.
A veces, se crea un mensaje cuyo destinatario no se sabe quién será porque la persona que da de alta y la que asigna trabajos pueden ser distintas.

Tengo más ejemplos prácticos.
Responder Con Cita
  #2  
Antiguo 29-08-2011
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
Hay quienes opinan que una tabla que admite valores NULL es una tabla mal diseñada. Por ejemplo, en el caso de haber llaves foráneas que no tienen asignación, puede ponerse un cero (suponiendo que el campo es entero) indicando así que no hay correspondiente en la tabla foránea.

Por otra parte, independientemente de si es correcto o no usar valores NULL, aquí lo que se pregunta es simplemente si se puede o no mandar un valor NULL desde delphi y la respuesta, hasta ahora, sigue siendo la misma: método Clear. Y digo hasta ahora porque habría que hacer la prubea, cosa que no lleva más que unos minutos.

// Saludos
Responder Con Cita
  #3  
Antiguo 29-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Antoniov.
Cita:
Es un campo INTEGER, crees que le puedo poner .clear?
Es tan acertado lo que está diciendo román, que ni siquiera hay que molestarse en hacer la prueba, solo leer la ayuda de Delphi:
Cita:
Clear method (TField)
Sets the value of the field to NULL.

Delphi syntax:
procedure Clear;

C++ syntax:
virtual void __fastcall Clear(void);

Description
Call the Clear method to give the field a blank value (a NULL value in SQL terms).
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 29-08-2011
Avatar de Antoniov
Antoniov Antoniov is offline
Miembro
NULL
 
Registrado: ago 2011
Ubicación: Tenerife
Posts: 42
Poder: 0
Antoniov Va por buen camino
Solucionado

Ok, de esa manera también funciona.

He encontrado otra que me resulta más gráfica.

Código Delphi [-]
TablaCampo.AsVariant := NULL;

Muchas gracias a todos.
Responder Con Cita
  #5  
Antiguo 12-09-2011
SAGOAN SAGOAN is offline
Miembro
 
Registrado: ago 2008
Posts: 13
Poder: 0
SAGOAN Va por buen camino
Al hilo de este problema yo tengo uno similar. Desde que uso Delphi 2010 (BBDD interbase) he notado un comportamiento diferente de los datos numéricos en los TDBEdits. Me explico tengo una aplicación que anteriormente estaba compilada con Delphi 2007 (BBDD interbase) y cuando hacía una edit, append, el TDBEdit que estaba enlazado a un campo numérico funcionaba correctamente de forma que si tenía un dato y borraba dicho dato con la tecla "DEL" o "SUPR" al pasar a otro campo el valor del DBEdit quedaba vacio. Ahora con Delphi 2010 no es así, pues si borro y paso a otro campo, el valor vuelve aparecer de nuevo.

He intentado capturar la presión de la tecla de borrado "VK_BACK" en el evento OnKeyPress del DBEdit y añadir lo que aquí se ha dicho:

TDBEdit(sender).field.Clear;

Pero, nada, lo único que funciona es poner un CERO para que borre el anterior valor.

¿Alguna idea?

Muchas Gracias
Responder Con Cita
  #6  
Antiguo 12-09-2011
SAGOAN SAGOAN is offline
Miembro
 
Registrado: ago 2008
Posts: 13
Poder: 0
SAGOAN Va por buen camino
Smile

Hola a todos:

He encontrado la solución: pongo el link que me ha ayudado:
_h_ttp://qc.embarcadero.com/wc/qcmain.aspx?d=78920

El código de "IBCustomDataSet.pas" lo he cambiado (línea 3480) por el siguiente y funciona:

//. CODIGO ANTIGUO
//.
//. if (Buffer = nil) or
//. (Field is TIBStringField) and (PChar(Buffer)[0] = #0) then
//. if TIBStringField(Field).EmptyAsNull then
//. rdFields[FMappedFieldPosition[Field.FieldNo - 1]].fdIsNull := True
//. else
//. begin
//. rdFields[FMappedFieldPosition[Field.FieldNo - 1]].fdDataLength := 0;
//. rdFields[FMappedFieldPosition[Field.FieldNo - 1]].fdIsNull := False;
//. end
//. else
//. CODIGO NUEVO
//.
if (Buffer = nil) then
rdFields[FMappedFieldPosition[Field.FieldNo - 1]].fdIsNull := True
else
//.FIN GODIGO ANTIGUO

Depués se compila la libreria "IBCustomDataSet.pas" para obtener la DCU y se cambia en el directorio donde se encuentre la original. OJO, no borreis la original, cambiarla de nombre.

Un saludo a todos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como se si un campo es numerico? MadeInBsAs Varios 3 02-09-2007 16:06:41
Como dar formato a un campo numerico... chileno Conexión con bases de datos 2 27-04-2006 19:58:22
Cómo Redondear a 4 decimales un campo de tipo Numérico vick Conexión con bases de datos 1 11-10-2005 01:04:23
Insertar campo nulo en un label jrcosta75 Varios 1 06-02-2004 14:35:04
Como Validar un campo numerico? Ricsato Varios 10 19-11-2003 17:31:05


La franja horaria es GMT +2. Ahora son las 21:51:35.


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