Como faço inserção/browse?
Como faço pra quando digitar num campo chave um código se ainda não existir na tabela entrar em modo de inserção e se ja existir continuar no modo browser e carregar os valores daquele código.
Sl4sh
Curtidas 0
Respostas
Edineidaniel
12/03/2008
opsss....
Bom vamos aos passos...
1 - Ter um função boolean que consulte no banco de dados se o código já exista e retorne True ou False...
2 - Conforme o Resultado da função, vc pode definir o que o sistema deverá executar, carregar todos os registros ou iniciar um formulário em branco para inserir...
Quais os componentes que vc está utilizando?
Qual o banco de vc usa?
t+
Edinei
Bom vamos aos passos...
1 - Ter um função boolean que consulte no banco de dados se o código já exista e retorne True ou False...
2 - Conforme o Resultado da função, vc pode definir o que o sistema deverá executar, carregar todos os registros ou iniciar um formulário em branco para inserir...
Quais os componentes que vc está utilizando?
Qual o banco de vc usa?
t+
Edinei
GOSTEI 0
Sl4sh
12/03/2008
opsss....
Bom vamos aos passos...
1 - Ter um função boolean que consulte no banco de dados se o código já exista e retorne True ou False...
2 - Conforme o Resultado da função, vc pode definir o que o sistema deverá executar, carregar todos os registros ou iniciar um formulário em branco para inserir...
Quais os componentes que vc está utilizando?
Qual o banco de vc usa?
t+
Edinei
Estou usando o Firebird com os componentes IB, IBTable, IBDatabase etc...
GOSTEI 0
Sl4sh
12/03/2008
up
GOSTEI 0
Jpauloss
12/03/2008
Como faço pra quando digitar num campo chave um código se ainda não existir na tabela entrar em modo de inserção e se ja existir continuar no modo browser e carregar os valores daquele código.
Uso o DBExpress com FireBird 2.0
Uso o IsEmpty para verificar se o código já existe. Vai Aí um exemplo de como eu faço
procedure TF_MATERIAIS.codExit(Sender: TObject); begin dm.sdsMaterial.Close; dm.sdsMaterial.CommandText:=´select * from MATERIAL where cod_ordenado= :pcod_ordenado´; dm.sdsMaterial.ParamByName(´pcod_ordenado´).AsString:=cod.Text; dm.sdsMaterial.Open; if not dm.sdsMaterial.IsEmpty then begin descricao.Text:=dm.sdsMaterial.FieldByName(´descricao´).AsString; un.Text:=dm.sdsMaterial.FieldByName(´un´).AsString; unitario.Text:=dm.sdsMaterial.FieldByName(´preco_unitario´).AsString; ShowMessage(´Código já existente! Tente Outro!´); LimparClick(Sender); cod.SetFocus; end else qualquer coisa.........
Tente aí e me diga.
GOSTEI 0
Hall 9000
12/03/2008
Como já foi dito vc tem que criar uma consulta para verificar se o código(campo chave) já existe na sua tabela.
pode ser assim:
function CampoChaveExiste(pIBDtBase: TIBDatabase; pCod: string): Boolean;
var qry: TIBQuery; // declare na 1ª cláusula uses a unit IBQuery;
begin
try
Result:= True;
qry:= TIBQuery.Create(Nil);
qry.Database:= pIBDtBase;
with qry do
begin
qry.close;
qry.SQL.Clear;
qry.SQL.Add(´ SELECT ´);
qry.SQL.Add(´ CODIGO ´);
qry.SQL.Add(´ FROM CLIENTE ´);
qry.SQL.Add(´ WHERE CODIGO = ´+pCod);
qry.Open;
end;
finally
if qry.IsEmpty then
Result:= False;
qry.close;
qry.Free;
end;
end;
Aí vc coloca um Edit (não dbEdit) para o campo chave e no OnExit desse EDIT vc chama a função:
procedure TForm1.EditCodigoExit(Sender: TObject);
begin
if CampoChaveExiste(IBDatabase1, EditCodigo.Text) then
begin
// já existe o código digitado.
// faz uma consulta do codigo digitado no edit.
end
else
begin
// NÃO existe o código digitado.
// coloca a query em estado de Inserção
end;
end;
Espero que ajude..
pode ser assim:
function CampoChaveExiste(pIBDtBase: TIBDatabase; pCod: string): Boolean;
var qry: TIBQuery; // declare na 1ª cláusula uses a unit IBQuery;
begin
try
Result:= True;
qry:= TIBQuery.Create(Nil);
qry.Database:= pIBDtBase;
with qry do
begin
qry.close;
qry.SQL.Clear;
qry.SQL.Add(´ SELECT ´);
qry.SQL.Add(´ CODIGO ´);
qry.SQL.Add(´ FROM CLIENTE ´);
qry.SQL.Add(´ WHERE CODIGO = ´+pCod);
qry.Open;
end;
finally
if qry.IsEmpty then
Result:= False;
qry.close;
qry.Free;
end;
end;
Aí vc coloca um Edit (não dbEdit) para o campo chave e no OnExit desse EDIT vc chama a função:
procedure TForm1.EditCodigoExit(Sender: TObject);
begin
if CampoChaveExiste(IBDatabase1, EditCodigo.Text) then
begin
// já existe o código digitado.
// faz uma consulta do codigo digitado no edit.
end
else
begin
// NÃO existe o código digitado.
// coloca a query em estado de Inserção
end;
end;
Espero que ajude..
GOSTEI 0
Sl4sh
12/03/2008
Então eu tenho que fazer... digamos manualmente...
é que quando no campo chave eu coloco um valor inexistente automaticamente muda o status pra insert... mas ja quando eu coloco um código já existente ele muda pra edit... mas na verdade era pra continuar browser.
é que quando no campo chave eu coloco um valor inexistente automaticamente muda o status pra insert... mas ja quando eu coloco um código já existente ele muda pra edit... mas na verdade era pra continuar browser.
GOSTEI 0