Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Diego Gonçalves

[Resolvido] DBLookupCombobox e RadioGroup

Recommended Posts

Fala galera, estou precisando de uma luz! Preciso fazer um sistema de cadastro onde o usuário seleciona o tipo de produto em radiogroup, daí carrega no dblookupcombobox a descrição do produto, e em um edit valor do produto, em outro edit o valor da kilometragem. Onde cada tabela do banco de dados o mesmo produto tem um valor diferente, ou seja varias queryes estão do meu datamodule, ou seja, cada item do radiogroup liga o dblookupcombobox a uma querye diferente. Terei que setar as propriedades do dblookupcombobox via codigo, porém nao tive sucesso.

 

IF RG1.ITENSINDEX = 0 THEN
				 DBLOKCBSEGURADORA.LISTSOURCE := DS1;
			 ........... DAÍ POR DIANTE.............

 

Se vocês souberem uma melhor forma de realizar essa operação estamos aí!

 

Obrigado !

 

------------------------------------------------------------------------------------------------------------

Tópico editado por violar a 09ª Regra de Postagem do Fórum.

Normas do Fórum

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, acho que o código abaixo resolve o seu problema.... só vai precisar adaptar as querys dinâmicas para o seu caso.

 

procedure TForm1.RadioGroup1Click(Sender: TObject);
var sSQL : String;
begin
  //Monta a consulta dinamicamente de acordo com o que vier do radiogroup - adaptar
  Case RadioGroup1.ItemIndex of
	0 : sSQL := 'SELECT DESCRICAO FROM PRODUTO WHERE COD_ID = ' + RadioGroup1.Items.Strings[RadioGroup1.itemindex];
	1 : sSQL := 'SELECT DESCRICAO FROM PRODUTO WHERE CampoX = ' + RadioGroup1.Items.Strings[RadioGroup1.itemindex];
	2 : sSQL := 'SELECT DESCRICAO FROM PRODUTO WHERE CampoY = ' + RadioGroup1.Items.Strings[RadioGroup1.itemindex];
  end;
  //Query associada ao dbLookupCombobox para alimentá-lo com a query criada acima
  with Query1 do
  begin
	 if Active then
		Close;
	 Sql.Clear;
	 Sql.Add(sSQL);
	 Open;
  end;
end;

procedure TForm1.DBLookupComboBox1Click(Sender: TObject);
var sSql : String;
begin
  //Se selecionou algum valor no click do dblookup, executar rotina para carga dos campos
  IF DBLookupComboBox1.Text <> EmptyStr THEN
  BEGIN
	sSql := 'SELECT VALOR_PRODUTO, KILOMETRAGEM FROM PRODUTO WHERE DESCRICAO = ' + QuotedStr(DBLookupComboBox1.Text);
	with Query2 do
	begin
	  if Active then
		close;
	  sql.Clear;
	  SQL.Add(sSql);
	  Open;
	  if not IsEmpty then
	  begin
		 edit1.Text := FieldByName('VALOR_PRODUTO').AsString;
		 edit2.Text := FieldByName('KILOMETRAGEM').AsString;
	  end
	  else
	  begin
		 edit1.Text := '0';
		 edit2.Text := '0';
	  end;
	end;
  end
  else
  begin
	 edit1.Text := '0';
	 edit2.Text := '0';
  end;
end;

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Chrnos, realizei da maneira que você me falou...

Mas quando eu clico em algum item do radio group aparece a mensagem " Erro de sintaxe (operador faltando) na expressão

de consulta 'SEGURADORA = ATÉ 50".

 

O que pode ser esse erro?

 

Segue o Código:

procedure TFCADASTRO.DBLOOKCIAClick(Sender: TObject);
var 
   sSql : String;

 begin
  //Se selecionou algum valor no click do dblookup, executar rotina para carga dos campos
  IF DBLOOKCIA.Text <> EmptyStr THEN
	BEGIN
		sSql:='SELECT * FROM VISTORIAS WHERE SEGURADORA = ' + QUOTEDSTR (DBLOOKCIA.TEXT);
		WITH DM.QUERY_50 DO
		BEGIN
		   IF ACTIVE THEN
			CLOSE;
			 SQL.Clear;
			  SQL.Add(sSql);
			   OPEN;
				IF NOT ISEMPTY THEN
				BEGIN
				EDTVALORVP.Text   :=  FIELDBYNAME('VALORVP').AsString;
				EDTVALORKM.TEXT  := FIELDBYNAME ('VALORKM').ASSTRING;
				
		 END;
		END;
	 END;
  END;

procedure TFCADASTRO.RG1Click(Sender: TObject);
  var
	 sSQL : String;

begin

 //Monta a Consulta dinamicamente de acordo com rg1
 Case rg1.ItemIndex of
  0 : sSQL := 'SELECT * FROM TB_50			WHERE SEGURADORA = ' + RG1.Items.Strings[RG1.itemindex];
  1 : sSQL := 'SELECT * FROM TB_51_100 WHERE SEGURADORA = ' + RG1.Items.Strings[RG1.itemindex];
  2 : sSQL := 'SELECT * FROM TB_101_150 WHERE SEGURADORA = ' + RG1.Items.Strings[RG1.itemindex];
  3 : sSQL := 'SELECT * FROM TB_151_200 WHERE SEGURADORA = ' + RG1.Items.Strings[RG1.itemindex];
  4 : sSQL := 'SELECT * FROM TB_500 WHERE SEGURADORA = ' + RG1.Items.Strings[RG1.itemindex];

 END;
	//Query associada ao dblookupcombobox para alimenta-lo com a query acima
	 with dm.Query_50 do
		 begin
		   if Active then
			Close;
			 SQL.Clear;
			  SQL.Add(sSQL);
			   Open;

		 END;
		 WITH DM.QUERY101_150 DO
		  BEGIN
			  IF ACTIVE THEN
				CLOSE;
				 SQL.Clear;
				  SQL.Add(sSQL);
				   OPEN;


		  END;
		  WITH DM.QUERY51_100 DO
		   BEGIN
			  IF ACTIVE THEN
				CLOSE;
				 SQL.Clear;
				  SQL.Add(sSQL);
				   OPEN;

		   END;
		   WITH DM.QUERY151_200 DO
			BEGIN
			  CLOSE;
			   SQL.Clear;
				SQL.Add(sSQL);
				 OPEN;
			END;
			WITH DM.QUERY_500 DO
			  BEGIN
				CLOSE;
				 SQL.Clear;
				  SQL.Add(sSQL);
				   OPEN;


			  END;
END;

 

 

Desde já MT OBRIGADO!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro, que valores estão no radiogroup?

Segundo: porque abre e fecha tantas querys na rotina do radiogroup?

Terceiro: a sql dinâmica como eu disse precisava de ajustes... se vai passar uma comparação usando campo do tipo string ou varchar, a variável tem que ir entre '' (aspas simples) para o Tquery.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

A maneira que eu encontrei(não significa que seja a correta, que é o que mais parece...) é a seguinte:

No form de cadastro existem os campos: Seguradora(dblookupcombobox), controle de kilometragem(Radiogroup), km percorrido(Edit), valorVP(Edit que recebe o valor de acordo com a seguradora selecionada no dblookupcombobox),ValorKM(idem valor vp). Cada Seguradora paga um valor diferente, e a mesma Seguradora paga um outro valor de acordo com a Kilometragem percorrida.

Exemplo:

Se o km percorrido for menor/igual a 50, o usuário seleciona no controle de kilometragem(RadioGroup) o "item até 50";

Se o km for maior que 50 e menor/igual a 100, o usuário seleciona no controle de kilometragem(RadioGroup) o "item de 50 até 100";

E através desses intervalos Cada Seguradora diferencia os valores.

E assim por diante...

 

Como eu disse "não significa que seja a correta...", mas vou tentando até encotrar a correta...

