Fórum identity #365154

16/10/2008

0

uso sqlserver 2005 express com delphi 2007 e dbexpress gostaria de saber a melhor forma de se retornar o valor gerado do identity para a gravação do registro pq toda vez que vou cadastrar ele volta sem valor e da erro como faço pra pegar o valor do identity ???


Orc

Orc

Responder

Posts

20/10/2008

Andreaskaquino

Verifique se a propriedade readonly de algum dos campos da fieldlist do dataset ou do columnlist do dbgrid esta setada como True, neste caso o DbGrid tem o comportamento que você descreveu, ou seja, salta os campos que estão marcados como somente leitura.

Abraço.


Responder

Gostei + 0

20/10/2008

Andreaskaquino

Primeiro as minhas desculpas, acabei respondendo algo de outro posto na sua dúvida.

Agora vamos a sugestão. Trabalho com Delphi e SQL SERVER 2000, tive alguns problemas com campos Identity e os resolvi da seguinte forma:

1 - Criar uma função para ler o último valor do campo para a respectiva tabela:

function RetornarValorCampoID(Tabela: String): Integer;
begin
try
with dm1.sqldAux do
begin
Close;
Commandtext := ´SELECT IDENT_CURRENT(´ + QuotedStr(Tabela) + ´)´;
Open;

Result := Fields[0].AsInteger + 1;

Close;
end;
except on E: Exception do
begin
Result := 0;
MessageDlg(E.Message+#13+10+13+10+
´Não foi possível ler o último valor do campo auto-numerador da tabela ´+Tabela+13+10+
´Favor entrar em contato com o suporte técnico!´, mtError, [mbOK], 0);
end;
end;
end;

2 - No SqlDataSet/ClientDataSet que fará a atualização dos campos deixar todos os ProviderFlags do campo IDENTITY como False;

3 - Deixar o UpdateMode do DataSetProvider como upWhereAll;

4 - Atualizar o valor do campo IDENTITY no evento OnNewRecord:

Cds.FieldByName(´CP´).AsInteger := RetornarValorCampoID(´TAB´)

Seguindo estes procedimentos creio que você conseguirá resolver o seu problema.

Atenciosamente,


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar