Campo no puede ser nulo

Te pregunto a ti, porque siempre respondes rapido y acertado.
La consulta es la siguiente :
Tengo una tabla con 5 campos, y 4 de ellos son llenados con un mantenedor, pero 1 no, porque ese campo que es el costo_promedio, se llena por proceso.
El problema es que cuando ejecuto el mantenedor, al grabar, me da error de base de datos, porque me dice que el campo costo_promedio no puede ser nulo.
¿Cómo hago para engañar al motor de la base para que ignore dicho error, o dicho de otra forma, como dejo el campo por defecto en cero?

1 Respuesta

Respuesta
1
Para extraer el valor de un campo utilizas las funciones GETITEMXXX()
GetItemDecimal()
GetItemNumber()
GetItemString()
GetItemDate()
GetItemDateTime()
Cada una de estas funciones te devuelve el valor que en ese momento contiene la columna según la fila
Si el valor devuelto es null, simplemente lo reemplazas por el correcto, de tal forma que no provoque un problema al grabar.
Por el otro lado, cuando me refiero a inicializar el valor no necesariamente debe ser en la tabla, es más, no lo recomiendo, porque todo esto se ubica en tablas especiales que maneja pb, me refiero a que en el datawindow object exite para todas las columnas, es un grid en el cual encontraras el nombre de la columna, tamaño, etc.
Dentro de este grid existe una columna que lleva el titulo de INITIAL VALUE, en esa columna por cada campo del datawindow puedes colocar un valor, en tu caso te recomiendo colocar CERO, así cada vez que en el datawindow sea ejecutada la instrucción INSERTITEM(), el valor CERO, es colocado como valor inicial en la columna correspondiente.
Es conveniente que no te olvides de ejecutar antes de hacer cualquier cosa fuera del datawindow, la instrucción ACCEPTTEXT(), esta función traslada el valor que se ve en la pantalla, a la columna física en el datawindow, por ejemplo.
Imagina que estas introduciendo un dato en un edit, pero en lugar de presionar enter luego de escribir dicho dato, haces click en el botón grabar, utilizando el ratón, si te fijas, el valor solo quedo escrito en la pantalla, pero nunca fue confirmado por el usuario utilizando enter.
Entonces el valor nunca llego a la columna como tal, solo se quedó en la pantalla (pintado), la función accepttext() forzá esta situación.
Igualmente, esta función se encuentra íntimamente ligada con el evento itemchanged(), pues si tienes alguna validación dentro de este evento con respecto a la columna que en este momento obtenía el foco, entonces es disparada dicha validación.
Por lo tanto la función AcceptText() devolverá un valor -1 indicando que el ciclo de actualizando no ha podido ser ejecutado,
En caso contrario si la función devuelve 1, significa que todo fue bien.
Con esta función te aseguras que el usuario haga lo que haga con el ratón luego de escribir un dato en un edit, el valor sea recibido también en la columna que acompaña al edit.
¿Con qué instrucción me aseguro que el valor del campo antes del update() no sea nulo?
Segundo, ¿supongo qué te refieres a poner cero en el valor por defecto al crear la tabla?
Gracias, ya se me esta aclarando la película.
Te pasaste, como siempre, muchas gracias.
Puedes solucionarlo de 2 formas.
La primera es que coloques un valor fijo, en el campo del datawindow, por ejemplo 0
Este valor lo colocas en una casilla que lleva el titulo de VALOR POR DEFAULT,
allí colocas un CERO.
La otra forma de hacerlo es que antes de que ejecutas la instrucción update()
te asegures que el valor de esa columna no sea null.
Por ultimo antes de ejecutar la instrucción de actualización update(),
Ejecuta la instrucción ACCEPTTEXT(), del datawindow, esta función integra los valores que se encuentra visualmente en el datawindow, y los traslada a las columnas de datos.
Esto te permite evitar que campos que supuestamente se ven llenos internamente no queden con valor NULL.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas