Mestre e Detalhe não pode usar incremento automático pq? (Resolvido)

Pessoal,

tenho um formulário de orçamento e outro grid de itens de orçamentos, linkados através do numero de orçamento. Porém quando coloco incremento automático da erro. Porque ocorre esse erro?

Grato,

Tiago Sanches

increment automatico em qual aplicação? quais as chaves dessa tabela? qual o erro pelo menos?

No detalhe o campo com incremento automático deve ser a chave primária e não o campo de ligacao com o mestre. Dê uma observada.

então estou colocando incremento automatico no numero de orçamento e linkando este campo do numero do orçamento com o grid de itens do orçamento, dai da erro de banco de dados ao executar a aplicação.

Se eu tirar o incremente automático funciona perfeitinho, porém tenho que inserir o numero do orçamento manualmente.

Grato,

Tiago Sanches

o numero do orcamento no detalhe nao pode ser autoincremento ne?

orcamento 1, item 1
orcamento 1, item 2 …

quem tem que ser auto incremento no detalhe eh o codigo do item e nao a chave q ele recebe do pai … por isso seria melhor detalhar a sua estrutura.

Orçamento Venda:

varchar(9) latin1_swedish_ci Não None
cnpjclifor varchar(16) latin1_swedish_ci Sim NULL
compradorcli varchar(100) latin1_swedish_ci Sim NULL
dataemissao date Sim NULL
dataentrega date Sim NULL
status varchar(1) latin1_swedish_ci Sim NULL
idformapagto varchar(5) latin1_swedish_ci Sim NULL
observacoes text latin1_swedish_ci Sim NULL
valor_frete decimal(10,4) Sim NULL
codvendedor varchar(5) latin1_swedish_ci Sim NULL
ValorPedido decimal(15,4) Sim NULL
comissao_vendedor decimal(10,4) Sim NULL
ValorPedidoOrc decimal(15,4) Sim NULL
cnpjcpftransportadora varchar(16) latin1_swedish_ci Sim NULL
usuariocriacao varchar(60) latin1_swedish_ci Sim NULL
usuarioalteracao

Itens orçamento venda:

numeroorcvarchar(9) latin1_swedish_ci Sim NULL
codprd varchar(20) latin1_swedish_ci Sim NULL
undmed varchar(70) latin1_swedish_ci Sim NULL
Qtd decimal(10,4) Sim NULL
comprimento double(12,4) Sim NULL
largura double(12,4) Sim NULL
desconto_vendedor int(1) Sim NULL
desconto_gerente int(2) Sim NULL
icms decimal(8,2) Sim NULL
ipi decimal(8,2) Sim NULL
aprovadopelocliente int(1) Sim NULL
qtdcompradapelocliente decimal(10,4) Sim NULL
nrseqitens bigint(20) Não None auto_increment primary key
peso_por_metro double(10,4) Sim NULL
Total double(15,4) Sim NULL
Total_Vendido double(15,4) Sim NULL

No formulario mestre/detalhe linquei os dois campos numero orc.

esta correto?

numeroorc como varchar?

e quais campos sao autoincremento?

Se nos itens orçados o produto nao puder se repetir, voce nem vai precisar de um campo autoincremento. Apens chave primaria composta do numeroorc+codprd

Mas nas tabelas … como Harold falou … n eram pra ser inteiro autoincremento?

Verdade, eu mexi em tanta coisa buscando fazer esse negócio funcionar que acabei é ferrando outras coisas, bom, refiz meu banco de dados:

ITENS ORÇAMENTO VENDAS:

CREATE TABLE IF NOT EXISTS intensorcvendabit (
numeroorc bigint(20) DEFAULT NULL,
codprd varchar(20) DEFAULT NULL,
undmed varchar(70) DEFAULT NULL,
Qtd decimal(10,4) DEFAULT NULL,
comprimento double(12,4) DEFAULT NULL,
largura double(12,4) DEFAULT NULL,
desconto_vendedor int(1) DEFAULT NULL,
desconto_gerente int(2) DEFAULT NULL,
nrseqitens bigint(20) NOT NULL AUTO_INCREMENT,
peso_por_metro double(10,4) DEFAULT NULL,
Total double(15,4) DEFAULT NULL,
Total_Vendido double(15,4) DEFAULT NULL,
PRIMARY KEY (nrseqitens)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

ORÇAMENTO VENDA:

CREATE TABLE IF NOT EXISTS orcamento_vendabit (
numeroorc bigint(20) DEFAULT NULL,
cnpjclifor varchar(16) DEFAULT NULL,
compradorcli varchar(100) DEFAULT NULL,
dataemissao date DEFAULT NULL,
dataentrega date DEFAULT NULL,
status varchar(1) DEFAULT NULL,
idformapagto varchar(5) DEFAULT NULL,
observacoes text,
valor_frete decimal(10,4) DEFAULT NULL,
codvendedor varchar(5) DEFAULT NULL,
ValorPedido decimal(15,4) DEFAULT NULL,
comissao_vendedor decimal(10,4) DEFAULT NULL,
ValorPedidoOrc decimal(15,4) DEFAULT NULL,
cnpjcpftransportadora varchar(16) DEFAULT NULL,
usuariocriacao varchar(60) DEFAULT NULL,
usuarioalteracao varchar(60) DEFAULT NULL,
PRIMARY KEY (numeroorc)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

agora vou linkar no formulario mestre detalhe, os campos numeroorc

esta correto?

correto. n esquece de re-sincronizar as aplicacoes para atualizar os tipos de dados.
checa no detalhe se o campo ta como auto incremento … e ai eh pra ficar tudo blz.

qualquer duvida, poe em modo debug e tira um print que ai a gente ja ve o problema.

esse ai é o erro fazendo o banco de dados daquela forma:

Erro ao incluir na base de dados:
Entrada ‘0’ duplicada para a chave ‘PRIMARY’
INSERT INTO orcamento_venda (cnpjclifor, compradorcli, dataemissao, dataentrega, status, idformapagto, observacoes, valor_frete, codvendedor, ValorPedido, comissao_vendedor, ValorPedidoOrc, cnpjcpftransportadora, usuariocriacao, usuarioalteracao) VALUES (‘60746831000139’, ‘sdfs’, ‘2010-10-29’, null, ‘3’, ‘’, ‘’, 0, ‘2’, 0, 0, 0, ‘04828291000161’, ‘’, ‘’)

voce nao informou que a chave primaria é auto incremento no banco …

puts, verdade eu alterei tudo o banco e esqueci de colocar auto incremento na chave primaria do orçamento, bingo… funcionou… muito obrigado !!! :wink:

:-p