GARANTIR DESCONTO

Fórum Erro no código abaixo. #348474

06/11/2007

0

Estou com um problema no código abaixo ... sempre que coloco um novo aluguel mesmo já tendo outro registro igual ele da a mensagem, mas salva igual e quando não tem outro registro igual ele faz a mesma coisa.
Se algue puder me ajudar.


procedure TFmAluguel.salvarClick(Sender: TObject);
begin
If (modcadastro.tbAluguel.FieldByName(´Data_Alu´).AsString = DBEdit4.text) and (modcadastro.TbAluguel.FieldByName(´Alu_rou_cod´).AsString = DBEdit3.text) then
begin
ShowMessage(´Esta peça já está locada ou agendada para locação nessa data por: ´ + modcadastro.TbClientes.FieldByName(´Cli_nom´).AsString)
end;
modcadastro.TbAluguel.post;
salvar.Enabled :=false;
end;


Mano_froids

Mano_froids

Responder

Posts

06/11/2007

Alexandrej

Estou com um problema no código abaixo ... sempre que coloco um novo aluguel mesmo já tendo outro registro igual ele da a mensagem, mas salva igual e quando não tem outro registro igual ele faz a mesma coisa. Se algue puder me ajudar. procedure TFmAluguel.salvarClick(Sender: TObject); begin If (modcadastro.tbAluguel.FieldByName(´Data_Alu´).AsString = DBEdit4.text) and (modcadastro.TbAluguel.FieldByName(´Alu_rou_cod´).AsString = DBEdit3.text) then begin ShowMessage(´Esta peça já está locada ou agendada para locação nessa data por: ´ + modcadastro.TbClientes.FieldByName(´Cli_nom´).AsString) end; modcadastro.TbAluguel.post; salvar.Enabled :=false; end;


Coloque um Exit após o ShowMessage.


Responder

Gostei + 0

06/11/2007

Mano_froids

Tentei colocar o EXIT, mas ainda não funcionou.
Se tiver mais algum dica mande.


Responder

Gostei + 0

08/11/2007

Microbios

Tenta modificar seu código como está destacado em negrito

procedure TFmAluguel.salvarClick(Sender: TObject);
begin
If (modcadastro.tbAluguel.FieldByName(´Data_Alu´).AsString = DBEdit4.text) and (modcadastro.TbAluguel.FieldByName(´Alu_rou_cod´).AsString = DBEdit3.text) then
begin
ShowMessage(´Esta peça já está locada ou agendada para locação nessa data por: ´ + modcadastro.TbClientes.FieldByName(´Cli_nom´).AsString)
[b:a87b130396]Exit;
end
else
begin
modcadastro.TbAluguel.post;
salvar.Enabled :=false;
end;
end;[/b:a87b130396]


Responder

Gostei + 0

08/11/2007

Microbios

Ops :oops: Acho que tem um ´END´ a mais no final do código, por favor desconsidere-o! :D


Responder

Gostei + 0

08/11/2007

Felipeucc

procedure TFmAluguel.salvarClick(Sender: TObject);
begin
If (modcadastro.tbAluguel.FieldByName(´Data_Alu´).AsString = DBEdit4.text) and (modcadastro.TbAluguel.FieldByName(´Alu_rou_cod´).AsString = DBEdit3.text) then
begin
ShowMessage(´Esta peça já está locada ou agendada para locação nessa data por: ´ + modcadastro.TbClientes.FieldByName(´Cli_nom´).AsString)
end[b:92d3cc3952] // Você só quer gravar(post) se não atender a condição do if
else
begin
modcadastro.TbAluguel.post;
salvar.Enabled :=false;
end;[/b:92d3cc3952]
end;


Responder

Gostei + 0

08/11/2007

Mano_froids

