O que vc pode fazer é um Trigger para checar isto eu utilizo assim:
SET SQL DIALECT 3;

SET NAMES WIN1252;


SET TERM ^ ;


CREATE TRIGGER CLIENTES_CPF FOR CLIENTES
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
as
begin
   if (new.clicpf is not null) then
    if (new.clicpf <> old.clicpf) then
     if (exists
        (select CLICPF from CLIENTES
         where CLICPF = new.CLICPF)) then
          exception CPF_EXISTE;
end

Ou seja o banco vai gerar uma  exception e ai é só tratar no sistema.

Fausto

dprogrammer escreveu:
> HI,
> 
> o que faço não envolver Generator
> 
> são campos que o usuário informa o valor mesmo.
> 
> tipow cpf, etc.
> 
> depois que mandei o primeiro email, fiz isso
> é meio gambiarra, mas até que funcionou, hehehe
> 
> function TdmAppBase.MyFindKey(Tabela : String; Campos : Array of String; 
> Valores : Array of String) : Boolean;
> Var SQL : AnsiString;
>      I : byte;
> begin
>    Result := False;
> 
>    if High(Campos) <> High(Valores) then begin
>      ShowMessage('Qt. de Campos não corresponde a Qt. de Valores');
>      Exit;
>    end;
> 
>    if Low(Campos) = 0 then begin
> 
>      SQL := 'SELECT ' + Campos[0] + ' FROM ' + Tabela + #13;
> 
>      if dmAppBase.dtsMyFindKey.Active then
>        dmAppBase.dtsMyFindKey.Close;
> 
>      with dmAppBase.cdsMyFindKey do begin
>        if Active then
>          Close;
> 
>        // Monta a clausula Where de acordos com os campos e valores passados
>        SQL := SQL + 'WHERE ' + Campos[0] + ' = ' + Valores[0] + #13;
> 
>        for I := Low(Campos)+1 to High(Campos) do
>          SQL := SQL + 'AND ' + Campos[I] + ' = ' + Valores[I] + #13;
> 
>        dmAppBase.dtsMyFindKey.CommandText := SQL;
> 
>        //ShowMessage(SQL);
> 
>        Open;
> 
>      Result := Not(Bof and Eof);
>      end;
>    end
> end;
> 
> 
> Usando
> 
> if dmAppBase.MyFindKey('TITULOS_TIT', ['Cod_Titulo_tit', 
> 'Valor_Vencimento'], [QuotedStr('1'), '11.76']) then
>      ShowMessage('Resgistro Encontrado');
> 
> as rotinas de insert e update eu já tinha feito, passando os campos e os 
> valores e as condições, etc.
> 
> value pela dica
> 
> vou pensar nesse lance da trigger.
> 
> Intel +
> 
> Visitem meu forum,  tem download lá, conteúdo
> http://dprogrammer.cetasistemas.com.br/forum
> Programação, Banco de dados, Etc.
> 
> Paulo Alexsandro - Maceió/Alagoas
> Programador - Delphi/NS Basic
> 
> At 19:18 26/7/2005, you wrote:
> 
>>Olha o que vc quer fazer fica meio difícil, ainda mais se for utilizar
>>como PK(Chave primária) o generator, pois desta forma vc só vai ficar
>>sabendo se houve a violação a chave depois que gravar no banco.
>>O que eu costumo fazer é definir Triggers onde nestas eu checo a
>>duplicidade em outros campos, por exemplo 2 clientes com o mesmo cgc.
>>
>>Fausto
>>
>>dprogrammer escreveu:
>>
>>>HI,
>>>
>>>tudo bom camaradas
>>>
>>>tou na fase de migrar meus sistemas para esse novo esquema usando
>>>ClientDataSet com DBExpress
>>>
>>>quando usava TTable sempre usei FindKey
>>>
>>>mas já vi que vou ter que mudar essa filosofia, e usar uma função generica
>>>para localizar, que eu passe a SQL e a Condição para essa função
>>>
>>>mas eu gostaria já de fazer um lance legalzinho, e gostaria de algumas
>>>dicas sobre o assunto, de como realmente proceder quando eu quiser testar
>>>se um registro existe.
>>>
>>>ou para incluir e deleter eu não deva usar o CDS e sim o SQLDataSet
>>>somente, sem provider e cds ?
>>>
>>>ou o mais indicado mesmo é ao invés de usar dataset.delete, localizando
>>>antes esse registro, ou já ir deletando usando o comando SQL,  delete 
>>
>>from ?
>>
>>>desde já agardeço
>>>
>>>
>>>ps: é que nem rolou por aí, antes eu tinha pressão de chefe e num dava 
>>
>>para
>>
>>>refinar muito, mas hj tou em casa, e agora tou estudando mais, hehehe
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
> 
> 
> 


-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a