Ver la Versión Completa : Error: Type mismatch in expression
gusanita
27-01-2006, 19:12:02
Hola!!!
El siguiente es mi código:
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!!!
roman
27-01-2006, 19:29:40
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
gusanita
27-01-2006, 19:59:10
Hola!!!
Para que es el QuotedStr(validancontrol.Text)???
Gracias por atender!!!!
roman
27-01-2006, 20:13:28
Suponte que validancontrol tiene el texto HU74832. Si examinas la sentencia SQL verás que queda así:
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:
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:
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:
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
gusanita
27-01-2006, 20:47:53
Hola!!!
y sustituir el parámetro al momento de ejecutar la consulta:
DataModuleBD.Query.ParamByName('ctrl').AsString := validancontrol.Text;
Disculpa pero, te refieres a colocar esta instruccion antes de la siguiente???
DataModuleBD.Query.Open;
Gracias nuevamente por tu pronta atención!!!!
roman
27-01-2006, 20:53:53
Disculpa pero, te refieres a colocar esta instruccion antes de la siguiente???
Sí :)
// Saludos
gusanita
27-01-2006, 21:02:34
Mi código quedó de la siguiente manera:
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!!!
roman
27-01-2006, 21:25:14
¡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
gusanita
28-01-2006, 03:50:59
1. En 'From ":BDBECAS_BAJDEF: DATPERAL yo quitaría el espacio después de los segundos :
En efecto no debe de haber espacio, pero lo separe porque si no lo hago aparece una carita ":BDBECAS_BAJDEF:DATPERAL" y creí que seria más entendible si los separaba
2. Supongo que es innecesario el ; al final de la consulta.
Utilizo otra línea para el ; porque normalmente se me olvida colocarlo.
Para la Base de Datos utilizo Access
Muchas gracias por tu Atención!!!
vtdeleon
28-01-2006, 13:45:39
SaludosEn efecto no debe de haber espacio, pero lo separe porque si no lo hago aparece una carita ":BDBECAS_BAJDEFATPERAL" y creí que seria más entendible si los separaba
Usando las etiquetas ([delphi ],[sql ],....) no salen las caritas!
Si aun tienes problemas con la sentencias, pues yo te aconsejos que lo manejes en tiempo de dise~o, es decir, agregando la sentencias (con algun valor en "where") al dataset en su propiedad SQL, lo activas y chequea a ver si aun te da el error.
Yo, aveces, verifico la sentencias de esa forma en el dataset en tiempo de dise~o antes que en ejecucion.
Jonnathan
28-01-2006, 17:43:04
Disculpen mi ignorancia, nunca he trabajado en Paradox (si es este el caso) pero: ¿Esta bien que el nombre de la tabla vaya entre comillas dobles en esa consulta? Porque yo en otros manejadores siempre lo pongo sin comillas o entre corchetes: [:BDBECAS_BAJDEF: DATPERAL]. ¿Alguien que me oriente un poco?
lucasarts_18
28-01-2006, 18:12:17
Hola:
A mí me parece raro los dos puntos luego de la clausula From :eek:
Hasta Luego -
vBulletin v3.6.8, Derechos ©2000-2013, Jelsoft Enterprises Ltd.