procedure TFmAluguel.salvarClick(Sender: TObject); begin If (modcadastro.tbAluguel.FieldByName(´Data_Alu´).AsString = DBEdit4.text) and (modcadastro.TbAluguel.FieldByName(´Alu_rou_cod´).AsString = DBEdit3.text) then begin ShowMessage(´Esta peça já está locada ou agendada para locação nessa data por: ´ + modcadastro.TbClientes.FieldByName(´Cli_nom´).AsString) end[b:c88799ebf2] // Você só quer gravar(post) se não atender a condição do if else begin modcadastro.TbAluguel.post; salvar.Enabled :=false; end;[/b:c88799ebf2] end;



MUITO OBRIGADO PELA AJUDA, o problema deve ser em outra coisa e não nesse código, pois cloloquei os dois códigos que me falaram e tentei fzer algumas modificações neles e da a mensagem, mas quando dou OK na mesma o registro e salvo no banco de dados igual.


Responder

Gostei + 0

08/11/2007

Microbios

Cara, deixa eu dar um palpite meio sem pensar muito!
Não é por que você tá comparando o DBEDIT (ligado ao campo da tabela) com o VALOR DA TABELA não? Sendo assim a sua entrada (a digitação antes de fazer a comparação...) seria igual ao valor do BANCO DE DADOS...

modcadastro.tbAluguel.FieldByName(´Data_Alu´).AsString = DBEdit4.text

Sei lá... Eu posso estar erradíssimo e se tiver desculpas mil!

Outra coisa, meu primeiro exemplo tinha um ´EXIT´ após a mensagem que foi retirado no exemplo do colega que postou em seguida. Não sei também mas acho que esse existe deveria existir de qualquer forma.

Mais uma vez, se eu estiver errado, desculpas!

Abraços


Responder

Gostei + 0

08/11/2007

Martins

Só metendo um pouco minha colher, eu usaria LOCATE e faria os tratamentos, usaria tb Abort.


Responder

Gostei + 0

08/11/2007

Mano_froids

Cara, deixa eu dar um palpite meio sem pensar muito! Não é por que você tá comparando o DBEDIT (ligado ao campo da tabela) com o VALOR DA TABELA não? Sendo assim a sua entrada (a digitação antes de fazer a comparação...) seria igual ao valor do BANCO DE DADOS... modcadastro.tbAluguel.FieldByName(´Data_Alu´).AsString = DBEdit4.text Sei lá... Eu posso estar erradíssimo e se tiver desculpas mil! Outra coisa, meu primeiro exemplo tinha um ´EXIT´ após a mensagem que foi retirado no exemplo do colega que postou em seguida. Não sei também mas acho que esse existe deveria existir de qualquer forma. Mais uma vez, se eu estiver errado, desculpas! Abraços


Não precisa pedir descilpas nem se estiver erradíssimo, mas a sua colocação tem muita lógica, pois quando aparece a mensagem do código está o nome do cliente que estou incluindo e não o que já está na tabela.


Estou tentando fazer uma rotina de aluguel, só que o produto pode ser alugado mais de uma vez só que em datas diferentes, então quero consultar o banco de dados dos produtos alugados e saber se ele já está alugado e se está em que data se for a mesma o aluguel não pode ser feito.
Se alguem puder me ajudar eu agradeço muito.


Responder

Gostei + 0

08/11/2007

Microbios

O colega Martins meteu bem a colher !!!! :P :P

 procedure TFmAluguel.salvarClick(Sender: TObject); 
begin 
If not(ModCadastro.Locate(´Data_alu´,dbEdit4.text,[])) and not(ModCadastro.Locate(´Alu_rou_cod´,dbeEdit3.text,[])) then
 begin
  //Se não Achou, Vai Incluir
  modcadastro.TbAluguel.post; 
  salvar.Enabled := false; 
 end
else 
 begin
    // Se Achou, vai te dar a mensagem!
   ShowMessage(´Esta peça já está locada ou agendada para locação nessa data por: ´ + modcadastro.TbClientes.FieldByName(´Cli_nom´).AsString) 
  Exit;
end; 



