Fórum Duvida qto a execução de um Trigger #210320
29/01/2004
0
Estava testando em um ClientDataSet, mas não funcionava, pelo que percebi ele (o trigger), só dispara se eu fizer a inclusão de linha usando o SQLDataSet.
O mais estranho é que eu comecei, de bobeira, a jogar automaticamente o valor zero no codigo, e as linhas seguintes começaram a receber o sequencial , no codigo de cliente,....
Qual seria a meneira mais apropriada de gerar etse sequencial no Interbase, esperando, é claro, que não ocorram erros como acontecem no autoincrement do Paradox. Eu até pensei em gerar uma tabelas de codigos, onde vou incrementando (+1) no momento em que eu salvar o novo ´registro´ da tabela....
Outra duvida, ...., o Interbase suporta bem a inclusçao de imagens em uma tabela de produtos ????
Abraço
Arc
Curtir tópico
+ 0Posts
29/01/2004
Maicongabriel
Nestes seus ´testes´ você fez uso de ´GENERATORS´ ?
Gostei + 0
29/01/2004
Arc
1)
Create Generator Vcod_cli
Query/Execute;
2)
Set Generator Vcod_cli to 0;
Query/Execute
3)
Set Term ^
Create Trigger
Increm_vcod_cli for Clientes before insert as
begin
New.Cod_cli=Gen.id(vcod_cli,1);
end ^
Qdo eu exceuto a linha
DataModule.CDSCliente.ApplyUpdate(-1) // CDSCliente - ClientDataSet;
O sistema exibe mensagem informando que o campo Cod_cli deve ser preenchido....
ps.: PQ Nunca ???????
Gostei + 0
29/01/2004
Arc
Gostei + 0
30/01/2004
Arc
Grato
Gostei + 0
30/01/2004
Maicongabriel
Este problema da chave primária é comum, pelo modo como o delphi trabalha com os registros, uma boa solução foi dada pelo Afarias em um de seus post´s, veja ::
function TFormx.GetNewID(const AGenerator: string): Integer; const SQLText = ´select gen_id(¬s, 1) from rdb$database´; begin with IBSQL1 do begin SQL.Text := Format(SQLText, [AGenerator]); Transaction.StartTransaction; try ExecQuery; Result := Fields[0].AsInteger; finally Transaction.Commit; end; end; end;
SeuDataSet.FieldByName(´CODIGO´).AsInteger := GetNewID(´nome_generator´);
Gostei + 0
30/01/2004
Martins
8)
Boa Sorte!
Gostei + 0
30/01/2004
Arc
Gostei + 0
30/01/2004
Arc
Gostei + 0
30/01/2004
Maicongabriel
Pergunto::
Após o ´Post´ você fez um refresh dos dados ?
Se sim :: Blz, tudo ok (mas trabalhar com ClientDataSet´s e dar Refresh´s adoidado é loucura!)
Se não :: Então quando tentar inserir un segundo registro, ou atualizar dados sobre este mesmo, o programa lhe retornará um erro de Violação da Chave Primária!
Ah! Isto é claro, se o campo no qual você esta usando Generator é a Chave primária! Não sendo, pode desconciderar tudo isto...
Gostei + 0
30/01/2004
Arc
clientdatasetclientes.active:=true;
clientdatasetclientes.insert;
//insero os dados
clientedataset.applyupdate(-1);
clientdataset.active:=false;
meu codigo é chave primaria
Gostei + 0
30/01/2004
Maicongabriel
Isso é o ´[b:e0bf33ce5c]refresh[/b:e0bf33ce5c]´, porem como havia dito, é loucura, se é para fazer assim, não preciza utilizar ClientDataSet. Pq toda a funcionalidade do ClientDataSet esta sendo ignorada desta forma, apenas isto...
Gostei + 0
30/01/2004
Arc
No exemplo que vi, o autor usava o SQLDataSet, mas usava edit spara inserir as informações , passando para a tabela depois usando parametros.
Eu quero usar o dbedit .....
Porque vc acha Loucura as minhas intruções ???
Gostei + 0
30/01/2004
Maicongabriel
Não acho as suas instruções ´Loucura´, apenas disse isso pelo fato de você estar utilizando o ´ClientDataSet´ para isso! Entende? Se é para fazer assim poderia ser direto no ´SQLDataSet´, sem a nescessidade do ´ClientDataSet´, apenas isso.
Utilize aquilo o que se adequar melhor à sua forma de programar!
Sem mais...
[]´s :D
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)