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 01-08-2005
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
Question Problemita en query

Buenos dias, tengo inconveniente con esa consulta:
Código SQL [-]
  INSERT INTO TABLAS (
    DESCRIPCION,
    FECHA_DESDE,
    FECHA_HASTA,
    UTILIZA_LLAMADA_ENTRANTE)
Select
    ESCRIPCION,
    FECHA_DESDE,
    FECHA_HASTA,

    UTILIZA_LLAMADA_ENTRANTE
from tablas
where
ID_TABLA = :ID_TABLA_A_COPIAR;

mi idea es insertar dentro de la tabla tablas el mismo dato que ya tiene con otro nro de id que ya se ingresa automatico con un generator.
el problema es que al ejecutar esto en ibexpert, sql editor, me dice :
incompatible column/host variable daa type.
Dynamic SQL Error.
SQL error code = -303.
conversion error from string "NombreTest".

tengo algun problema con la descripcion,, mi descripcion es un varchar de longitud 35... necesito algun casteo? como tendria que modificar esta query para que no me salga este error??

Muchas gracias a todos!
Responder Con Cita
  #2  
Antiguo 02-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Haciendo un analisis rapido, falta poner Values
Código SQL [-]
  INSERT INTO TABLAS (
     DESCRIPCION,
     FECHA_DESDE,
     FECHA_HASTA,
     UTILIZA_LLAMADA_ENTRANTE)
 /*Aqui*/
 values (
 Select
     ESCRIPCION,
     FECHA_DESDE,
     FECHA_HASTA,
 
     UTILIZA_LLAMADA_ENTRANTE
 from tablas
 where
 ID_TABLA = :ID_TABLA_A_COPIAR)
Suerte
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #3  
Antiguo 02-08-2005
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
Exclamation no, es otro tema..

no, no es necesario el uso de values, la query puedo ejecutarla perfectamente solo tengo un problema que se debe solucionar con cast calculo pero no se bien como encajarlo en la consulta...
se puede ver eso claramente por lo que dice la query cuando la ejecuto

Código:
 incompatible column/host variable data type.
  Dynamic SQL Error.
  SQL error code = -303.
  conversion error from string "NombreTest".
Alguien puede ayudar con mi consulta? Gracias
Responder Con Cita
  #4  
Antiguo 02-08-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Hola, no necesitas el value.

sólo queres copiar un registro o toda la tabla?

Quien es "NombreTest"?

como son las estructuras de las dos tablas?
__________________
[Crandel]
Responder Con Cita
  #5  
Antiguo 02-08-2005
Avatar de hector.roma
hector.roma hector.roma is offline
Miembro
 
Registrado: jul 2005
Ubicación: a caballo entre Galicia y Portugal
Posts: 58
Poder: 19
hector.roma Va por buen camino
Yo creo que falta values o sobra la lista de campos
Responder Con Cita
  #6  
Antiguo 02-08-2005
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
En

Código SQL [-]
select
  ESCRIPCION

¿que no sobran esos dos puntos? Si se estuviera insertando un sólo registro usando VALUES entonces se pueden pasar como parámetros los valores de los campos, pero aquí se está usando un SELECT de manera que estamos hablando de los nombres de los campos y no de sus valores. ¿En IB pueden pasarse como parámetros a una consulta los nombres de los campos?

// Saludos
Responder Con Cita
  #7  
Antiguo 02-08-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
En realidad con el select le estamos pidiendo los valores de esos campos
__________________
[Crandel]
Responder Con Cita
  #8  
Antiguo 02-08-2005
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 Crandel
En realidad con el select le estamos pidiendo los valores de esos campos
Sí claro, pero para obtener esos valores, el texto de la consulta especifica el nombre de los campos, y esto es lo que se está intentando pasar como parámetro.

// Saludos
Responder Con Cita
  #9  
Antiguo 03-08-2005
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
Lightbulb

Buenas, ante todo, Gracias por responder! les detallo mas el tema, quizas no he sido muy claro el tema, el tema seria que tengo esta pequeña query donde estaria reutilizando los campos del registro anterior para la generacion de un nuevo registro de entrada:

Código SQL [-]
INSERT INTO TABLAS (
DESCRIPCION,
FECHA_DESDE,
FECHA_HASTA,
UTILIZA_LLAMADA_ENTRANTE)
Select
ESCRIPCION,
FECHA_DESDE,
FECHA_HASTA,
 
UTILIZA_LLAMADA_ENTRANTE
from tablas
where
ID_TABLA = :ID_TABLA_A_COPIAR;

