Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Error al guardar datos (https://www.clubdelphi.com/foros/showthread.php?t=60614)

Elite237 07-10-2008 19:36:27

Error al guardar datos
 
Hola, quisiera saber si a alguien al igual que a mi le ha pasado que cuando queire guardar un dato en la bd le sale el siguiente error:
Código Delphi [-]
invalid variant type conversion

mi codigo es el siguiente:
Código Delphi [-]
procedure TForm11.btnAgregarClick(Sender: TObject);
var
i:string;
begin
if form11.table1.locate('preg_clave',edclave.text,[])then
             begin
              edclave.clear;
              showmessage('La clave ya existe')
             end
              else
                begin
                    i:=copy(cmbEvaluacion.text,0,pos('-',cmbEvaluacion.text)-1);
                    i:=copy(cmbSeccion.text,0,pos('-',cmbSeccion.text)-1);
                    form11.table1.insert;
                    form11.table1.fieldvalues['preg_evaluacion']:=i;
                    form11.table1.fieldvalues['preg_secc']:=i;
                    form11.table1.fieldvalues['preg_clave']:=EdClave.text;
                    form11.table1.fieldvalue['preg_descripcion']:=EdPregunta.text;
                    form11.table1.post;
                    cmbEvaluacion.clear;
                    cmbSeccion.clear;
                    edClave.clear;
                    edPregunta.clear;
                    showmessage('Los datos se guardaron con exito!');
                 end;
end;

lo que hago es guardar solamente la clave de una evaluacion, de una seccion y de una clave. Tengo 2 combobox, 2 edit y un boton. Utilizo un database,table y query. Gracias

donald shimoda 07-10-2008 20:06:39

Cita:

Empezado por Elite237 (Mensaje 318709)
Hola, quisiera saber si a alguien al igual que a mi le ha pasado que cuando queire guardar un dato en la bd le sale el siguiente error:
Código Delphi [-]invalid variant type conversion


lo que hago es guardar solamente la clave de una evaluacion, de una seccion y de una clave. Tengo 2 combobox, 2 edit y un boton. Utilizo un database,table y query. Gracias

Como decia en el otro post, evita los fieldvalues usando AsInteger, asString o lo que sea, y te ahorraras muchos problemas.

Saludos

Elite237 07-10-2008 21:12:05

Te refieres a usarlo asi?:
Código Delphi [-]
cmbEvaluacion.text:=form12.table1.AsInteger['preg_evaluacion'];

o como no entiendo, de hecho no me da esa opcion despues del punto

donald shimoda 07-10-2008 21:14:55

Cita:

Empezado por Elite237 (Mensaje 318727)
Te refieres a usarlo asi?:

No, asi

Código Delphi [-]
cmbEvaluacion.text:=form12.table1.FieldByName('preg_evaluacion').AsString;

Saludos

Elite237 07-10-2008 21:43:40

Lo hize como me dijiste pero me sigue saliendo el mismo error:
Código Delphi [-]
invalid variant type conversion

te muestro como lo deje:
Código Delphi [-]
procedure TForm11.btnAgregarClick(Sender: TObject);
var
i:string;
begin
if form11.table1.locate('preg_clave',edclave.text,[])then
             begin
              edclave.clear;
              showmessage('La clave ya existe')
             end
              else
                begin
                    i:=copy(cmbEvaluacion.text,0,pos('-',cmbEvaluacion.text)-1);
                    i:=copy(cmbSeccion.text,0,pos('-',cmbSeccion.text)-1);
                    table1.insert;
                    i:=form11.table1.FieldByName('preg_evaluacion').AsString;
                    i:=form11.Table1.fieldbyname('preg_secc').AsString;
                    EdClave.text:=form11.table1.fieldbyname('preg_clave').AsString;
                    EdPregunta.text:=form11.table1.fieldbynam('preg_descripcion').AsString;
                    form11.table1.post;
                    cmbEvaluacion.clear;
                    cmbSeccion.clear;
                    edClave.clear;
                    edPregunta.clear;
                    showmessage('Los datos se guardaron con exito!');
                 end;
end;

donald shimoda 07-10-2008 21:47:33

Cita:

Empezado por Elite237 (Mensaje 318741)
Lo hize como me dijiste pero me sigue saliendo el mismo error:

Amigo es que debes colocar según el tipo de dato que sea,

que tipo de dato tiene los campos:

'preg_evaluacion', 'preg_secc',
'preg_clave',
'preg_descripcion'

debes hacer un paso a paso para ver en que linea da error la conversion.

Saludos.

maeyanes 07-10-2008 21:49:23

Hola...

¿Por que le asignas el valor del campo a las variables y los edits y no al revés?

Otra cosa, ¿todos los campos son de tipo string?

Y ya para finalizar, ¿exactamente en que línea se produce el error?


Saludos...

Elite237 07-10-2008 22:15:22

el error me lo da en esta linea

Código Delphi [-]
if form11.table1.locate('preg_clave',edclave.text,[])then

donald shimoda 07-10-2008 22:21:53

Cita:

Empezado por Elite237 (Mensaje 318764)
el error me lo da en esta linea


Debió ser:

Código Delphi [-]
if form11.table1.locate('preg_clave', VarArrayOf([edClave.text]),[]) then


usa el help amigo.

Saludos

roman 07-10-2008 23:17:36

Cita:

Empezado por donald shimoda (Mensaje 318775)
Debió ser:

Código Delphi [-]
if form11.table1.locate('preg_clave', VarArrayOf([edClave.text]),[]) then

No necesariamente. Si sólo se busca por un campo, el valor a buscar puede darse con un variant sencillo.

// Saludos

donald shimoda 07-10-2008 23:20:45

Cita:

Empezado por roman (Mensaje 318797)
No necesariamente. Si sólo se busca por un campo, el valor a buscar puede darse con un variant sencillo.

// Saludos

Amigo Román, no uso mucho locate la verdad, pero vos decís que colocando un string rula? si la memoria no me falla no rula y se trula. :D

Saludos

roman 07-10-2008 23:29:46

Pues te falla :p

Cita:

Empezado por ayuda de Delphi (TDataSet)
Descendant classes that are not unidirectional override this method so that it locates the record where the fields identified by the semicolon-separated list of fields in KeyFields have the values specified by the Variant or Variant array KeyValues

Cita:

Empezado por ayuda de Delphi (TBDEDataSet)
KeyValues is a variant array containing the values to match in the key fields. If KeyFields lists a single field, KeyValues specifies the value for that field on the desired record

Además lo acabo de probar :)

// Saludos

donald shimoda 07-10-2008 23:36:00

Cita:

Empezado por roman (Mensaje 318803)
Además lo acabo de probar :)

// Saludos

Es lo que me falto a mi, estoy a dos manos. :p

Pegale el código a este amigo entonces para ver donde esta mal lo que hizo, que el objetivo es ayudarlo a el.

Saludos

roman 07-10-2008 23:41:54

¡Ah! Pero yo no sé dónde está su error. Me parece extraño que sea en la línea que dice. Pero si es así, entonces puediera ser que preg_clave fuese un campo numérico y que edclave.text no contiene un número.

// Saludos

donald shimoda 07-10-2008 23:45:45

Cita:

Empezado por roman (Mensaje 318806)
¡Ah! Pero yo no sé dónde está su error. Me parece extraño que sea en la línea que dice. Pero si es así, entonces puediera ser que preg_clave fuese un campo numérico y que edclave.text no contiene un número.

// Saludos

Por eso le pedi los tipos de los campos, aún sin suerte. :(


La franja horaria es GMT +2. Ahora son las 23:05:46.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi