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 06-10-2011
pape19 pape19 is offline
Miembro
 
Registrado: jul 2010
Posts: 96
Poder: 14
pape19 Va por buen camino
Problema de tipos con Query

Soy bastante nuevo en Delphi, y de a poco me voy acomodando con las funciones que ofrece. Estoy desarrollando una pequeña aplicacion de control de inventarios, y para hacer una consulta, necesito de una Query. Como nunca hice una en Delphi, me parece que algo estoy haciendo mal.

Yo tengo una tabla general, que contiene elementos, cada uno identificado con un codigo de elemento.
En otra tabla, en memoria, tengo guardados unos Codigo de elemento, que son los que necesito que queden en la tabla general.

Es decir...TablaGeneral: Cod_Elemento...15; 21; 25; 26; 28 - MemoryTable: Cod_Elemento...21; 25

Lo que tengo que lograr es filtrar la tabla general de manera que solo queden el registro con cod 21 y 25; o hacer una consulta que devuelva solo esos registros. En tabla general, cada registro tiene varios campos, que obviamente tienen que acompañar al Cod_Elemento en la consulta.

Como les decía, pensé en una Query, y mi código es el siguiente...

En la Unit del Form:

Código Delphi [-]
//Con este ciclo pongo todos los ID de la tabla en mem. en un string. Ej1: 20, 24, 27

    MemoryTable1.First;
    cadena:=inttostr(MemoryTable1Cod_Elemento.value);
    MemoryTable1.next;
    while not MemoryTable1.eof do
      Begin
        cadena:=cadena + ', ' + inttostr(MemoryTable1Cod_Elemento.value);
        MemoryTable1.Next
      End;

 //con lo que sigue, paso como parámetro cadena, que quedaría como el Ej1.
    If camposllenos = 3 then
      Begin
        Query1.ParamByName('PARAMETRO').AsString:= cadena;
        Query1.Open;
      End;

En la query:

Código SQL [-]
SELECT * FROM General
WHERE General.Cod_Elemento IN
(:PARAMETRO)

Y en las propiedades del parámetro, tengo que...

Código:
DataType: ftString
ParamType: ptUnknown
Value Type: String
Cuando ejecuto, al llegar al Open de la Query, me sale este error de tipos "Type Mismatch in expression".

Que estoy haciendo mal? Que solucion me pueden dar? GRACIAS!

Última edición por Casimiro Notevi fecha: 06-10-2011 a las 14:47:57. Razón: Poner etiquetas [delphi], [sql] y [code]
Responder Con Cita
  #2  
Antiguo 06-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda poner el código entre las etiquetas correspondientes, ejemplo:




Y no olvides leer nuestra guía de estilo, gracias por tu colaboración.

.
Responder Con Cita
  #3  
Antiguo 06-10-2011
pape19 pape19 is offline
Miembro
 
Registrado: jul 2010
Posts: 96
Poder: 14
pape19 Va por buen camino
Pasar un array como parámetro a una Query

Lo que hago es generar desde una tabla en memoria un array "cadena" de integer, a una Query en Paradox.

El error es el adjunto.

Mi codigo es el que sigue:

En el unit

Código Delphi [-]
   MemoryTable1.First;
    while not MemoryTable1.eof do
      Begin
        y:=y+1;
        cadena[y]:= MemoryTable1Cod_Elemento.value;
        MemoryTable1.Next
      End;

En la query:

Código Delphi [-]
SELECT * FROM General
WHERE General.Cod_Elemento IN
(:PARAMETRO)

En el parametro:

Código Delphi [-]
DataType: ftArray
ParamType: ptInput
Value Type: Integer
Imágenes Adjuntas
Tipo de Archivo: jpg Sin título.jpg (31,1 KB, 7 visitas)
Responder Con Cita
  #4  
Antiguo 06-10-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Pape19.

Por favor no crees nuevos temas con el mismo contenido.
Guía de estilo punto 6:
Cita:
Nadie me contesta

Si te encuentras en esta situación, te aconsejaría que en vez de abrir otro tema, con lo que podría perderse información previa sobre el tema que expusiste en un principio, siguieses el tema que tu mismo iniciaste en su día, escribiendo una nueva contestación. De esta manera el tema se actualizará y pasará a la cabecera del foro, y se marcará como no leido para el resto de usuarios. Así evitamos duplicar información innecesariamente.

