Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-03-2010
Avatar de elaguna
elaguna elaguna is offline
Miembro
 
Registrado: abr 2009
Ubicación: México
Posts: 51
Poder: 16
elaguna Va por buen camino
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.
__________________
No lo intentes!. Hazlo o no lo hagas, pero no lo intentes !!! (Yoda)
Responder Con Cita
  #2  
Antiguo 03-03-2010
Avatar de elaguna
elaguna elaguna is offline
Miembro
 
Registrado: abr 2009
Ubicación: México
Posts: 51
Poder: 16
elaguna Va por buen camino
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.

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.
__________________
No lo intentes!. Hazlo o no lo hagas, pero no lo intentes !!! (Yoda)
Responder Con Cita
  #3  
Antiguo 05-03-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
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?
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #4  
Antiguo 05-03-2010
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
¿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.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #5  
Antiguo 05-04-2010
Avatar de elaguna
elaguna elaguna is offline
Miembro
 
Registrado: abr 2009
Ubicación: México
Posts: 51
Poder: 16
elaguna Va por buen camino
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
__________________
No lo intentes!. Hazlo o no lo hagas, pero no lo intentes !!! (Yoda)
Responder Con Cita
  #6  
Antiguo 05-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Código:
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;
No sé qué estás haciendo, pero en este select, w_maximo siempre
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.
Responder Con Cita
  #7  
Antiguo 05-04-2010
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Lightbulb

esta deberia ir asi y no trabajar con el recordcount, para eso no necesitas sacar el maximo
Código Delphi [-]
w_maximo : Integer;
 Query1.Active:=False; 
Query1.SQL.Clear;   
Query1.SQL.Add('select max(id_planti) as maximo from planti_corr'); 
 Query1.Active:=True; 
 w_maximo := query1.fieldbyname('maximo').asinteger + 1;  
Query1.Active:=False;

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
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ejecutar varios insert a la ves jzginez Conexión con bases de datos 4 06-12-2007 03:35:29
error al ejecutar parametros con ShellExecute JuanErasmo API de Windows 7 10-05-2007 23:27:26
Tiempos al ejecutar tquery.insert rmendigu Conexión con bases de datos 2 12-03-2007 16:10:39
Insert con parámetros SaurioNet SQL 1 14-04-2004 10:51:57
Ejecutar varios insert en MYSQL Igna Conexión con bases de datos 8 13-04-2004 15:55:31


La franja horaria es GMT +2. Ahora son las 12:56:43.


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
Copyright 1996-2007 Club Delphi