Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Me da un error al dejar en blanco un campo en interbase (https://www.clubdelphi.com/foros/showthread.php?t=11366)

uper 11-06-2004 20:32:14

Me da un error al dejar en blanco un campo en interbase
 
Hola todos,
disculpen una pregunta acerca de las inserciones en interbase 6.0, no lo habia notado, tengo un campo llamado Tel_cel, es decir que anteriorme se tomaba el mismo telefono de casa para capturalo en Tel_cel (telefono celular).

Mi consulta es la siguiente select Id_user, nom, tel, tel_cel) from usuarios (Por decir estos campos...) pero ahora hay algunas personas que si tienen telefono celular y otras no, en mi tabla de usuarios los campo tel, y tel_cel son varchar(18) y son null que puedo dejar en blanco al hacer las inserciones.

Resulta que al agregar un registo nuevo y dejo el campo tel_cel en blanco me da un error que dice que el valor de tel_cel debe ser llenado...
entonces se queda trabada y me saca del programa por lo tanto lo que habia capturado no se graba, tengo los componetes Ibx y para actualizar los datos uso los componentes IbDataset, Ibtransacction, Ibsql ya programada en la propiedad insertsql del ibdataset algo como esto :
Insert Into usuarios (Id_user, nom, tel, tel_cel) value (:Id_user, :nom, :tel, :tel_cel)
En el Ibsql en la propiedad SQL algo como esto: Select max(id ) Next From usuarios
Y por ultimo en el evento Onnewrecord escribo algo asi:

with IBSQL1 do
begin
ExecQuery;
ibdatasetId.Value := fieldByName('Next').AsInteger + 1;
Close;
end;

Y en donde se coloca las lineas de confirmar los cambios CommitRetaining, RollbackRetaining lo que se denomina transsacciones


Les agradeceria si me puedieran darme alguna solucion.

eduarcol 11-06-2004 20:36:25

Mira yo pienso que tienes el campo validado para que no quede en nulo si es asi cuando crees las tablas quitale la validacion
Cita:

check not null
al campo telefono celular

uper 16-06-2004 22:48:56

ok voy a revisar...
 
ok, eduarcol pero esto es referente a que cada campo tenga lo denominado Not null.
Por que para este campo solo lo defino como
Tel_celular varchar(15) y listo

Y cada vez que dejo en blanco este campo al ingresar un registro me arroja un error y me pide que sea evaluado.

espero que me des otra idea
gracias

eduarcol 16-06-2004 23:14:46

Otra idea que se me ocurre es que el componente TField tenga la opcion de requiredfield como true :confused:

Solo si cargas los TField en el TDataSet

jachguate 16-06-2004 23:38:50

Para determinar si el problema está en el cliente o en el servidor, podes intentar insertar un registro con este campo a null desde isql. Si alli rebota, hay algo en el servidor que espera que tenga un valor.

Si allí pasa bien, entonces el problema está en tu programa de delphi.

En cualquiera de los dos casos es extremadamente útil conocer el mensaje exacto de error (incluyendo códigos y clases de excepciones) que están involucrados.

Hasta luego.

;)

uper 18-06-2004 23:10:08

voy a verificar este mensaje de error . . .
 
Ok, saludos a todos.
Gracias eduarcol por esta idea voy a intentarlo con esta propiedad del Ibdatset.
Y como dice jachguate voy apuntar el mensaje que me arroja al hacer inserciones de datos,
Confirmare que sucede desde el lado del servidor interbase.
Y comentare acerca de lo sucedido.

Saludos y gracias

uper 23-06-2004 20:45:57

Hola, a todos, disculpen ustedes con respecto a este problemita que me arroja un error desde el programa es el siguiente:

error
Project sistem.exe raised exception class EDatabaseerror with message 'Field Tel_cel' must have a value; process stoped use or Run to continue.

Esto sucede cuando inserto registros y dejo alguno vacio, de acuerdo a lo que mencionaba jachguate que si venia del lado del servidor, pues comento, que hice unas inserciones directamente como esta Insert Into usuarios (Id_user, nom, tel, tel_cel) value (5, 'Juan Carl','58-854-85' ,'') como ve deje el ultimo campo vacio y me lo acepto y se agrego a la tabla, entonces es del lado del cliente, como mencionaba eduarcol en cada uno de los componente TField por parte del Ibdataset seleccione los campos y le asigne requiredfield como false y pude agregar registros con datos vacios como es el caso del campo tel_cel.

Sin encambio cuando se desee tener campos que se deban llenar forzamente como lo es nombre_user por decirlo se puede hacer desde el evento del campo Onvalidate sin importar como esta definido el tipo de campo desde la
Tabla, si es caracter if campo is null then un showmensaje('falta dato a evaluar'), para números y fechas seria el mismo codigo a seguir ?

Saludos y gracias

jachguate 23-06-2004 20:56:16

Hola.

La verdad tu explicación está bastante enredada.. y creo que estas confundiendo algunas cosas.

En primer lugar, una cadena vacia es distinto de NULL.

De manera que si has puesto restricciones Not Null a algunos campos, estos SI te aceptarán cadenas vacias, pero no valores NULL.

probá la sentencia:

Código SQL [-]
Insert Into usuarios (Id_user, nom, tel, tel_cel) 
values (5, 'Juan Carl','58-854-85' ,NULL)
.

El mensaje de error que mencionas

Cita:

Empezado por uper
me arroja un error desde el programa es el siguiente:
error
Project sistem.exe raised exception class EDatabaseerror with message 'Field Tel_cel' must have a value; process stoped use or Run to continue.

No viene del servidor, sino precisamente de que has dejado Required a True para el campo Tel_Cel.

Hasta luego.

;)

uper 24-06-2004 01:55:38

hola,
ok, gracias jachguate pero el mensaje que me arroja es de la aplicación, como lo mencione, y los campos de la tabla los defini como null, pero encontre la solucion con la propiedad Requiered a false del TField en el TDataSet.

les agradesco mucho.
Muchas gracias.


La franja horaria es GMT +2. Ahora son las 00:18:28.

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