Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Buscar con 3 parametros (https://www.clubdelphi.com/foros/showthread.php?t=3541)

CI>140 11-09-2003 00:07:05

Buscar con 3 parametros
 
Mi duda es la siguiemnte y espero me puedan ayudar

cuento con una base que tiene 14 campos que son:
Clave, Partida,Concepto,Enero,Febrero,Marzo...,Diciembre

tuvo que ser asi por ciertos problemas de diseño ahora necesito realizar la busqueda con respecto a los parametros Clave, Partida y alguno de los meses.

ejemplo

Clave Partida Concepto Enero Febrero ... Diciembre
1234 0001 XXX $0 $10 $5
1234 0002 yyy $5 $15 $0
1234 0003 zzz $0 $3 $7
2345 0001 XXX $0 $10 $5
2345 0002 yyy $5 $15 $0
2345 0003 zzz $0 $3 $7

Tengo un combobox que me muestra las claves que las toma por medio de un Table y los filtro con un bucle para que no se repita 3 veces el 1234 y 3 veces el 2345, de ahi en el evento Exit de ese combobox hace que se cambie otro combobox y muestre las partidas contenidas en ese evento, ahora por medio de un TDATETIME jalo el mes y de ahi no se como hacerle para que se dirija al campo deseado.

ejemplo Combobox1 = 1234 automaticamente el Combobox2 obtiene 0001,0002 y 0003 selecciono el 0002 y de ahi con el TDATETIME = Febrero deberia devolverme el valor de ese campo que es $15 hacia una variable o label, se aceptan sugerencias, si con Table, Query o como, no se que utilizar y menos de que manera

Lepe 11-09-2003 02:53:48

... Por medio de un TDATETIME jaleo el mes

:D jaleo el que tienes montado :D :p

Creo entender que tienes el nº del mes no?

podrias crearte una tablita y almacenar los meses, de tal forma que si despues en una cadena sql pones algo parecido a esto:

meses[1]:= 'Enero';
meses[2]:= 'Febrero';
....

i:= (numero del mes en cuestion);
sql.text := 'Select '+ meses[i] + ' from mitabla where Clave = ' +quotedstr(combobox1.text)+ ' and Partida = '+ quotedstr(combobox2.text)+ ' ;'

desde luego no lo he probado, pero creo que cuadrando bien los espacios, podría funcionar.

Espero haberte ayudado, o por lo menos darte una pequeña idea de como hacerlo.

Saludos.

__cadetill 11-09-2003 10:21:46

Algun comentario mas

Cita:

Posteado originalmente por CI>140
Tengo un combobox que me muestra las claves que las toma por medio de un Table y los filtro con un bucle para que no se repita 3 veces el 1234 y 3 veces el 2345
esto lo puedes solucionar de la siguiente manera (sin tener que hacer bucles)

Código:

select disctint clave from tabla
Lo del campo del mes, tambien puedes saber su nombre si en lugar de tenerun TDatetimePicker o el componente que quieras con una fecha, tienes un combo con todos los meses del año y dejas que el usuario seleccione un mes
O si lo prefieres puedes hacer

mes := FormatDateTime('mmmm', Fecha);

Espero te sirva

CI>140 11-09-2003 22:07:15

Gracias por la ayuda pero alparecer no me he explicado bien
espero que me puedan entender ahora

tengo una base llamada presupuesto.db y esta hecha asi

Clave String 12
Partida String 4
Concepto String 30
Enero Money
Febrero Money
Marzo Money
...
...
Diciembre Money


ahora cuento con unos datos ya almacenados asi



Clave Partida Concepto Enero Febrero ... Diciembre
1234 0001 XXX $0 $10 $5
1234 0002 yyy $5 $15 $0
1234 0003 zzz $0 $3 $7
2345 0001 XXX $0 $10 $5
2345 0002 yyy $5 $15 $0
2345 0003 zzz $0 $3 $7


ahora por medio de un Table1 y DataSource1 hago que se llene un combobox1 con las claves, con ese ejemplo el combo solo tiene dos claves, la 1234 y la 2345 porque ocupo un buccle para que no cargue los repetidos, ahora de igual manera lo hace para las partidas qe estas aparecen en un combobox2 una vez que yo cambio el combobox1, cuando escojo ejemplo la clave 2345 el combobox2 se llena con 0001, 0002 y 0003, ahora necesito que cuando yo escoja 2345 (combobox1) y 0002 (del combobox2) mas por medio de TDATETIME pueda saber el mes actual y se busque en la base el campo y me arroje el contenido, espero poder darmre a entender y que me ayuden, msn [email protected]

__cadetill 12-09-2003 09:46:48

No, si te hemos entendido perfectamente, el que creo que no nos has entendido has sido tu :), quizas no nos hemos explicado bien :p

A ver, el tema de cargar el primer TComboBox (combobox1) no hace falta que hagas el bucle que tu dices, no es eficiente (quizas con pocos registros ira rapido, pero cuando la tabla crezca.....). Lo que puedes hacer es lo que te comentaba de la consulta SQL. Esa consulta SOLO devolvera (si esta bien hecha :p) las claves distintas de tu tabla.

Algo parecido podrias mirar de hacer con el segundo TComboBox (combobox2).

El tema de saber el mes en curso (o en tu caso el nombre del campo al que quieres acceder), si es sobre la fecha actual, sería como te puse en el ejemplo anterior, o sea, algo así

Código:

NombreCampo := FormatDateTime('mmmm', Date);
De todas maneras, te aconsejo que nombres de campos estilo "Enero", "Febrero",.... no los utilices, mejor utiliza una nomenclatura numerica "1", "2",..... ya que luego si te encuentras en tu caso (el querer acceder a un mes u otro dependiendo de una variable), es mejor el caso numerico para saber el mes sin problemas

Código:

NombreCampo := FormatDateTime('m', Date);
Y te evitas problemas de idioma, mayusculas o minusculas,....

Una vez sabes el nombre del campo, con una simple consulta SQL puedes obtener el valor deseado

Código:

sql := 'select ' + NombreCampo;
sql := sql + ' from presupuesto ';
sql := sql + ' where clave = ' + QuotedStr(Combobox1.Text);
sql := sql + '  and Partida = ' + QuotedStr(Combobox2.Text);

Bueno, si hay algo que no termines de entender, pos aqui estamos :)


La franja horaria es GMT +2. Ahora son las 22:41:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi