PDA

Ver la Versión Completa : Grabar datos a tablas access


Aprendiendo
22-12-2006, 10:09:08
Ante todo una saludo a tod@s,

Mi duda es la siguiente:

He comenzado a trabajar con tablas access y todo sin problemas (las conexiones a la b.d., rutas, insert, update, etc...) el problema lo tengo a la hora de asignar tedit vacio a un campo de una tabla.

Me explico, si el TEdit tiene algo escrito inserta/actualiza sin problemas, pero si lo dejo vacío, me da un error: Valor de precisión no válido.

Investigando un poco he conseguido saber que este tipo de incidencias se llaman (cadenas de longitud cero) y en access se indica como "" (dobles comillas sin espacios entre ellas), pero como hago esto mediante código, ya que no se traga los valores null.

Esperando una pronta respuesta por vuestra reciban MUCHAS FELICIDADES PARA ESTE NUEVO AÑO QUE ESTA A PUNTO DE ENTRAR.

Suerte para todos.
:) :cool: :)

Neftali [Germán.Estévez]
22-12-2006, 10:58:10
¿Qué tipo de Acceso estás utilizando? ¿ADO?

..pero como hago esto mediante código, ya que no se traga los valores null.

¿Qué significa que no se traga los valores NULL? ¿Que no los admite el campo o que no sabes como asignarle el NULL?
¿Cómo estás haciendo la insertción?

Aprendiendo
22-12-2006, 12:21:35
Utilizo ADO.

Tanto en la inserción como en las actualizaciones utilizo parámetros en tiempo de ejecución.

en el string para el query indico lo siguiente (una vez escrito insert/update, según interese más la lista de columnas y parámetros.

qrempresas.parameters.parambyname('1').value := edit1.text;

este parámetro cuando el edit1 contiene datos no da problemas, ahora cuando el edit1 no contiene datos da problemas.

además compruebo si el edit1 contiene información e indico nulo y me sigue dando el error (igual asigno malamente el valor Null).

if trim(edit1.text) = '' then
qrempresas.parameters.parambyname('1').value := ''; (esto falla)

if trim(edit1.text) = '' then
qrempresas.parameters.parambyname('1').value := Null; (esto falla)

como sería la solución al problema, ya que cuando el dbedit no contenga datos la aplicación debe detectarlo y colocar el valor oportuno (nulo).

Esperando una pronta respuesta, reciban un cordial saludo...

:) :cool: :)

Neftali [Germán.Estévez]
22-12-2006, 13:13:43
En algun caso recuerdo haber usado:


// La unit Variants debe estar añadida
ADOQuery1.Parameters[0].Value:=NULL;


Otra opción es utilizar el método Clear;

Aprendiendo
22-01-2007, 14:57:57
He probado lo indicado por Neftali pero todo sigue igual, además para colocar lo que comenta neftali, debo de comprobar primero si hay algo en el TEdit oportuno y después en función de que si hay algo o no colocar el Null ó el valor correcto.

Lo que yo pretendo hacer es que con una simple asignación funcione, haya datos en el TEdit o no:
adoquery1.Parameters.ParamByName('1').Value := edit1.text; (Si coloco esto y no hay datos en el edti1, da error.)

La solución que he encontrado es comprobar si el edti1.text está vacío, si está vacío asigno este valor al parámetro = ' ', no me
parece lógico tener que meter un espacio para que ADO guarde algo en ese campo.


¿Motivo?

Caral
22-01-2007, 19:14:33
Hola
Bueno yo haria:
1- Primero hay que definir que tipo de dato va a contener el edit, si es string o numerico, puesto que dependera de esto la insersion correcta en la tabla.
2- Asignaria o bien un numero o una letra por defould al edit en su campo text.
3- Colocaria el nombre del form, ya que aveces se necesita identificar asi:
La sentencia correcta es esta:

ADOQuery1.Parameters[0].Value := Form1.Edit1.Text;

Hay que tener en cuenta la posicion del campo que se requiere empezando por:
Campo 1= 0
Campo 2= 1
etc, etc.
Por comprobacion de vacio:
No me parece muy logico o necesario, pero?.

if edit1.text = ' ' then
ADOQuery1.Parameters[0].Value := Form1.Edit1.Text;

Saludos

Aprendiendo
23-01-2007, 09:35:30
Caral, muchas gracias por tu rápida respuesta, voy a probar a colocar delante del edit1.text el nombre del form, ya te comentaré.

Un saludo...

fjcg02
23-01-2007, 23:34:24
Aprendiendo,
comprueba en las propiedades de la tabla si el campo que te casca tiene la propiedad "Permitir Longitud Cero = Si". Está debajo de la longitud del campo, junto a otras propiedades.
Por defecto cuando creas los datos está a NO, por lo que obliga a introducir datos.
Puede que se este tu problema.

Un saludo y suerte

Aprendiendo
24-01-2007, 15:07:04
fjcg02, gracias por tu respuesta

Esta propiedad creo la tengo cambiada a que permita longitud cero, de todos modos voy a corroborar de que se permita la longitud cero.

Ya comentaré como me ha ido.

:) :cool: :)