Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Error en conexión en tiempo de ejecución !! (https://www.clubdelphi.com/foros/showthread.php?t=1394)

Lester 12-06-2003 19:18:33

Error en conexión en tiempo de ejecución !!
 
Hola amigos...

Ahora se me presentó este extraño problemita...
En tiempo de ejecución dentro del Delphi cuando establezco la conexión con el componente ADO me sale este error:

Cita:

Project Name.exe raised exception class EVariantError with message 'Invalid variant type conversion'. Process stopped. Use Step or Run to continue.
Y sin embargo cuando ejecuto la aplicación fuera del Delphi no me da ningún error..., para que tengan un poco más de datos, realizo la entrada en un formulario, esa entrada la guardo en una variable de tipo RECORD que tengo declarada ya y luego lo que hago es lo siguiente...

Código:

ADOTable1.Active := True;
ADOTable1.Append;
ADOTable1.FieldByName('Nombre').AsString := Temp.Nombre;
ADOTable1.FieldByName('Fecha').AsString := Temp.Fecha;
ADOTable1.FieldByName('CodDeudor').AsString := Temp.CodDeudor;
ADOTable1.FieldByName('Deudor').AsString := Temp.Deudor;
ADOTable1.FieldByName('CodProd').AsString := Temp.CodProd;
ADOTable1.FieldByName('Descrip').AsString := Temp.Descrip;
ADOTable1.FieldByName('UM').AsString := Temp.UM;
ADOTable1.FieldByName('Cantidad').AsFloat := Temp.Cantidad;
ADOTable1.FieldByName('Importe').AsFloat := Temp.Importe;
ADOTable1.FieldByName('Confirm').AsString := Temp.Confirm;
ADOTable1.FieldByName('Comprado').AsString := Temp.Comprado;
ADOTable1.FieldByName('Ubicado').AsString := Temp.Ubicado;
ADOTable1.FieldByName('CodUbicado').AsString := Temp.CodUbicado;
ADOTable1.FieldByName('FechaModif').AsString := Temp.FechaModif;
ADOTable1.Post;
ADOTable1.Active := False;

Gracias por adelantado...:confused:

jhonny 12-06-2003 19:34:32

Verifica que Temp.Cantidad, sea de tipo flotante,
pues generalmente la cantidad siempre es Entera y quedaria asi:

ADOTable1.FieldByName('Cantidad').AsInteger := Temp.Cantidad;

Si no funciona pues entonces verifica con un Break point el lugar donde esta el error

Lester 12-06-2003 20:18:41

Hola nuevamente...

Coloqué un BreakPoint para tracearlo y el error me sale en la línea donde establezco la conexión con la base de datos, o sea, donde la activo...

Código:

ADOTable1.Active := True;
No sé que pudiera ser, en cuanto a lo que me dijiste sobre el campo 'Cantidad', es así como quiero que sea, pues la cantidad que yo le voy a entrar no es entera, sino que pudiera tener decimales..., ya verifiqué el campo 'Cantidad' en la base de datos y en el record, buscando errores, pero no aparece ninguno.

Vuelvo a repetir que cuando ejecuto la aplicación fuera del Delphi no me da ningún error...:confused:

jhonny 12-06-2003 20:35:29

Y si usas este codigo?
Código:

ADOTable1.Close;
ADOTable1.Open;
ADOTable1.Append;
ADOTable1.FieldByName('Nombre').AsString := Temp.Nombre;
ADOTable1.FieldByName('Fecha').AsDate := Temp.Fecha;
ADOTable1.FieldByName('CodDeudor').AsString := Temp.CodDeudor;
ADOTable1.FieldByName('Deudor').AsString := Temp.Deudor;
ADOTable1.FieldByName('CodProd').AsString := Temp.CodProd;
ADOTable1.FieldByName('Descrip').AsString := Temp.Descrip;
ADOTable1.FieldByName('UM').AsString := Temp.UM;
ADOTable1.FieldByName('Cantidad').AsFloat := Temp.Cantidad;
ADOTable1.FieldByName('Importe').AsFloat := Temp.Importe;
ADOTable1.FieldByName('Confirm').AsString := Temp.Confirm;
ADOTable1.FieldByName('Comprado').AsString := Temp.Comprado;
ADOTable1.FieldByName('Ubicado').AsString := Temp.Ubicado;
ADOTable1.FieldByName('CodUbicado').AsString := Temp.CodUbicado;
ADOTable1.FieldByName('FechaModif').AsDate := Temp.FechaModif;
ADOTable1.Post;
ADOTable1.Close;

Que sucede?

Espero que te sirva.

__cadetill 12-06-2003 21:16:19

Si tienes campos persistentes (o sea, TFields creados) y has cambiado algun tipo de dato, verifica que coincidan los tipos de los campos persistentes con los de la BD, a ver si puede ser eso

Suerte

linsua 12-06-2003 21:22:26

Hola,

Si el problema lo tienes al activar el DataSet, es probable que tengas un campo agregado dentro de este DataSet que sea de tipo diferente al de la tabla de la base de datos. Esto te puede haber ocurrido si has cambiado el tipo de algún campo en la tabla de la base de datos y no lo has cambiado en el DataSet.

Prueba a quitar todos los campos del DataSet y volverlos a agregar.

Suerte y un saludo

Lester 12-06-2003 21:46:00

Bueno amigos agradezco mucho la ayuda que me han brindado, pero no se me ha podido resolver el problemita, pero no importa..., yo lo sigo corriendo desde afuera del Delphi...

Ahora me surge una nueva interrogante, tengo realizada la conexión a la BD hecha en Access con los componentes ADO, y quisiera saber cómo puedo saber el número del registro en el cual me encuentro actualmente. Me explico, es para una búsqueda..., yo muestro por pantalla todos los registros y cada uno de ellos tiene un número de índice en la tabla, lo que quiero hacer es buscarlos por el número donde se encuentra en esa tabla, pues si hago un campo (AUTONUMERICO) luego cuando borro algún registro no se me renumera, ni sé como hacerlo, si me pudieran tirar un cabo con eso se los agradecería mucho...

Ej:

Nombre Sexo Edad
Lester M 23 (#1)
Cualquiera F 50 (#2)
Otro M 68 (#3)

Si creara un campo (AUTONUMERICO) y borrara algún registro me quedaría de la siguiente forma:

Ej:

ID Nombre Sexo Edad
1 Lester M 23 (#1)
2 Cualquiera F 50 (#2) <------ Si elimino este
3 Otro M 68 (#3)

Quedaría:

ID Nombre Sexo Edad
1 Lester M 23 (#1)
3 Otro M 68 (#3) <------ No se me renumera

Gracias de antemano...:confused:

__cadetill 12-06-2003 22:18:34

Puedes hacer esto

1.- antes de borrar guardas la Id del registro en una variable
2.- borras el registro (con un SQL de Delete o con un Tabla.Delete)
3.- lanzas una sentencia SQL de Update para modificar los registros posteriores

Código:

  update tabla set id = id - 1 where id > variable
Espero te sirva

Lester 12-06-2003 22:46:04

Cadetill:

Un millón de gracias hermano, ya resolví lo de la conexión, estaba bobeando, era como tú decías... En cuanto a último que me escribiste no lo he implementado todavía, luego lo voy a hacer y después te digo...¿OK?

Gracias nuevamente de un amigo Cubano..., lo que necesites tíralo para acá a ver si alguna vez te logro tirar un cabo...

Salu2,


La franja horaria es GMT +2. Ahora son las 17:07:44.

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