Como faço inserção/browse?

Delphi

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.


Sl4sh

Sl4sh

Curtidas 0

Respostas

Edineidaniel

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


GOSTEI 0
Sl4sh

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

Sl4sh

12/03/2008

up


GOSTEI 0
Jpauloss

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

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..


GOSTEI 0
Sl4sh

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.


GOSTEI 0
POSTAR