Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

helderso

Violation

Recommended Posts

olá, a mensagem Violation of primarykey or uniquekey constrant "pk_pastas" on table "pastas" está aparecendo quando incluo um registro...normalmente seria pela duplicação da chave mas isto não está ocorrendo..não seu mais o que fazer abaixo vai o codigo que uso para inserir um registro...utilizei delphi 6, dbexpress e firebird 1.5//verifica ultimo id pastasDMGeral.CDSpasta.Close;DMGeral.QPasta.Close;DMGeral.QPasta.SQL.Clear;DMGeral.QPasta.SQL.Add('select max(id_pasta)');DMGeral.QPasta.SQL.Add('from pastas');DMGeral.CDSpasta.open;ultidpasta:= (DMGeral.CDSpasta.Fields[0].AsInteger)+1;Label2.Caption := inttostr(ultidpasta);//gravar nova pastaMessagebox(formcadastro.handle,'Uma Nova Pasta foi Criada','Informação',mb_ok+32);DMGeral.CDSpasta.Close;DMGeral.QPasta.Close;DMGeral.QPasta.SQL.Clear;DMGeral.QPasta.SQL.Add('insert into pastas(id_pasta,pasta) values(:idpast, :past)');DMGeral.QPasta.ParamByName('idpast').AsInteger := (ultidpasta);DMGeral.QPasta.ParamByName('past').AsString := novapasta;DMGeral.QPasta.ExecSQL;

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 - Na primeira parte (do select) ele esta trazendo o valor certo?É realmente o maior valor do id_pastas + 1???2- você não está abrindo o CDSpasta

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloquei uma variavel para verificar o valor e está certo, quanto ao CDSPasta eu tinha esquecido de copiar a ultima linha...Messagebox(formcadastro.handle,'Uma Nova Pasta foi Criada','Informação',mb_ok+32);DMGeral.CDSpasta.Close;DMGeral.QPasta.Close;DMGeral.QPasta.SQL.Clear;DMGeral.QPasta.SQL.Add('insert into pastas(id_pasta,pasta) values(:idpast, :past)');DMGeral.QPasta.ParamByName('idpast').AsInteger := (ultidpasta);DMGeral.QPasta.ParamByName('past').AsString := novapasta;DMGeral.QPasta.ExecSQL;DMGeral.CDSpasta.open; será que o problema está na criação do Banco??? <_<

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse erro só costuma dar em dois casos, o código da chave primária está se repetindo, ou está setado para autoincremento, que aí ele dá erro.Sabe me dizer se está com constraints ativadas???Post a lista. Pode usar o comando abaixo.select constraint_name, table_name from user_constraints

Compartilhar este post


Link para o post
Compartilhar em outros sites

pela linha de comando me perdi, mas utilizo o IBExpert para trabalhar com o banco...mostra tabela pastas constraint primarykey PK_pasta onfield id_pastaindex name PK_pasta Index Sorting ascending

Compartilhar este post


Link para o post
Compartilhar em outros sites

aí que esta:Sorting Ascending -- isso é alto incremento.Ou você desabilita isso ou muda o teu insertDMGeral.QPasta.SQL.Add('insert into pastas(pasta) values( :past)');Aí você altera a outra linha aonde você passa o id_pasta como parâmetro, que não vai mais ser necessária

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troquei as linhas de comando mas dá o seguinte erro:validation error for column ID_pasta, value ***null****Messagebox(formcadastro.handle,'Uma Nova Pasta foi Criada','Informação',mb_ok+32);DMGeral.CDSpasta.Close;DMGeral.QPasta.Close;DMGeral.QPasta.SQL.Clear; //DMGeral.QPasta.SQL.Add('insert into pastas(id_pasta,pasta) values(:idpast, :past)');DMGeral.QPasta.SQL.Add('insert into pastas(pasta) values(:past)'); //DMGeral.QPasta.ParamByName('idpast').AsInteger := (ultidpasta);DMGeral.QPasta.ParamByName('past').AsString := novapasta;DMGeral.QPasta.ExecSQL;DMGeral.CDSpasta.open;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz um testezinho aí na mão mesmo.Para ver se dá o mesmo erro.DMGeral.QPasta.SQL.Add('insert into pastas(id_pasta,pasta) values(9, :past)');ali onde eu coloquei o 9, colocaultidpasta:= (DMGeral.CDSpasta.Fields[0].AsInteger)+1;o número que aparece no ultidpasta

Compartilhar este post


Link para o post
Compartilhar em outros sites

posso te dar uma sugestão, cria uma tabela identica e tenta acessar, tipo assim, com esses dois campos (id_pasta,pasta) e nomeia a tabela como pasta2 ou pastateste e vê se da esse erro. Se der, é problema do banco.e usa para criar:CREATE TABLE PASTATESTE (ID_PASTA NUMBER(10, 0) NOT NULL,PASTA VARCHAR2(50) )CREATE UNIQUE INDEX PK_PASTA ON PASTATESTE (CODIGO)

Compartilhar este post


Link para o post
Compartilhar em outros sites

seguinte,criei a tabela pastas2, deu o mesmo erro....mas notei uma coisa que acontecia com a outra tabela pastas que tinha esquecido de comentar... o programa acusa o erro mais a pasta é criada mesmo assim...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.