helderso 0 Denunciar post Postado Outubro 19, 2005 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
NaPraia 12 Denunciar post Postado Outubro 19, 2005 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
helderso 0 Denunciar post Postado Outubro 20, 2005 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
NaPraia 12 Denunciar post Postado Outubro 20, 2005 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
helderso 0 Denunciar post Postado Outubro 20, 2005 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
NaPraia 12 Denunciar post Postado Outubro 20, 2005 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
helderso 0 Denunciar post Postado Outubro 20, 2005 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
NaPraia 12 Denunciar post Postado Outubro 20, 2005 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
helderso 0 Denunciar post Postado Outubro 20, 2005 agora deu o erro que tinha dado no inicioViolation of primarykey or uniquekey constrant "pk_pastas" on table "pastas" Compartilhar este post Link para o post Compartilhar em outros sites
NaPraia 12 Denunciar post Postado Outubro 20, 2005 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
helderso 0 Denunciar post Postado Outubro 20, 2005 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
helderso 0 Denunciar post Postado Outubro 21, 2005 não sei se seria o correto...Fiz um tratamento de erro e funcionou....valeu Compartilhar este post Link para o post Compartilhar em outros sites
NaPraia 12 Denunciar post Postado Outubro 21, 2005 com certeza, funcionando, vale tudo. Falou Compartilhar este post Link para o post Compartilhar em outros sites