Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Como seleccionar campos de una tabla sin saber cuantos van a seleccionar (https://www.clubdelphi.com/foros/showthread.php?t=30100)

david duarte 08-02-2006 20:42:29

Como seleccionar campos de una tabla sin saber cuantos van a seleccionar
 
Hola a todos!!!

Me surgio un duda y no he podido encontrarla en internet.

Estoy haciendo un proyecto para una empresa que hace hilos y polimero, y ellos mismos tienen sus laboratorios, y estos hacen sus propias pruebas
Tengo una tabla que tiene como 20 campos(paradox), en ese laboratorio hacen 20 pruebas(a1,a2,a3,a4,......a20), yo como usuario puedo mandar a hacerles algunos analisis, pero no todos, p.e. quiero mandarles hacer el analisis1, analisis3, analisis5, etc.
al momento de dar de alta los analisis que el usuario mando hacer, si seleccionó realizar el analisis 1, le pongo un 'o'(una o, no un cero), y los que no selecciono, les pongo una 'x'.

ej

a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12
o x o x o x x x x x x x

entonces nada mas quiero que me muestre a1, a3,a5 y los demas no, pero no se como recorrer los campos.

no se si tenga que poner algun ciclo o que.

Ahora a lo que me tiene trabajando un poco de mas.

Para hacer una prueba, cree un proyecto nuevo, en ese proyecto tengo un datasource, un query y un dbgrid.

al dataset le asigno el query1.
y todo funciona, pongo el codigo sql para que vean

Código Delphi [-]
  Query1.DataBaseName := 'c:\setkimv2.0.1\';
  datasource1.DataSet := query1;
  Query1.SQL.Clear;
  Query1.sql.Add('SELECT *');
  Query1.SQL.Add('from res_textil');
  Query1.SQL.Add('WHERE LabFolio = :ctrl' );
  Query1.ParamByName('ctrl').AsString := edit1.text;
  Query1.Active := True;
  Query1.Open;


y si me muestra bien los datos en el dbgrid, pero me muestra todos los analisis, hasta los que tienen 'x', y eso no quiero.

Alguien sabe como hacerle para recorrer los campos y saber cuales tienen 'x' y cuales no, ya que me interesan que se muestren solamente los que son <> 'o'.

Espero haberme entendio =)

Muchas gracias.
Cómo te sientes hoy??

marcoszorrilla 08-02-2006 21:10:21

La idea puede ser una variable de tipo texto en donde vayas guardando los campos, separados por coma....

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
MisCampos:String;
begin
MisCampos:='Clave,Empresa';
Query1.Close;
Query1.Sql.Clear;
Query1.Sql.Add('Select '+ MisCampos+ ' from Clientes');
ShowMessage(Query1.Sql.Text);
Query1.Open;
end;

Un Saludo.

DTAR 08-02-2006 23:12:05

sa tabla no esta normalizada
 
o sea... porque no generas una tabla que tenga el codigo del paciente o de muesta o lo que sea... y el codigo de analisis.
para eso tienes que generar una tabla con analisis y vas a poder agregar todo s los analisis que quieras sin tener que modificar la tabla... y asi tambien vas a poder mostrar cuanquier analisis con un simple where

david duarte 09-02-2006 01:21:03

Si me dices que la tabla no esta normalizada, lo que pasa es que esa es un parte, la estructura de tabla completa la pongo mas abajo.

La verdad es que si estuve pensando en eso, pero no se me ocurrio, al final de cuentas se me hizo lo mismo, pero por lo que veo, no es lo mismo, ademas aqui hay mas gente que sabe mas que yo.

Por mas que pienso, no se me ocurre como quedaria.

en la tabla, tiene los siguientes campos
labfolio, numero, posicion(todas conforman mis llaves primarias),
a1,a2,a3,....a20.

Gracias!!
Cómo te sientes hoy??
Si tienen alguna sugerencia, se les agradecería

marcoszorrilla 09-02-2006 07:58:50

La idea que te propongo, que yo supuse deducirías es colocar todos los campos en una matriz, mediante los criterios que fueren marcar los que vayan a participar en la consulta.

Y finalmente recorrer la matriz mediante un ciclo e ir añadiendo los campos marcados a la variable MisCampos que yo te propuse.

Un Saludo.

david duarte 09-02-2006 23:32:16

Hola!!!

esta bien tu idea, pero estuve pensando y de todos modos creo que a final de cuentas, tienes que recorrer la tabla(no necesariamente secuencialmente), y eso era lo que no queria,ya que la tabla esta en el servidor y en donde tengo que hacer la consulta es en una computadora cliente, por lo tanto, se va a tardar mas.

Lo que yo intentaba expresar o dar a entender, que si por medio del query(que se ejecuta mas rapido) se puede recorrer la tabla por medio de un campo field.value o algo por el estilo que tenga sql, pero creo que no se puede.

Asi que pues tuve que hacerle primeramente un locate al primer registro que tengo que recuperar los campos y ya que esta en el primer registro del folio,recorro todos los campos, y anotando en una variable de tipo string, el ombre de los campos, separados por coma.

y si me funciono, lo que pasa es que le estaba respondiendo DTAR que me dice que mi tabla no esta normalizada, a final de cuentas ese no era el problema.

Asi solucione mi problema!!!

Espero que no se molesten por lo que dije anteriormente.

Saludos!!!!
Cómo te sientes hoy??

marcoszorrilla 09-02-2006 23:42:58

Si de antemano conoces los campos de la tabla, también puedes presentar los nombres de los campos acompañados por un casilla de verificación, al recorrer las casillas verás cuales están marcadas y entonces, esos campos los vas añadiendo a la variable que te propuse, una vez que el usuario de por finalizada la selección lanzarías el SQL.

Un Saludo.

mematanlimon 05-04-2010 22:15:43

a la inversa
 
buenas... estaba leyendo los hilos, y yo necesito hacer lo contrario, desde un archivo de texto separado por comas, poder volcar esos valores a un dbgrid, alquien sabe como se hace??? no encuentro y no se me ocurre un modo, los datos que deseo colocar dentro del dbgrid son de unos tracks de gps:

ejm

TP,D,-53.8122687209398,-68.1476321909577,00/00/00,00:00:00,0
TP,D,-53.8123668730259,-68.1481121387333,00/00/00,00:00:00,0
TP,D,-53.8124318327755,-68.1486702896655,00/00/00,00:00:00,0


donde bueno, como ya dije, debo volcar y separar los campos por las comas


La franja horaria es GMT +2. Ahora son las 17:27:19.

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