Pelo que eu entendi, só vai incluir se não achar, né? Assim, como está, usando o locate, a rotina vai te retornar se achou no banco de dados. Mas me ocorre uma lembrança do tempo que eu comecei a dar meus primeiros passos em Delphi... eu tentava localizar algo no banco de dados e usava controles data-aware (Dbedits e afins) o que, no meu humilde entendimento não dá certo. Já que o ponteiro do banco de dados se move, e se movendo, conseqüentemente dá um post no que foi inserido pelos data-awares. Assim, ou usa-se controles não data-awares ou utiliza-se uma query para essa pesquisa. Me corrija se eu estiver errado mais uma vez em não ´enteder´ a sua necessidade, ok? :D

P.S: Esse código dará certo, claro, se você não estiver usando a mesma tabela, ou seja, se estiver incluindo de uma e pesquisando na outra.


Responder

Gostei + 0

08/11/2007

Microbios

O colega Martins meteu bem a colher !!!! :P :P

 procedure TFmAluguel.salvarClick(Sender: TObject); 
begin 
If not(ModCadastro.TbAluguel.Locate(´Data_alu´,dbEdit4.text,[])) and not(ModCadastro.TbAluguel.Locate(´Alu_rou_cod´,dbeEdit3.text,[])) then
 begin
  //Se não Achou, Vai Incluir
  modcadastro.TbAluguel.post; 
  salvar.Enabled := false; 
 end
else 
 begin
    // Se Achou, vai te dar a mensagem!
   ShowMessage(´Esta peça já está locada ou agendada para locação nessa data por: ´ + modcadastro.TbClientes.FieldByName(´Cli_nom´).AsString) 
  Exit;
end; 



Pelo que eu entendi, só vai incluir se não achar, né? Assim, como está, usando o locate, a rotina vai te retornar se achou no banco de dados. Mas me ocorre uma lembrança do tempo que eu comecei a dar meus primeiros passos em Delphi... eu tentava localizar algo no banco de dados e usava controles data-aware (Dbedits e afins) o que, no meu humilde entendimento não dá certo. Já que o ponteiro do banco de dados se move, e se movendo, conseqüentemente dá um post no que foi inserido pelos data-awares. Assim, ou usa-se controles não data-awares ou utiliza-se uma query para essa pesquisa. Me corrija se eu estiver errado mais uma vez em não ´enteder´ a sua necessidade, ok? :D

P.S: Esse código dará certo, claro, se você não estiver usando a mesma tabela, ou seja, se estiver incluindo de uma e pesquisando na outra.


Responder

Gostei + 0

08/11/2007

Microbios

Cara... cometi um erro no código: esqueci de citar o nome da tabela onde o locate vai atuar. Desconsidere o primeiro e observe o segundo, tá?

GENTE! CADÊ O BOTÂO PRA EXCLUIR UM POST QUE SE COLOCA E VÊ QUE COMETEU ERROS? :oops: :P


Responder

Gostei + 0

09/11/2007

Mano_froids

O colega Martins meteu bem a colher !!!! :P :P
 procedure TFmAluguel.salvarClick(Sender: TObject); 
begin 
If not(ModCadastro.TbAluguel.Locate(´Data_alu´,dbEdit4.text,[])) and not(ModCadastro.TbAluguel.Locate(´Alu_rou_cod´,dbeEdit3.text,[])) then
 begin
  //Se não Achou, Vai Incluir
  modcadastro.TbAluguel.post; 
  salvar.Enabled := false; 
 end
else 
 begin
    // Se Achou, vai te dar a mensagem!
   ShowMessage(´Esta peça já está locada ou agendada para locação nessa data por: ´ + modcadastro.TbClientes.FieldByName(´Cli_nom´).AsString) 
  Exit;
