Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Grabar datos a tablas access (https://www.clubdelphi.com/foros/showthread.php?t=38667)

Aprendiendo 22-12-2006 10:09:08

Grabar datos a tablas access
 
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?

Cita:

Empezado por Aprendiendo
..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:

Código Delphi [-]
  // 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:
Código Delphi [-]
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?.
Código Delphi [-]
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: :)


La franja horaria es GMT +2. Ahora son las 17:18:59.

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