Otro motivo por el que es posible que no te hayan contestado es porque puedes haberte explicado mal. Sería conveniente en este caso que trataras de ampliar la información que has escrito en el primer mensaje de tu tema. Así podrías ayudar al resto de usuarios a que respondan más claramente.
Combiné los dos temas bajo el segundo título que es más significativo, e imagino fué ese el motivo del tu segundo mensaje.
Con respecto a esto último, te comento que si deseas cambiar un título, podés enviar un mensaje personal a cualquier moderador y con gusto lo cambiará por el que consideres más adecuado.

Un saludo y gracias por tu colaboración.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 06-10-2011
pape19 pape19 is offline
Miembro
 
Registrado: jul 2010
Posts: 96
Poder: 14
pape19 Va por buen camino
No quiero ser irrespetuoso, pero si lees bien, son dos temas distintos, porque son diferentes maneras de encarar un problema.

En uno de los puntos, pregunto porque me tira error de tipos pasando un string como parametro.

Y en el otro, pongo este ejemplo, pero mi pregunta es como hacer para pasar un array como parámetro; osea, consulta distinta a la anterior; por eso mismo es que abrí otro tema.

A lo mejor debería haber aprovechado mi primer consulta, y ubicar ahi en un comentario mi segundo problema.

Gracias igual por la aclaración, saludos
Responder Con Cita
  #6  
Antiguo 06-10-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.009
Poder: 20
oscarac Va por buen camino
me parece que en lugar de array debes usar una cadena... como bien lo has estado haciendo.. pero me parece que la sintaxis es un poquito diferente

Código SQL [-]
 
SELECT * FROM General WHERE General.Cod_Elemento IN ('02','03','04')

creo que tienes que crear una funcion que la cadena te la formatee de acuerdo a la sintaxis requerida
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #7  
Antiguo 06-10-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
No quiero ser irrespetuoso, pero si lees bien, son dos temas distintos
No, no lo sos en absoluto, solamente diferimos en la apreciación.

Primer post:
Código Delphi [-]
 MemoryTable1.First;
    cadena:=inttostr(MemoryTable1Cod_Elemento.value);
    MemoryTable1.next;
    while not MemoryTable1.eof do
      Begin
        cadena:=cadena + ', ' + inttostr(MemoryTable1Cod_Elemento.value);
        MemoryTable1.Next
      End;
Segundo post:
Código Delphi [-]
 MemoryTable1.First;
    while not MemoryTable1.eof do
      Begin
        y:=y+1;
        cadena[y]:= MemoryTable1Cod_Elemento.value;
        MemoryTable1.Next
      End;
Primer post:
Código Delphi [-]
SELECT * FROM General
WHERE General.Cod_Elemento IN
(:PARAMETRO)
Segundo post:
Código Delphi [-]
SELECT * FROM General
WHERE General.Cod_Elemento IN
(:PARAMETRO)
Primer post:
Código Delphi [-]
DataType: ftString
ParamType: ptUnknown
Value Type: String
Segundo post:
Código Delphi [-]
DataType: ftArray
ParamType: ptInput
Value Type: Integer
Para mí, es claro que se trata del mismo problema.

Cita:
, porque son diferentes maneras de encarar un problema.
Correcto, como bién dices, hay muchas formas de encarar un mismo problema. Entonces, podría darse el caso de que tuvieramos que leer repetidamente y en varios hilos la misma situación encarada de dos,tres o más formas diferentes, cuando lo lógico es crear un hilo con la consulta. Las formas de encararlo y solucionarlo irán surgiendo de las sugerencias que te vayan haciendo.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 06-10-2011 a las 21:32:41.
Responder Con Cita
  #8  
Antiguo 10-10-2011
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
resp

usa la propiedad filter.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
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
Pasar array como parámetro santiago14 Varios 10 17-09-2008 15:31:00
Como pasar un parametro? b3nshi Varios 3 18-08-2007 07:54:53
Pasar SQL como parametro veloki Impresión 7 16-04-2007 16:28:37
PLSQL - Pasar un array como parametro. movorack SQL 1 06-03-2007 21:07:59
pasar como parámetro un array bidimensional nsr048 Varios 2 08-11-2005 12:54:20


La franja horaria es GMT +2. Ahora son las 16:53:23.


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