En el select le pongo : a descripcion porque quiero ingresar yo ese valor para que lo inserte en la tabla.(puede que mi error este ahi, porque estoy haciendo un select de un valor que estaria "cableado" o fijo a lo que ponga, no estoy seguro si eso es correcto o no, pero creo que puede ser un tema de casteo, puesto que si pongo un valos entre '' me funciona sin problemas.

Despues tengo :id_tabla_a_copiar ese es un campo tambien de entrada donde pongo un id existente y me copia todos los datos al nuevo registro, a excepcion de la descripcion que la quiero de entrada.

mi error como les mostre es:
Código:
incompatible column/host variable data type.
Dynamic SQL Error.
SQL error code = -303.
conversion error from string "NombreTest".
donde NombreTest es un ejemplo de un valor de entrada para el campo descripcion, puse nombretest podia ser cualquier cosa, es unvarchar de hasta 35 caracteres.

Lo que dice el error al ejecutarlo segun puedo entender es :
Código:
incompatible column/host variable data type.
tipo de datos incompatible... no se si podre aplicar un cast para el dato o cual es el problema concreto, quisas alguien con mayores conocimientos de este tema me pueda asistir..

Muchas Gracias!!

Última edición por marceloalegre fecha: 03-08-2005 a las 13:44:47.
Responder Con Cita
  #10  
Antiguo 03-08-2005
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
Lightbulb

En cuanto a lo que tu dices roman, si, estoy pasando descripcion como parametro dentro del select, eso no me ha dado problemas nunca por lo menos con interbase...
Responder Con Cita
  #11  
Antiguo 03-08-2005
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 kanvictor
si, estoy pasando descripcion como parametro dentro del select, eso no me ha dado problemas nunca por lo menos con interbase...
No me convences. Sé que es aventurado decir esto puesto que no uso las componentes IB pero curiosamente el mismo error de incompatibilidad de tipos me da cuando hago la prueba con el bde.

Por otra parte mencionaste antes que si pones un valor explícito sí funciona. Es decir, según entiendo, si pones:

Código SQL [-]
INSERT INTO TABLAS (
DESCRIPCION,
FECHA_DESDE,
FECHA_HASTA,
UTILIZA_LLAMADA_ENTRANTE)
Select
'NombreTest',
FECHA_DESDE,
FECHA_HASTA,
 
UTILIZA_LLAMADA_ENTRANTE
from tablas
where
ID_TABLA = :ID_TABLA_A_COPIAR;

funcion a, ¿cierto? ¿Por qué no intentas sustituyendo el valor de DESCRIPCION de otra manera, por ejemplo, declara una constante con el texto de la consulta:

Código Delphi [-]
const
  fmtSql =
    'INSERT INTO TABLAS ('#13 +
    'DESCRIPCION,'#13 +
    'FECHA_DESDE,'#13 +
    'FECHA_HASTA,'#13 +
    'UTILIZA_LLAMADA_ENTRANTE)'#13 +
    'Select'#13 +
    '"%s",'#13 +
    'FECHA_DESDE,'#13 +
    'FECHA_HASTA,'#13 +
 
    'UTILIZA_LLAMADA_ENTRANTE'#13 +
    'from tablas'#13 +
    'where'#13 +
    'ID_TABLA = :ID_TABLA_A_COPIAR';

Al asignar el texto de la consulta a la componente usas Format:

Format(fmtSql, [Descripcion])

Format te devolverá el mismo texto pero con '%s' sustituido por el valor que tenga la variable Descripción.

// Saludos
Responder Con Cita
  #12  
Antiguo 03-08-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Hola kanvictor, no estoy muy seguro de que puedas pasar el parámetro de descripción de esa forma en el select.

yo lo separaría en dos SQL

Código SQL [-]
INSERT INTO TABLAS (
  FECHA_DESDE,
  FECHA_HASTA,
  UTILIZA_LLAMADA_ENTRANTE)

Select
  FECHA_DESDE,
  FECHA_HASTA,
  UTILIZA_LLAMADA_ENTRANTE
from tablas

where
  ID_TABLA = :ID_TABLA_A_COPIAR;

Luego

Código SQL [-]
UPDATE TABLAS 
  SET DESCRIPCION = DESCRIPCION
WHERE
  ID_TABLA = :ID_TABLA_A_COPIAR;
__________________
[Crandel]
Responder Con Cita
  #13  
Antiguo 03-08-2005
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
Pero no es necesario. El valor que va a entrar al campo DESCRIPCION es el mismo para todos los registros insertados y puede hacerse desde la primera consulta, sólo que no puede sustituirse como si fuera un parámetro pero sí como describí antes. Al menos funciona en Paradox y sería raro que Paradox pueda hacer algo que Interbase no.

// Saludos
Responder Con Cita
  #14  
Antiguo 03-08-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
pero en FB/IB no se puede colocar un valor que reemplace el nombre del campo en una instrucción SQL.
__________________
[Crandel]
Responder Con Cita
  #15  
Antiguo 03-08-2005
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
¿O sea que no se puede hacer una cosulta del tipo

Código SQL [-]
select campo1, campo2, "dato fijo"
from tabla

Qué triste

// Saludos
Responder Con Cita
  #16  
Antiguo 03-08-2005
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
Acabo de instalar firebird 1.5, creé dos tablas de prueba e inserté datos de una a otra tal como describí anteriormente y funcionó sin problemas.

// Saludos
Responder Con Cita
  #17  
Antiguo 03-08-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
si funciona , pero con comillas simples

ya voy a probar la otra instruccion.
__________________
[Crandel]
Responder Con Cita
  #18  
Antiguo 03-08-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
instalaste firebird sólo para probarlo ???

que dedicación !!!!
__________________
[Crandel]
Responder Con Cita
  #19  
Antiguo 03-08-2005
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 Crandel
instalaste firebird sólo para probarlo ???
Y no sólo Firebird, también el IBExpert . Lo que pasa es que en otro hilo de hoy se habló de esto mismo así que necesitaba comprobarlo por mi mismo antes de seguir diciendo que si algo se puede en paradox también se puede en ib/fb

// Saludos
Responder Con Cita
  #20  
Antiguo 04-08-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
probe recien de nuevo la instrucción que planteo originalmente kanvictor, para lograr hacer las dos cosas en una sola instrucción, pero no puede hacer que funcione.

Probe con cast y tampoco.

que raro.
__________________
[Crandel]
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


La franja horaria es GMT +2. Ahora son las 15:06:53.


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