ERRO CRIACAO EXPRESSA - BANCO POSTGRESQL - RESOLVIDO.

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.

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?

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”();

Certo Paulo,

Vou da uma verificada.

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.

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.

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.

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”();

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.

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 ??

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

OK. Resolvido.