Fórum Erro no código abaixo. #348474
06/11/2007
0
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
Curtir tópico
+ 0Posts
06/11/2007
Alexandrej
Coloque um Exit após o ShowMessage.
Gostei + 0
06/11/2007
Mano_froids
Se tiver mais algum dica mande.
Gostei + 0
08/11/2007
Microbios
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]
Gostei + 0
08/11/2007
Microbios
Gostei + 0
08/11/2007
Felipeucc
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;
Gostei + 0
08/11/2007
Mano_froids
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.
Gostei + 0
08/11/2007
Microbios
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
Gostei + 0
08/11/2007
Martins
Gostei + 0
08/11/2007
Mano_froids
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.
Gostei + 0
08/11/2007
Microbios
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.
Gostei + 0
08/11/2007
Microbios
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.
Gostei + 0
08/11/2007
Microbios
GENTE! CADÊ O BOTÂO PRA EXCLUIR UM POST QUE SE COLOCA E VÊ QUE COMETEU ERROS? :oops: :P
Gostei + 0
09/11/2007
Mano_froids
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;
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.
Gostei + 0
09/11/2007
Martins
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.
Gostei + 0
09/11/2007
Microbios
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?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)