Ver la Versión Completa : Problema con Consulta
Salnhack
01-11-2011, 21:02:30
quien me pude ayudar y decirme que hay mal en este codigo
var id_mes:Integer;
begin
with DataModule4.Query1 do
begin
close;
SQL.Clear;
SQL.Add('Select (id_mes) from mes where descmes='+ QuotedStr(suiDBLookupComboBox2.Text));
Open;
id_mes:=FieldByName('id_mes').AsInteger;
end;
With DataModule4.Query4 do
begin
Close;
SQL.Clear;
SQL.Add('Select cultivos.desccultv,plsiembra.plsiembra from cultivos,plsiembra where plsiembra.pid_mes=:mes');
ParamByName('mes').AsInteger:=id_mes;
Open;
end;
cunado lo compilo me dice que faltan parametros
microbiano
01-11-2011, 21:23:26
y que error te manda o que parametro te marca que no esta definido?
en que linea?
creo que el error esta en:
With DataModule4.Query4 do
begin
Close;
SQL.Clear;
SQL.Add('Select cultivos.desccultv,plsiembra.plsiembra from cultivos,plsiembra where plsiembra.pid_mes=:mes');
parameters.ParamByName('mes').AsInteger:=id_mes;
Open;
end;
Salnhack
01-11-2011, 21:40:31
microbiano:
Gracias, pero no es error en el codigo porque lo borre y lo volvi a escribir y ahora me funciona parece que es algun problema con el Delphi, tengo que reintalar. Muchas Gracias de Todas formas.
Salnhack
01-11-2011, 22:07:23
Hola soy yo otra ves con otro problem,
my problem es que cuando ejecuto un consulta de seleccion y la muestro en un DBGrid, me muestra repetido eje
tengo tres tablas relacionadas Mes(id_mes,descmes), Planventa(id_plventa,id_mes,id_concventa,plventa,), Conceptoventa(id_concventa,concventa).
cuando seleciono mes me debe mostrar en el DBGrid los concepto venta (concventa) con los Planes que le corresponde de la tabla Planventa, me lo muestra pero repetidos aunue en la base dato esta bien (no esta doble),
este es el codigo que utilizo
var
id_mes:Integer;
begin
with DataModule4.Query1 do
begin
close;
SQL.Clear;
SQL.Add('Select (id_mes) from mes where descmes=:mes');
ParamByName('mes').AsString:=suiDBLookupComboBox2.Text;
Open;
id_mes:=FieldByName('id_mes').AsInteger;
end;
with datamodule4.Query4 do
begin
Close;
SQL.Clear;
SQL.Add('Select Conceptoventa.concventa,Planventa.plventa from Conceptoventa,Planventa where Planventa.id_mes=:mes');
ParamByName('mes').AsInteger:=id_mes;
Open;
end;
suiDBGrid1.Refresh;
end;
Please Help,
ecfisa
01-11-2011, 22:43:58
Hola Salnhack.
Por favor si tu consulta se refiere a la misma situación no abras un nuevo hilo con ella. Tal como dice el punto 6 de la Guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php):
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.
Un saludo y gracias por tu colaboración. :)
ecfisa
01-11-2011, 22:55:46
Hola Salnhack.
No he echo la prueba, pero creo que se podría resumir a una sola consulta, más o menos así:
...
with DataModule4 do
begin
Query1.Close;
Query1.SQL.Clear;
Query1.Add('SELECT Conceptoventa.concventa, Planventa.plventa');
Query1.Add('FROM Conceptoventa, Plantaventa, mes');
Query1.Add('WHERE mes.descmes = :FOUND');
Query1.Add('AND Plantaventa.id = mes.descmes');
Query1.ParamByName('FOUND').AsString:= suiDBLookupComboBox2.Text;
Query1.Open;
end;
...
Un saludo.
Salnhack
02-11-2011, 14:05:30
Hola ecfisa
He revizado el codigo que me sugeriste pero el temas es que las tablas mes y Planventa estan relacionadas 1:M, por los campos id_mes(llave primaria tabla mes) y id_mes(tabla Planventa) los campos son de tipo numero, en el combobox yo visualizo la descripcion del mes (descmes:texto) y hago una consulta para almacenar en una variable el id del mes selecionado para luego utilizarla a la hora de hacer la consulta de seleccion y despues visualizarla en el dbgrid el plan del mes correpondiente, si hay otra forma de hacerlo que sea mejor y proporciona mas robustez a la aplicacion y agilidad por favor decirme me serviria de mucho, soy algo nuevo en el trabajo con las base de dato en delphi y no conosco todas las funcionalidades del trabajo con las mismas,
Ademas con el codigo me trabaja casi bien pero a la hora de visualizar los datos de la consulta en el dbgrid se me duplican ejemplo
tengo por concepto de venta los siguiente
Venta de Software
Mantenimiento de Software
Mantenimiento de PC
cuando el dbgrid me visualiza la consulta del mes de enero
me da
Concepto de Venta Plan
Venta de Software 10
Mantenimiento de Software 10
Mantenimiento de PC 10
y en la base dato
solo tengo
Venta de Software 10
y he probado y me repite por cada concepto de venta el plan, aunque no le corresponda;
Muchas Gracias,
ecfisa
02-11-2011, 14:36:59
Hola SalnHack.
Creo que está duplicando el resultado por una omisión mía. Por favor probá de este modo:
with DataModule4 do
begin
Query1.Close;
Query1.SQL.Clear;
Query1.Add('SELECT DISTINCT CONCEPTOVENTA.CONCVENTA, PLANVENTA.PLVENTA');
Query1.Add('FROM CONCEPTOVENTA, PLANVENTA, MES');
Query1.Add('WHERE MES.DESCMES = :FOUND');
Query1.Add('AND PANVENTA.ID = MES.DESCMES');
Query1.ParamByName('FOUND').AsString:= suiDBLookupComboBox2.Text;
Query1.Open;
end;
Un saludo y disculpas.
Salnhack
02-11-2011, 15:04:48
ecfisa:
volvi a verificar tu codigo pero me da un error en la consulta pues al igualar los campos en la condicion
Query1.Add('AND PLANVENTA.ID = MES.DESCMES');
Estos no son del mismo tipo
Planventa.Id_mes es de tipo numero
y
MES.DESCMES es de tipo texto
ecfisa
02-11-2011, 15:14:47
Hola.
mes y Planventa estan relacionadas 1:M, por los campos id_mes(llave primaria tabla mes) y id_mes(tabla Planventa) los campos son de tipo numero
Y mirá que me lo aclaraste bién en el ultimo mensaje... :o
with DataModule4 do
begin
Query1.Close;
Query1.SQL.Clear;
Query1.Add('SELECT DISTINCT CONCEPTOVENTA.CONCVENTA, PLANVENTA.PLVENTA');
Query1.Add('FROM CONCEPTOVENTA, PLANVENTA, MES');
Query1.Add('WHERE MES.DESCMES = :FOUND');
Query1.Add('AND PLANVENTA.ID = MES.ID_MES');
Query1.ParamByName('FOUND').AsString:= suiDBLookupComboBox2.Text;
Query1.Open;
end;
Un saludo. :)
oscarac
02-11-2011, 15:18:38
y de donde sacas conceptoventa?
mejor dicho como lo estas relacionando? con quien?
no sera por eso que te estan saliendo duplicados?
Salnhack
02-11-2011, 16:06:01
Hola oscarac
en cuanto a tu pregunta el concepto de venta esta en una tabla aparte relacionada con la tabla plan venta
a ver si me explico el problema con el dbgrip, en la base de dato en la tabla de planventa
esta lo siguiente
en el campo
id_concventa 79 // Corresponde al id del concepto de venta Venta de Software
id_mes 112 // Corresponde al id del mes Enero
plventa 150 // plan de venta
cuando lo visualizo en el dbgrid
me sale todos los conseptos de venta con el mismo plan cuando en realidad en la tabla plan solo existe uno el de venta de software
concepto de venta
Venta de Software 150
Mantenimiento 150
...
oscarac
02-11-2011, 16:10:51
Hola oscarac
en cuanto a tu pregunta el concepto de venta esta en una tabla aparte relacionada con la tabla plan venta
a ver si me explico el problema con el dbgrip, en la base de dato en la tabla de planventa
esta lo siguiente
en el campo
id_concventa 79 // Corresponde al id del concepto de venta Venta de Software
id_mes 112 // Corresponde al id del mes Enero
plventa 150 // plan de venta
cuando lo visualizo en el dbgrid
me sale todos los conseptos de venta con el mismo plan cuando en realidad en la tabla plan solo existe uno el de venta de software
concepto de venta
Venta de Software 150
Mantenimiento 150
...
no entendi :(
puedes colocar ejemplos de como estan los datos?
Salnhack
02-11-2011, 16:33:35
oscarac
tengo tres tablas
tabla_mes // Tiene tres campos con los siguientes datos
id_mes descmes id_years
112-----enero-------10
113-----Febrero----10
tabla_Conceptoventa
id_concventa concventa
79-----------Venta de Software
80-----------Mantenimiento
tabla_Planventa
id_plventa plventa id_mes id_concventa
40---------150.00-----112---------79
cuando cargo mi consulta en el query que esta vinculado al dbgrid
me mustro los siguiente
concepto de venta-------plan
Venta de Software------150.00
Mantenimiento ----------150.00
-Si tuviera definidos mas conceptos de venta me mostraria todos los concepto con el plan de Venta de software
Espero que me entiendan y me puedan ayudar que ya tengo la cabeza echando humo me voy a fundir jajaaj
Espero que esto les ayude a ayudarme
oscarac
02-11-2011, 17:13:59
ok
y el problema cual es?
segun veo en la tabla de meses tambien especificas el año...
no sera que tienes mas meses de otros años y por eso te salen repetidos?
Salnhack
02-11-2011, 17:53:49
a ver cuando muestro el resultado de la consulta
me pone lo siguiente
ejemplo
tengo en la tabla plan los siguientes planes
id_plventa plventa id_mes id_concventa
40---------150.00-----112---------79 // plan del mes de enero de venta der software plan 150
41---------160.00-----112---------80 // plan del mes de enero de Mantenimiento plan 160
en el dbgrid me deve mostrar
conceto de venta----------Plan
Venta de Software -------150
Mantenimiento -----------160
pero me muestra lo siguiente
conceto de venta----------Plan
Venta de Software -------150
Venta de Software -------160
Mantenimiento -----------150
Mantenimiento -----------160
me repite todos los coscepto por cada plan aunque no le corresponda
la cosulta es la siguiente que utilizo es la siguiente
var
id_mes:Integer; //variable que almacenara id del mes selecionado
begin
//seleciono el mes y se lo asigno a la variable
with DataModule4.Query1 do
begin
close;
SQL.Clear;
SQL.Add('Select (id_mes) from mes where descmes=:mes');
ParamByName('mes').AsString:=suiDBLookupComboBox2.Text;
Open;
id_mes:=FieldByName('id_mes').AsInteger;
end;
// cargo la cosulta en el query vinculado al dbgris pasando como condicion la variable que me representa el mes
with datamodule4.Query4 do
begin
Close;
SQL.Clear;
SQL.Add('Select Conceptoventa.concventa,Planventa.plventa from Conceptoventa,Planventa where Planventa.id_mes=:mes');
ParamByName('mes').AsInteger:=id_mes;
Open;
end;
end;
oscarac
02-11-2011, 18:02:09
no se si me estoy equivocando pero en la tabla de mes.... figura el año tambien?
puedo pensar que tu tabla de mes tiene datos duplicados por años y no lo estas considerando
Salnhack
02-11-2011, 18:16:03
ya he revizado lo del año pero no tiene nada que ver porque el plan esta relacionado por el id del mes que unico pienso mas vien que el problema esta relacionado con esta consulta
with datamodule4.Query4 do
begin
Close;
SQL.Clear;
SQL.Add('Select Conceptoventa.concventa,Planventa.plventa from Conceptoventa,Planventa where Planventa.id_mes=:mes');
ParamByName('mes').AsInteger:=id_mes;
Open;
end;
si hay otra manera de hacerla por favor ayudarme
oscarac
02-11-2011, 18:20:40
y el Id del mes no se repite por año?
me parece que debes mejorar la consulta
Select Conceptoventa.concventa, Planventa.plventa
from Conceptoventa
Left Join Planventa on .... aqui especificar el campo en comun
where Planventa.id_mes=:mes
Salnhack
02-11-2011, 18:37:19
en cuanto a tu pregunta no, el que se repite es el id del año por meses
estoy probando la consulta en cuanto la pruebe aviso
ElDioni
02-11-2011, 18:42:43
Yo creo que a lo que se refiere oscarac (http://www.clubdelphi.com/foros/member.php?u=12187) es que si has tenido ventas durante varios años el mes Enero, por ejemplo, aparecerá varias veces, Enero del 2008, 2009...
¿Solo tienes un año en la tabla que quieres consultar?.
Saludos.
oscarac
02-11-2011, 18:57:05
no dices con que base de datos estas trabajando...
de ser posible puedes migrarla a access y ponerla en el FTP para revisarla
ya me dio curiosidad
Salnhack
03-11-2011, 13:45:51
HOla a todos ya he resuelto mi problema despues de varias consultas a tutos sobre consultas SELECT en SQL, el problema radicaba en la consulta que cargaba en el dbgrid me faltaba agragar una condicion mas les muestro
with datamodule4.Query4 do
begin
Close;
SQL.Clear;
SQL.Add('Select Conceptoventa.concventa,Planventa.plventa from Conceptoventa,Planventa where Planventa.id_mes=:mes and Conceptoventa.id_concventa = Planventa. id_concventa');
ParamByName('mes').AsInteger:=id_mes;
Open;
end;
ecfisa
03-11-2011, 13:59:07
Hola Salnhack.
Primero que nada gracias por hacercarnos tu solución ;)
También te pido que uses las etiquetas para encerrar tu código, de ese modo le dá más legibilidad.
Uso:
http://www.imagengratis.org/images/utilizartags.png
Un saludo.
Nota: Casimiro, despues arreglamos lo del derecho de autor :)
oscarac
03-11-2011, 15:11:21
HOla a todos ya he resuelto mi problema despues de varias consultas a tutos sobre consultas SELECT en SQL, el problema radicaba en la consulta que cargaba en el dbgrid me faltaba agragar una condicion mas les muestro
with datamodule4.Query4 do
begin
Close;
SQL.Clear;
SQL.Add('Select Conceptoventa.concventa,Planventa.plventa from Conceptoventa,Planventa where Planventa.id_mes=:mes and Conceptoventa.id_concventa = Planventa. id_concventa');
ParamByName('mes').AsInteger:=id_mes;
Open;
end;
que bueno que lo hayas solucionado... ya me rompia la cabeza
Casimiro Notevi
03-11-2011, 18:53:51
Nota: Casimiro, despues arreglamos lo del derecho de autor :)
La imagen se la "robé" a Neftalí, así que tendrás que ajustar cuentas con él :D
oscarac
03-11-2011, 22:56:43
Hola Salnhack.
Primero que nada gracias por hacercarnos tu solución ;)
También te pido que uses las etiquetas para encerrar tu código, de ese modo le dá más legibilidad.
Uso:
http://www.imagengratis.org/images/utilizartags.png
Un saludo.
Nota: Casimiro, despues arreglamos lo del derecho de autor :)
jajaja.. tan acostumbrado estaba a ver la imagen que "asumi" que el post era de casimiro. jejejeje
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.