Verificando se um registro existe (EXISTS function)
Se você precisar saber se um registro existe, a maneira mais comum é a execução do comando abaixo. Se a variável :idexists for maior que zero, o registro existe. (Este é um exemplo de Stored Procedure):
SELECT count(*) FROM company WHERE companyid = :id INTO :idexists; |
Mas, o jeito certo de fazer isso é usar a função EXISTS(). Se você usar COUNT(*) o Firebird vai olhar todos os itens para validar a condição (i.e. companyid = :id).
Se você usar a função EXISTS() o Firebird vai parar de procurar assim que achar um registro que atenda a condição. Isso é muito mais rápido.
idexists = 0; SELECT 1 FROM rdb$database WHERE EXISTS(SELECT * FROM company WHERE companyid = :id) INTO :idexists; |
2 comentários:
Muito bom, isso vai dinamizar minhas consultas, Valeu.
Gotaria q me ajudasse nesta questao.
To numa guerra sem fim com Campos Blob's quanto tento grava esse campo, coisa que não acontecia no delphi-7, migrei para o Delphi-2007 ai o bixo pegou - sempre retorna messagem de erro ao gravar texto em campo blob. Mensagem: Project Pris2007.Exe raised execption class TDBXError with message 'Incorrect values within SQLDA structure'.
OBS.:Tabela Cliente Campo Observacao Tipo Blob Sub-Tipo Text
Uso DBExpress q acompanha D2007
+ FireBirde 2.1.0.....
To com o projeto parado neste aspecto preciso de ajuda o + breve Possivel
Codigo:
If Dm_cReceber.SQL_CadCliente.State = dsInsert Then
TextoSQL:='Insert Into CadCliente('+
' OBSERVACAO Values :OBSERVACAO )'
Else
TextoSQL:='Update CadCliente Set '+
' OBSERVACAO=:OBSERVACAO '+
' Where REGISTRO=:REGISTRO ';
With Dm_Conexao.SQLQuery_ALT do
Begin
Close;
SQL.Text:=TextoSQL;
ParamByName('REGISTRO').Asstring := AllTrim(Pad(Dm_cReceber.SQL_CadClienteREGISTRO.Value,6));
ParamByName('OBSERVACAO').AsBlob := Dm_cReceber.SQL_CadCliente.FieldByName('OBSERVACAO').AsString;
Prepared:=True;
ExecSQL;
End;
Everaldo Torres
etsnewsoft@hotmail.com
Feira de Santana -Ba
CORREÇÂO:
Gotaria q me ajudassem nesta questao.
To numa guerra sem fim com Campos Blob's quanto tento grava esse campo, coisa que não acontecia no delphi-7, migrei para o Delphi-2007 ai o bixo pegou - sempre retorna messagem de erro ao gravar texto em campo blob. Mensagem: Project Pris2007.Exe raised execption class TDBXError with message 'Incorrect values within SQLDA structure'.
OBS.:Tabela Cliente Campo Observacao Tipo Blob Sub-Tipo Text
Uso DBExpress q acompanha D2007
+ FireBirde 2.1.0.....
To com o projeto parado neste aspecto preciso de ajuda o + breve Possivel
Codigo:
If Dm_cReceber.SQL_CadCliente.State = dsInsert Then
TextoSQL:='Insert Into CadCliente('+
' OBSERVACAO Values :OBSERVACAO )'
Else
TextoSQL:='Update CadCliente Set '+
' OBSERVACAO=:OBSERVACAO '+
' Where REGISTRO=:REGISTRO ';
With Dm_Conexao.SQLQuery_ALT do
Begin
Close;
SQL.Text:=TextoSQL;
ParamByName('REGISTRO').Asstring :=AllTrim(Pad(Dm_cReceber.SQL_CadClienteREGISTRO.Value,6));
ParamByName('OBSERVACAO').AsBlob:=
Dm_cReceber.SQL_CadCliente.FieldByName('OBSERVACAO').AsString;
Prepared:=True;
ExecSQL;
End;
Everaldo Torres
etsnewsoft@hotmail.com
Feira de Santana -Ba
Postar um comentário