Array
(
)

N.º Sequencial com ClientDataSet SQL SERVER

Marcos.rio
   - 29 jul 2005

Amigos,
Estou usando Delphi 7 com ClientDataSet + SQL SERVER 2000. Sendo que possuo 2 tabelas q tem campos chaves Auto Incremeto. Uma Tabela se Chama Contrato e a outra Cedente. A Cardinalidade é 1 pra muitos, ou seja, um contrato pode ter mais de 1 cedente.
No meu formulário de cadastro dos contratos, tenho uma grid que é onde cadastro os Cedentes. Só que como o Campo é Auto Inc, eu não consigo pegar o valor do código gerado para associar ao campo correto na tabela Cedente, pois o código do auto inc só é exibido após um applay update, só que náo posso gravar um contrato sem antes ter um cedente cadastrado. Alguém teria uma saída para esse problema ???

Abs

Jonasaf
   - 31 jul 2005

Brother,

Faça dessa maneira:

Variavel q guarda valor campo chave:

VCampochave : integer;

Grave a tabela de autoincremento dando append.

Tabela.append;

Tabela.fieldbyname(xx).asinteger : xxxxxx;
Tabela.fieldbyname(xx).asinteger : xxxxxx;
Tabela.fieldbyname(xx).asinteger : xxxxxx;
Tabela.fieldbyname(xx).asinteger : xxxxxx;
Tabela.fieldbyname(xx).asinteger : xxxxxx;

VCampoChave := Tabela.fieldbyname(CampChave).asinteger;

Tabela.post;
Tabela.applyupdate(-1);

// posiciona ultimo registro;

Tabela.last;

Proximatabela.append;

ProximaTabela.fieldbyname(xx).asinteger := VCampoChave;

Proximatabela.post;
Proximatabela.applyupdate(-1;

Bon Jovi
   - 31 jul 2005

Com campo do tipo AutoInc vc perde o controle. Vc pode atribuir tb usando SELECT COALESCE(MAX(CHAVE), 0) + 1 AS PROXIMO FROM TABELA no momento do ApplyUpdates. Se for chave primária composta por vários campos, deve-se criar um índice para o campo que estará usando no MAX.