Aí por isso que eu pensei em criar esse tanto de tabela com os mesmos campos, apenas com os valores pagos e diferenciados por cada Seguradora.

 

O que você acha? Existe uma maneira melhor de se fazer, ou a que eu estou pensando está mais ou menos certa...??

E como eu tenho que fazer???

 

Desde Já te agradeço pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode postar aqui a forma como estruturou suas tabelas para que eu possa analisar e dar uma opinião melhor sobre o assunto? E que banco de dados usa? Talvez eu consiga montar um exemplo a noite mais simples para você.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode postar aqui a forma como estruturou suas tabelas para que eu possa analisar e dar uma opinião melhor sobre o assunto? E que banco de dados usa? Talvez eu consiga montar um exemplo a noite mais simples para você.

 

[]'s

Existem duas tabelas uma tabela de referência, onde puxo as informações de acordo com os intervalos, e a outra que recebe os respectivos dados do forumulário. Estou utilizando o access mesmo...

 

A tabela de referência ficou assim:

Codigo

Seguradora

ValorVP

ValorKM

 

----------------------------------------

A tabela que recebe os dados ficou assim:

Codigo

Laudo

Data

Seguradora

KM_Percorrido

Cidade

ValorVP

ValorKM

---------------------------------------

 

Como pode ver, ficou mt simples mesmo....

 

Por favor de uma olhada e vê o que você consegue fazer...

 

MT obrigado desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, mal ai amigo, tive que resolver algumas coisas após o serviço na sexta-feira e fiquei fora o fim de semana todo... ai só estou podendo ver seu post com atenção agora... bom, pra mim poder fazer um exemplo que funcione corretamente, preciso que você me mostre as tabelas que está usando com os nomes delas pra mim identificar o que é o que, de preferência com um exemplo do que estaria gravado nelas (registros, dados de exemplo, essas coisas) e como elas se relacionam, pra mim entender a lógica de negócio. E preciso também de uma explicação melhor e mais detalhada do processo que você está executando ai, talvez até com um printscreen da sua tela se possível pra visualizar o que você está tentando fazer...

 

Do jeito que está aqui postada a sua dúvida tá meio obscuro o que realmente você está tentando fazer para poder dar alguma sugestão.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, mal ai amigo, tive que resolver algumas coisas após o serviço na sexta-feira e fiquei fora o fim de semana todo... ai só estou podendo ver seu post com atenção agora... bom, pra mim poder fazer um exemplo que funcione corretamente, preciso que você me mostre as tabelas que está usando com os nomes delas pra mim identificar o que é o que, de preferência com um exemplo do que estaria gravado nelas (registros, dados de exemplo, essas coisas) e como elas se relacionam, pra mim entender a lógica de negócio. E preciso também de uma explicação melhor e mais detalhada do processo que você está executando ai, talvez até com um printscreen da sua tela se possível pra visualizar o que você está tentando fazer...

 

Do jeito que está aqui postada a sua dúvida tá meio obscuro o que realmente você está tentando fazer para poder dar alguma sugestão.

 

[]'s

Amigo, Graças a Deus consegui resolver... de uma forma que ;.... ta dando certo.

Antes eu estava fazendo uma tabela que recebia os dados do cadastro e uma para cada tipo de intervalo(KM50, km51_100...) e assim por diante.

Agora criei ao invéz de varias tabelas, fiz uma tabela (tb_referencia) com todas as informações (km50,km51_100,...) que ao clicar no dblookupcb os edits recebem os dados de valores através da condição IF exemplo:

 

no evento onclick sender do dblookupcb
if strtoint(edtkm.text) <=50 then
edtvalorvp.text = dm.Qry_Ref.fieldvalues['valorvp'];
;..........assim por diante..........

Dessa forma está dando certo!!!

 

Amigo, mt obrigado pela cooperação ...

Mas ae o sistema ainda não acabou, provavelmente terei de utilizar os recursos que esse forum nos oferecem!!!

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.