end; 
Pelo que eu entendi, só vai incluir se não achar, né? Assim, como está, usando o locate, a rotina vai te retornar se achou no banco de dados. Mas me ocorre uma lembrança do tempo que eu comecei a dar meus primeiros passos em Delphi... eu tentava localizar algo no banco de dados e usava controles data-aware (Dbedits e afins) o que, no meu humilde entendimento não dá certo. Já que o ponteiro do banco de dados se move, e se movendo, conseqüentemente dá um post no que foi inserido pelos data-awares. Assim, ou usa-se controles não data-awares ou utiliza-se uma query para essa pesquisa. Me corrija se eu estiver errado mais uma vez em não ´enteder´ a sua necessidade, ok? :D P.S: Esse código dará certo, claro, se você não estiver usando a mesma tabela, ou seja, se estiver incluindo de uma e pesquisando na outra.


MUITO OBRIGADO PELA AJUDA.
Funcionou me parte ... quando tento incluir o registro com os mesmo dados de um já existente aparece a mensagem e o já existente aparece na tela... só que tem um problema o registro que estou tentando incluir aparece no bd mesmo sendo igual ao outro.
Estou colocando o código inteiro para ver se tem algum erro, pois o código que mandaram acho que está funcionando bem, meu código e pequeno e bem simples.

procedure TFmAluguel.Button1Click(Sender: TObject);
begin
modcadastro.TbAluguel.append;
salvar.Enabled :=true;
DBLookupComboBox1.setfocus; end;

procedure TFmAluguel.Button2Click(Sender: TObject);
begin
modcadastro.TbAluguel.delete;
end;

procedure TFmAluguel.Button3Click(Sender: TObject);
begin
modcadastro.TbAluguel.edit;
salvar.Enabled :=true;
DBLookupComboBox1.SetFocus
end;

procedure TFmAluguel.Button4Click(Sender: TObject);
begin
fmaluguel.close;
formabertura.show;
end;

procedure TFmAluguel.salvarClick(Sender: TObject);
begin
If not(ModCadastro.TbAluguel.Locate(´Data_alu´,dbEdit4.text,[])) and not(ModCadastro.TbAluguel.Locate(´Alu_rou_cod´,dbEdit3.text,[])) then
begin
//Se não Achou, Vai Incluir
modcadastro.TbAluguel.post;
salvar.Enabled := false;
end
else
begin
// Se Achou, vai te dar a mensagem!
ShowMessage(´Esta peça já está locada ou agendada para locação nessa data por: ´ + modcadastro.TbClientes.FieldByName(´Cli_nom´).AsString)
end;
end;
end.


Responder

Gostei + 0

09/11/2007

Martins

Nos últimos dias estou sem tempo de trabalhar com Delphi, mas vou postar uma idéia q poderá ser avaliada e melhorada pela turma, assim q eu chegar em casa monto uma solução e posto aqui no fórum.

A idéia é criar um objeto em Run-Time para assumir o mesmo nome e campos de sua tabela e fazer a verificação, assim seu DataSet ficaria lá sem ser alterado.

var
 Tabela: TTable
begin
   Tabela := TTable.Create(Self);
   Tabela.DataBaseName := {Caminho de sua tabela}
   Tabela.Name := ´Aluguel´;
   Tabela.Firts;
   ....
end;    


Bons códigos.


Responder

Gostei + 0

09/11/2007

Microbios

só que tem um problema o registro que estou tentando incluir aparece no bd mesmo sendo igual ao outro.



Não entendi! O Registro que você tá tentando incluir [b:b5aa6c9c9b]ESTÀ[/b:b5aa6c9c9b] sendo salvo no Banco de Dados independentemente de ter localizado um [b:b5aa6c9c9b]IGUAL[/b:b5aa6c9c9b]? Se for isso, é o que eu te falei... é por causa de usar os controles data-aware... movimentou,postou! Eu acho que é isso...

Mas aqui, por que não utiliza uma query auxiliar de pesquisa pra tentar fazer um teste? Caso queria conversar comigo: mbiosinformatica@hotmail.com (msn) e aí poderemos, em tempo real, resolver essa sua dúvida, ok?


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar