ERRO CRIACAO EXPRESSA - BANCO POSTGRESQL - RESOLVIDO.

(pauloper) #1

Ola,

Estou desenvolvendo um novo aplicativo e ao usar a Criacao Expressa
gerando Grid e Form e mandei gerar ambos.

Ocorre que o SC nao compila o Form e da erro.
Fui verificar, ele nao seta em SQL a chave primaria.
Tenho que fazer isso manualmente o que onera o tempo de desenvolvimento.

Espero que a NM corrija rapidamente este Bug.

Att,
Paulo.

(Max Veras) #2

Bom Dia,

Paulo, testei agora no SC(última release .00039) com 2 bancos MySQL e Postgres.
A criação expressa funcionou normalmente.
Qual versão da ferramenta?

(pauloper) #3

Ola Max.

Só um lembrete qua nao mencionei.
Utilizo trigger no banco para gerar numeracao automatica.

Voce pode executar este Trigger no banco, é só substituir pelo
dados da tua tabela: PODE SUBSTITUI APENAS O CAMPO: idfuncao
PELO CAMPO ID DA TUA TABELA.
E DEPOIS FAVOR, FAZER O TESTE.

– Triggers da Tabela: funcao

CREATE OR REPLACE FUNCTION “public”.“fun_numeraidfuncao_funcao” () RETURNS trigger AS’
begin
If NEW.idfuncao is null Or NEW.idfuncao = 0 then
Select Into NEW.idfuncao idfuncao From funcao Order by idfuncao Desc Limit 1;
If NEW.idfuncao is null Then
NEW.idfuncao := 1;
Else
NEW.idfuncao := NEW.idfuncao + 1;
End If;
End If;

  return NEW;

end;
'LANGUAGE ‘plpgsql’ IMMUTABLE CALLED ON NULL INPUT SECURITY INVOKER;

CREATE TRIGGER “tri_numeraidfuncao_funcao” BEFORE INSERT
ON “public”.“funcao” FOR EACH ROW
EXECUTE PROCEDURE “public”.“fun_numeraidfuncao_funcao”();

(Max Veras) #4

Certo Paulo,

Vou da uma verificada.

(Max Veras) #5

Paulo inserir a trigger exatamente igual e criei até uma tabela com o mesmo nome do campo.
Gostaria que você me confime qual o tipo de dado do campo ‘idfuncao’
Na minha tabela coloquei ele como chave primária.

(pauloper) #6

Ola Max,

O tipo de dado é: Integer e é a chave primaria.

Se quiser, me mande o nome do campo codigo da tua tabela
que eu gero o trigger aqui e te mando para voce testar.

(Max Veras) #7

Oi Paulo,

Eu criei uma tabela com 2 campos,

Chave primária : idfuncao, tipo smallint
Outro campo varchar, nome

Depois alterei de smallint para integer.

(pauloper) #8

Ola Max,

Criei um exemplo completo, copie e cole no PgAdmin e execute o script.
Ele vai criar a tabela, o indice e o trigger; depois crie a conexao no SC e mande gerar
a Grid e Form.

–1
CREATE LANGUAGE plpgsql;

–2
CREATE TABLE teste (
codigo INT NULL ,
nome VARCHAR(40) NULL
);

–3
ALTER TABLE teste
ADD CONSTRAINT pkcodigo PRIMARY KEY (codigo)
;

–4
– Triggers da Tabela: teste

CREATE OR REPLACE FUNCTION “public”.“fun_numeracodigo_teste” () RETURNS trigger AS’
begin
If NEW.codigo is null Or NEW.codigo = 0 then
Select Into NEW.codigo codigo From teste Order by codigo Desc Limit 1;
If NEW.codigo is null Then
NEW.codigo := 1;
Else
NEW.codigo := NEW.codigo + 1;
End If;
End If;

  return NEW;

end;
'LANGUAGE ‘plpgsql’ IMMUTABLE CALLED ON NULL INPUT SECURITY INVOKER;

CREATE TRIGGER “tri_numeracodigo_teste” BEFORE INSERT
ON “public”.“teste” FOR EACH ROW
EXECUTE PROCEDURE “public”.“fun_numeracodigo_teste”();

(Max Veras) #9

Paulo achei o problema,

Acontece esse erro porque na conexão, na parte de ‘Advanced’ -> ‘Usar o schema antes do nome da tabela’ esta marcado como “Não”. Se colocar como “Sim”, ele funciona e marca a chave primária.

(pauloper) #10

Correto Max,

Realmente este era o prpblema e comigo só percebi agora,
porque neste novo projeto desmarquei esta opcao.

Mas mesmo assim gostaria de manter opcao de colocar schema
desligado, porque ele ao criar os aplicativos acrescenta o schema nos nomes.

Tem alguma ideia de como resolver isso ??

(Max Veras) #11

A única maneira seria depois renomeando a aplicação mesmo.

(pauloper) #12

OK. Resolvido.