Fórum REGISTRO DUPLO #503695
08/12/2014
0
A imagem abaixo mostra o que quero dizer.
[img]http://arquivo.devmedia.com.br/forum/imagem/391816-20141208-094841.png[/img]
Gostaria de saber se alguém pode me ajudar com isso. Se for necessário mais detalhes, comentem !
Abraços, e obrigado pela atenção !
Heitor Batista
Curtir tópico
+ 0Posts
08/12/2014
Hugo
Gostei + 0
08/12/2014
Heitor Batista
Botão "NOVO":
procedure TF_usuarios.btn_novoClick(Sender: TObject); begin LimpaTela; DBEdit1.SetFocus; dm.TB_usuarios.Append; btn_gravar.Enabled := True; btn_editar.Enabled := False; btn_novo.Enabled := False; end;
Botão "GRAVAR":
procedure TF_usuarios.btn_gravarClick(Sender: TObject);
begin
if (dm.TB_usuarios.State = dsInsert) then
begin
dm.fb_usuarios.Close;
dm.fb_usuarios.SQL.Clear;
dm.fb_usuarios.SQL.Add('INSERT INTO USUARIOS (' +
'USER_NOME, ' +
'USER_NOME_COMPLETO, ' +
'USER_SENHA) VALUES (' +
':NOME, ' +
':NOME_COMPLETO, ' +
':SENHA)');
dm.fb_usuarios.ParamByName('NOME').Value := DBEdit1.Text;
dm.fb_usuarios.ParamByName('NOME_COMPLETO').Value := DBEdit2.Text;
dm.fb_usuarios.ParamByName('SENHA').Value := DBEdit3.Text;
dm.fb_usuarios.ExecSQL;
end
else
begin
dm.fb_usuarios.Close;
dm.fb_usuarios.SQL.Clear;
dm.fb_usuarios.SQL.Add('UPDATE USUARIOS SET ' +
'USER_NOME = :NOME, ' +
'USER_NOME_COMPLETO = :NOME_COMPLETO, ' +
'USER_SENHA = :SENHA ' +
'WHERE USER_ID = :ID');
dm.fb_usuarios.ParamByName('NOME').Value := DBEdit1.Text;
dm.fb_usuarios.ParamByName('NOME_COMPLETO').Value := DBEdit2.Text;
dm.fb_usuarios.ParamByName('SENHA').Value := DBEdit3.Text;
dm.fb_usuarios.ParamByName('ID').Value := DBEdit4.Text;
dm.fb_usuarios.ExecSQL;
end;
btn_editar.Enabled := True;
btn_novo.Enabled := True;
btn_gravar.Enabled := False;
end;Gostei + 0
08/12/2014
Heitor Batista
--> "fb_usuarios", é a Query
--> "TB_usuarios", é a Table
Gostei + 0
08/12/2014
Hugo
No seu botão "Novo", vc está usando um "dm.TB_usuarios.Append", porém no seu botão "Gravar" vc está fazendo o "insert" ou "update" na query...
Assim quando vc clica no botão "Novo" pela segunda vez, a sua "Table" ainda está em modo de inserção e ao dar o segundo "append", sua table automaticamente irá dar um "post", gerando assim o registro em branco...
Não sei se consegui explicar direito...
Para resolver, vc pode fazer de duas formas...
No seu botão "Novo", onde vc está usando o "Append", vc pode criar uma variável do tipo "TDataSetState" e atribuir o valor "dsInsert" e no seu botão "Gravar" testar o valor da variável...
Porém uma solução melhor (absurdamente melhor, na minha opinião rsrsrs), seria usar diretamente a "Table" para as operações...
Seus dbEdits provavelmente estão ligados à um "datasource" que provavelmente está ligado à sua "table"... se este for o cenário vc simplesmente daria um "post" na "table", no seu botão "Gravar", assim...
dm.TB_usuarios.Post;
Acho que é mais ou menos por ai...
qualquer coisa manda ai...
Gostei + 0
08/12/2014
Heitor Batista
[img]http://arquivo.devmedia.com.br/forum/imagem/391816-20141208-134151.png[/img]
Mas você quis dizer que no botão "Gravar", e só colocar " dm.TB_usuarios.Post; " apenas?
Gostei + 0
08/12/2014
Heitor Batista
Gostei + 0
08/12/2014
Hugo
faz um favor se possível, poste o código da unit toda... talvez tenha alguma coisa no meio do caminho que está cancelando a inserção...
Gostei + 0
08/12/2014
Heitor Batista
uses U_dm, U_funcoes;
procedure TF_usuarios.LimpaTela;
var I : integer;
begin
for I := 0 to F_usuarios.ComponentCount - 1 do
begin
if F_usuarios.Components[I] is TDBEdit then
(F_usuarios.Components[I] as TDBEdit).Clear;
end;
end;
procedure TF_usuarios.btn_editarUsuarioClick(Sender: TObject);
begin
dm.TB_usuarios.Locate('USER_ID', dm.fb_usuariosUSER_ID.Value,[]);
page_usuarios.ActivePage := tab_cadastrar;
end;
procedure TF_usuarios.FormClose(Sender: TObject; var Action: TCloseAction);
begin
dm.TB_usuarios.Close;
end;
procedure TF_usuarios.FormCreate(Sender: TObject);
begin
dm.TB_usuarios.Open;
page_usuarios.ActivePage := tab_consultar;
btn_gravar.Enabled := False;
end;
procedure TF_usuarios.btn_apagarClick(Sender: TObject);
begin
if MessageDlg('Confirmar exlcusão?', mtConfirmation,
[mbYes, mbNo] ,0)= mrYes then
dm.TB_usuarios.Delete
else
Abort;
end;
procedure TF_usuarios.btn_editarClick(Sender: TObject);
begin
btn_gravar.Enabled := True;
DBEdit1.SetFocus;
btn_editar.Enabled := False;
btn_novo.Enabled := False;
end;
procedure TF_usuarios.btn_gravarClick(Sender: TObject);
begin
if (dm.TB_usuarios.State = dsInsert) then
dm.TB_usuarios.Post;
btn_editar.Enabled := True;
btn_novo.Enabled := True;
btn_gravar.Enabled := False;
end;
procedure TF_usuarios.btn_novoClick(Sender: TObject);
begin
LimpaTela;
DBEdit1.SetFocus;
dm.TB_usuarios.Append;
btn_gravar.Enabled := True;
btn_editar.Enabled := False;
btn_novo.Enabled := False;
end;
procedure TF_usuarios.txt_buscaKeyPress(Sender: TObject; var Key: Char);
begin
// Fazendo a busca
if Key = #13 then
begin
with dm.fb_usuarios do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM USUARIOS ');
// Verifica se busca por nome ou barra
case rg_buscar.ItemIndex of
0 : SQL.Add('where USER_NOME_COMPLETO like :nome order by USER_ID');
1 : SQL.Add('where USER_ID like :nome order by USER_ID');
end;
ParamByName('nome').Value := txt_busca.Text + '%';
Open;
if RecordCount = 0 then
ShowMessage('Usuário não encontrado!');
end;
end;
end;
end.Espero que não esteja muito confuso meu código :s
Gostei + 0
08/12/2014
Heitor Batista
Não explicar o porque, mas no botão "NOVO", eu joguei o "DBEdit1.SetFocus;" por último... ai parou de dar o erro. Agora está funcionando certo !
Gostei + 0
08/12/2014
Hugo
rsrs, aparentemente seu botão "Novo" está certo, porem no botão "Editar" vc teria que ter "dm.TB_usuarios.Edit;", da forma como está lá vc está dando um "post" na tabela sem que a mesma esteja em estado de inserção ou edição...
e dai no botão gravar essa comparação
if (dm.TB_usuarios.State = dsInsert) then
if (dm.TB_usuarios.State in [dsInsert, dsEdit]) then
acho que é isso... veja ai...
Gostei + 0
08/12/2014
Hugo
precisando estamos ai...
Gostei + 0
08/12/2014
Heitor Batista
Muito obrigado pela ajuda, mais uma vez ! :)
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)