Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-01-2006
Avatar de gusanita
gusanita gusanita is offline
Miembro
 
Registrado: dic 2005
Posts: 30
Poder: 0
gusanita Va por buen camino
Unhappy Error: Type mismatch in expression

Hola!!!

El siguiente es mi código:
Código Delphi [-]
DataModuleBD.Query.SQL.Clear;
DataModuleBD.Query.SQL.Add('Select ALU_NOM, ALU_SEM, ALU_ESP');
DataModuleBD.Query.SQL.Add('From ":BDBECAS_BAJDEF: DATPERAL"');
DataModuleBD.Query.SQL.Add('Where ALU_CTRL = ' + validancontrol.Text);
DataModuleBD.Query.SQL.Add(';');
DataModuleBD.Query.Open;
Y cuando termina de leer la aultima linea me manda el error!!! (Type mismatch in expression).
El tipo de campo de ALU_CTRL es varchar.

Gracias por su atención!!!
__________________
No Decaigas que Vivir es Aprender...

Última edición por gusanita fecha: 27-01-2006 a las 19:15:51.
Responder Con Cita
  #2  
Antiguo 27-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Si ALU_CTRL es de tipo texto, sustituye validancontrol.Text por QuotedStr(validancontrol.Text).

Por otra parte fíjate que el error es acerca de tipos de datos, por tanto sería recomendable que nos índicaras de qué tipos de datos son tus campos.

EDITO:

¡Ah!, veo que ya agregaste esa información

// Saludos
Responder Con Cita
  #3  
Antiguo 27-01-2006
Avatar de gusanita
gusanita gusanita is offline
Miembro
 
Registrado: dic 2005
Posts: 30
Poder: 0
gusanita Va por buen camino
Hola!!!

Para que es el QuotedStr(validancontrol.Text)???

Gracias por atender!!!!
__________________
No Decaigas que Vivir es Aprender...
Responder Con Cita
  #4  
Antiguo 27-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Suponte que validancontrol tiene el texto HU74832. Si examinas la sentencia SQL verás que queda así:

Código SQL [-]
Select ALU_NOM, ALU_SEM, ALU_ESP
From ":BDBECAS_BAJDEF: DATPERAL"
Where ALU_CTRL = HU74832

Lo cual es incorrecto por que faltan las comillas alrededor de HU74832. QuotedStr te pone esas comillas. Podrías hacerlo tú misma:

Código Delphi [-]
DataModuleBD.Query.SQL.Add('Where ALU_CTRL = "' + validancontrol.Text + '"');

pero termina siendo bastante ilegible tantas comillas. De hecho, lo mejor siempre que uses consultas donde el valor de un campo varíe, es usar parámetros:

Código Delphi [-]
DataModuleBD.Query.SQL.Clear;
DataModuleBD.Query.SQL.Add('Select ALU_NOM, ALU_SEM, ALU_ESP');
DataModuleBD.Query.SQL.Add('From ":BDBECAS_BAJDEF: DATPERAL"');
DataModuleBD.Query.SQL.Add('Where ALU_CTRL = :ctrl');
DataModuleBD.Query.SQL.Add(';');
DataModuleBD.Query.Open;

y sustituir el parámetro al momento de ejecutar la consulta:

Código Delphi [-]
DataModuleBD.Query.ParamByName('ctrl').AsString := validancontrol.Text;

Al usar AsString, ya le estás indicando que el parámetro es texto y se agregarán las comillas automáticamente. El uso de parámetros te deja un código mucho más prolijo y manejable.

// Saludos
Responder Con Cita
  #5  
Antiguo 27-01-2006
Avatar de gusanita
gusanita gusanita is offline
Miembro
 
Registrado: dic 2005
Posts: 30
Poder: 0
gusanita Va por buen camino
Hola!!!

y sustituir el parámetro al momento de ejecutar la consulta:

Código Delphi [-]
DataModuleBD.Query.ParamByName('ctrl').AsString := validancontrol.Text;

Disculpa pero, te refieres a colocar esta instruccion antes de la siguiente???

Código Delphi [-]
DataModuleBD.Query.Open;

Gracias nuevamente por tu pronta atención!!!!
__________________
No Decaigas que Vivir es Aprender...
Responder Con Cita
  #6  
Antiguo 27-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por gusanita
Disculpa pero, te refieres a colocar esta instruccion antes de la siguiente???


// Saludos
Responder Con Cita
  #7  
Antiguo 27-01-2006
Avatar de gusanita
gusanita gusanita is offline
Miembro
 
Registrado: dic 2005
Posts: 30
Poder: 0
gusanita Va por buen camino
Mi código quedó de la siguiente manera:

Código Delphi [-]
DataModuleBD.Query.SQL.Clear;
DataModuleBD.Query.SQL.Add('Select ALU_NOM, ALU_SEM, ALU_ESP');
DataModuleBD.Query.SQL.Add('From ":BDBECAS_BAJDEF: DATPERAL"');
DataModuleBD.Query.SQL.Add('Where ALU_CTRL = :ctrl');
DataModuleBD.Query.SQL.Add(';');
DataModuleBD.Query.ParamByName('ctrl').AsString := validancontrol.Text;
DataModuleBD.Query.Open;

Pero aun me sigue marcando el mismo error!!!

Nuevamente Muchas Gracias!!!
__________________
No Decaigas que Vivir es Aprender...
Responder Con Cita
  #8  
Antiguo 27-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Pues no veo nada extraño! Excepto dos cosas:

1. En 'From ":BDBECAS_BAJDEF: DATPERAL yo quitaría el espacio después de los segundos :

2. Supongo que es innecesario el ; al final de la consulta.

En Paradox, el punto 1 marca un error pero distinto al que mencionas. El punto 2 no genera problemas pero no sé qué base de datos uses y quizá sí afecte.

// Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Excepciones Acker Tablas planas 6 06-08-2005 15:22:18
invalid expression in the select .... IVAND Firebird e Interbase 3 27-02-2005 01:52:12
type mismatch in expression noe SQL 1 12-02-2005 02:41:26
Database Desktop, Type Mismatch Expression en campo fecha fjolivares SQL 1 19-01-2005 13:45:53
Version Mismatch en Paradox Selene Tablas planas 1 11-08-2004 20:12:44


La franja horaria es GMT +2. Ahora son las 08:04:52.


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