![]() |
Error al ejecutar INSERT con parámetros
Qué tal.
Después de mucho tiempo de no programar estoy regresando al redil, y como era de esperarse me están ocurriendo cosas raras. Tengo declarada una variable de tipo entero en la cual voy a guardar el número máximo de registros de una tabla e incrementar en 1, esto lo estoy haciendo con un Query. Código Delphi [-]w_maximo : Integer; Query1.SQL.Clear; Query1.SQL.Add('select max(id_planti) from planti_corr'); Query1.Open; w_maximo := query1.RecordCount + 1; Query1.Close; Ahora necesito guardar algunos datos con parámetros Código Delphi [-]Query1.SQL.Clear; Query1.SQL.Add('insert into planti_corr (id_planti, nombre, archivo, tipo, descri) '); Query1.SQL.Add('values (:w_max, :w_nombre, :w_archivo, :w_tip, :w_descrip)'); Query1.ParamByName('w_max').AsInteger := w_maximo; Query1.ParamByName('w_nombre').AsString := edt_Titulo.Text; Query1.ParamByName('w_archivo').AsString := edt_Archivo.Text; Query1.ParamByName('w_tip').AsString := w_tipo; Query1.ParamByName('w_descrip').AsMemo := Trim(mem_Descrip.Text); Query1.ExecSQL; Pero me manda el error "Type mismatch in expression" Ya probé enviando cada uno de los campos y todos los campos tipo string, char, memo pasan bien los datos; pero la variable de tipo integer es la que me manda el error. También probé enviando todas las variables y el parámetro 'w_max' con valor 2 (directo) y todo funciona bien, pero con la variable no. Ojalá me haya explicado y puedan ayudarme, llevo 2 días con ese mismo problema. Gracias de antemano a todos. |
Perdón, algo malo paso con el post :-)
Una disculpa, algo malo pasó al momento de enviar el post, pero va de nuevo el código.
Ahora necesito guardar algunos datos con parámetros
Pero me manda el error "Type mismatch in expression" Ya probé enviando cada uno de los campos y todos los campos tipo string, char, memo pasan bien los datos; pero la variable de tipo integer es la que me manda el error. También probé enviando todas las variables y el parámetro 'w_max' con valor 2 (directo) y todo funciona bien, pero con la variable no. Ojalá me haya explicado y puedan ayudarme, llevo 2 días con ese mismo problema. Gracias de antemano a todos. |
Me da noséqué dejar este mensaje sin contestar.:(
La verdad es que no tengo mucha idea porque hace años que no uso bases de datos con Delphi pero, ¿no hay alguna propiedad que permita "desactivar" los parámetros? |
¿As comprobado el valor de la variable w_máximo antes de la inserción?, porque puede ser que tenga un valor nulo, aunque por otra parte me extraña que un recordcount devuelva null. Pon un punto de interrupción y comprueba el valor para ver si con ese dato podemos sacar algo más.
Un saúdo. |
Que tal.
Gracias por tu atención. La variable w_maximo es de tipo entero, no se que pasa, pero lo solucioné de una forma no muy elegante pero de momento me sacó del apuro. * Sigo haciendo la consulta para determinar el valor máximo * Guardo los datos por medio de una Tabla Table1.Insert ... Table1.Post Sé que no es lo recomendable pero urgía salir del problema, pero este persiste, ojalá puedan ayudarme. Gracias |
Código:
w_maximo : Integer; valdrá 2. Independientemente de lo que haga el select, al ser un "max", devuelve un registro con el valor max de id_planti. Luego le sumas 1 a recordcount y recordcount siempre es 1, un registro. |
esta deberia ir asi y no trabajar con el recordcount, para eso no necesitas sacar el maximo
Otra cosa es el tipo de campo, dependiendo el tipo de base de datos, por ejemplo en paradox no te permite guardar un integer en un campo declarado como smallint Por el error que dices que te da, Type minsmatch esta normalmente asociado a este tipo de situaciones Saludos |
La franja horaria es GMT +2. Ahora son las 12:57:09. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi