Campo IDENTY com tabelas Master / Detalhe
Ola,
Estou com roblema pra trabalhar Master/Detalhe com Campo AutoInc do SQL Server utilizando DataSetField, ja tentei
todo tipo de gambiarra tipo, definir propriedade required no false,
O Sistema funciona normalmente se defino o ID manualmente
utilizando DataSetField no relacionamento. com a funcao similar abaixo:
function NextID(Campo,Tabela:String):Integer;
begin
with qryNextID do
begin
Close;
CommandText:='SELECT MAX(' + Campo+')+1 FROM ' + Tabela;
Open;
if Fields[0].IsNull or Fields[0].AsInteger=0 then
Result:=1
else
Result:= Fields[0].AsInteger;
Close;
end;
end;
Fora do ambiente sem Master/Detalhe o AutoINC, funciona normal se nao defino o campo identy no sql.
Se incluo o Campo e nao defino valor, me retorna o Erro de Field Value Required.
Se defino valor seja -1 ou 0, retorna erro de campo identy_insert esta defino OFF
Ambiente:
Delphi XE2
Db. SQL Server 2005
Conexão: DBExpress
Tabela PAI
IDPAI Identy (1,1) PK
DES_PAI varchar(50)
Tabela FILHO
IDPAI - FK
IDFILHO Inteiro
DES_FILHO varchar(50)
Gostaria de alguma dica para trabalhar com Master/Detalhe com Campo AutoInc utilizando DataSetField.
IDPAI - FK
IDFILHO Inteiro
FILHO
qryPai -
Estou com roblema pra trabalhar Master/Detalhe com Campo AutoInc do SQL Server utilizando DataSetField, ja tentei
todo tipo de gambiarra tipo, definir propriedade required no false,
O Sistema funciona normalmente se defino o ID manualmente
utilizando DataSetField no relacionamento. com a funcao similar abaixo:
function NextID(Campo,Tabela:String):Integer;
begin
with qryNextID do
begin
Close;
CommandText:='SELECT MAX(' + Campo+')+1 FROM ' + Tabela;
Open;
if Fields[0].IsNull or Fields[0].AsInteger=0 then
Result:=1
else
Result:= Fields[0].AsInteger;
Close;
end;
end;
Fora do ambiente sem Master/Detalhe o AutoINC, funciona normal se nao defino o campo identy no sql.
Se incluo o Campo e nao defino valor, me retorna o Erro de Field Value Required.
Se defino valor seja -1 ou 0, retorna erro de campo identy_insert esta defino OFF
Ambiente:
Delphi XE2
Db. SQL Server 2005
Conexão: DBExpress
Tabela PAI
IDPAI Identy (1,1) PK
DES_PAI varchar(50)
Tabela FILHO
IDPAI - FK
IDFILHO Inteiro
DES_FILHO varchar(50)
Gostaria de alguma dica para trabalhar com Master/Detalhe com Campo AutoInc utilizando DataSetField.
IDPAI - FK
IDFILHO Inteiro
FILHO
qryPai -
Janio Santos
Curtidas 0
Respostas
Joao Silva
12/12/2012
Ja resolveu? se não tenho uma dica que resolve seu problema.
GOSTEI 0
Janio Santos
12/12/2012
Ja resolveu? se não tenho uma dica que resolve seu problema.
ainda não amigo, sua dica vai ser bem vinda, estou trabalhando com o controle ID manual, como ilustrado no inicio do topico.
GOSTEI 0
Joao Silva
12/12/2012
.
.
.
.
.
.
public
{ Public declarations }
SeqRegistro: integer;
end;
.
.
.
procedure TdtmNomedoDataModule.cdsNomedoDataSetNewRecord(DataSet: TDataSet);
begin
inherited;
Dec(SeqRegistro);
DataSet.FieldByName('id').AsInteger:=SeqRegistro;
end;
procedure TdtmNomedoDatamodule.prvNomedoproviderBeforeUpdateRecord(Sender: TObject; SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; var Applied: Boolean);
begin
inherited;
if UpdateKind = ukInsert then
begin
if SourceDS = qryNomedaQuery then
if DeltaDS.FieldByName('id').AsInteger < 0 then
DeltaDS.FieldByName('id').NewValue:=aqui vc coloca a função que busca o ultimo codigo da tabela
end;
end;
end;
end;
.
.
.
.
.
public
{ Public declarations }
SeqRegistro: integer;
end;
.
.
.
procedure TdtmNomedoDataModule.cdsNomedoDataSetNewRecord(DataSet: TDataSet);
begin
inherited;
Dec(SeqRegistro);
DataSet.FieldByName('id').AsInteger:=SeqRegistro;
end;
procedure TdtmNomedoDatamodule.prvNomedoproviderBeforeUpdateRecord(Sender: TObject; SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; var Applied: Boolean);
begin
inherited;
if UpdateKind = ukInsert then
begin
if SourceDS = qryNomedaQuery then
if DeltaDS.FieldByName('id').AsInteger < 0 then
DeltaDS.FieldByName('id').NewValue:=aqui vc coloca a função que busca o ultimo codigo da tabela
end;
end;
end;
end;
GOSTEI 0