Inserir registro utilizando valor de um campo externo
19/02/2006
0
Tenho uma tabela onde controlo o AGRUPAMENTO DOS REGISTROS com a seguinte estrutura:
CREATE TABLE PRODUTOS_DESCR (
AGRUPAMENTO INTEGER NOT NULL,
DESCRICAO DESCR100 NOT NULL /* DESCR100 = VARCHAR(100) */
);
E uma outra tabela onde cadastro os PRODUTOS, com a seguinte estrutura:
CREATE TABLE PRODUTOS (
PRODUTO INTEGER NOT NULL,
AGRUPAMENTO INTEGER NOT NULL,
IDENTIFICACAO DESCR100 NOT NULL /* DESCR100 = VARCHAR(100) */,
DESCRICAO DESCR50 NOT NULL /* DESCR50 = VARCHAR(50) */,
UNIDADE DESCR50 NOT NULL /* DESCR50 = VARCHAR(50) */
);
Na primeira tabela tenho varios AGRUPAMENTOS cadastrados, em que o usuario não terá acesso para inserir/editar, excluir, etc.
Na segunda tabela, ao inserir o registro eu gostaria que o numero do PRODUTO fosse cadastrado da seguinte forma:
AGRUPAMENTOPRODUTO
1001000001
1001000002
1001000003
1011010001
1021010002
1031010003
...
1101100001
Pensei em utilizar o codigo da seguinte forma:
procedure TFrmCadProdutos.btInserirClick(Sender: TObject);
var Prod: String;
Increm: Integer;
begin
with DMod.dsProdutos do
begin
Close;
SelectSQL.Clear;
SelectSQL.Add(´Select * from PRODUTOS´);
SelectSQL.Add(´Where AGRUPAMENTO = ´+QuotedStr(edAgrupd.text);
Open;
end;
Prod := DMod.dsProdutosPRODUTO.Value;
Increm := Strtoint(Prod+1);
DMod.dsProdutos.Insert;
edProduto.text := inttostr(Increm);
end;
Mas se não houver nenhum PRODUTO cadastrado ao AGRUPAMENTO selecionado, o valor do PRODUTO ficará como 1, se tentar inserir mais de uma vez dará um erro de violção de chave primária, alguem teria uma luz pra me dar?
Valeu pela atenção.
Flávia
Flavinha
Posts
19/02/2006
Edilcimar
19/02/2006
Flavinha
Sabe como fazer?
19/02/2006
Edilcimar
19/02/2006
Edilcimar
crie uma sql para procurar o grupamento
select * from tabeladogrupamento where campogrupamento = : grupamento
if query1.fieldbyname(´CAMPOGRUPAMENTO´) <> ´´ then
continue a inclusão
else
begin
showmessage(´GRUPAMENTO INEXISTENTE´);
abort;
end;
no continue inclusão faça um select para pegar o último número do grupamento, acrescente 1 e coloque quantos zeros à esquerda quiser e depois contatene o grupamento com esta variável e faça a inclusão
19/02/2006
Flavinha
var Produto: String;
begin
sbProdutos.Panels[0].Text := ´Inserindo um novo registro´;
with DMod.dsProdutos do
begin
Close;
SelectSQL.Clear;
SelectSQL.Add(´Select * from PRODUTOS´);
SelectSQL.Add(´Where AGRUPAMENTO = ´+QuotedStr(edAgruPD.Text));
end;
if DMod.dsProdutos.RecordCount < 1 then
begin
DMod.dsProdutos.Insert;
Produto := edAgrupd.Text + ´0001´; //é aqui que esta dando erro
edProd.Text := Produto;
end else
if DMod.dsProdutos.RecordCount >=1 then
begin
DMod.dsProdutos.Last;
DMod.dsProdutos.Insert;
Produto := inttostr(DMod.dsProdutosPRODUTO.Value + 1);
edProd.Text := Produto;
end;
end;
19/02/2006
Flavinha
procedure TFrmCadProdutos.btInserirClick(Sender: TObject);
var Produto: String;
begin
sbProdutos.Panels[0].Text := ´Inserindo um novo registro´;
with DMod.dsProdutos do
begin
Close;
SelectSQL.Clear;
SelectSQL.Add(´Select * from PRODUTOS´);
SelectSQL.Add(´Where AGRUPAMENTO = ´+QuotedStr(edAgruPD.Text));
end;
if DMod.dsProdutos.RecordCount < 1 then
begin
DMod.dsProdutos.Insert;
Produto := edAgrupd.Text + ´0001´; //é aqui que esta dando erro
edProd.Text := Produto;
end else
if DMod.dsProdutos.RecordCount >=1 then
begin
DMod.dsProdutos.Last;
DMod.dsProdutos.Insert;
Produto := inttostr(DMod.dsProdutosPRODUTO.Value + 1);
edProd.Text := Produto;
end;
end;
19/02/2006
Edilcimar
só que eu não vi a definição de edAgrupd.Text antes deste local!
20/02/2006
Flavinha
Valeu pela atenção Edilcimar.
Clique aqui para fazer login e interagir na Comunidade :)