JavaFree.org | RubyOnBr.org

Problemas com Firebird

Acompanhar Problemas com Firebird 10 posts, 3 participantes

440002948_b8dc8436b4 Marcelo Júnior 799 posts

Quando eu tento salvar qualquer coisa em qualquer tabela, aparece o seguinte erro:

Error obtaining generator value.
invalid request BLR at offset 71
generator PRODUTO_SEQ is not defined
Invalid token
SQL Code = -104
Firebird Code = 335544343

Sempre aparece isso, mudando é claro, ali onde aparece PRODUTO_SEQ para por exemplo CLIENTE_SEQ, e tbm muda o valor do offset.

Mas pq q ocorre isso?

vlw

 
Avatar Fernando Allen 39 posts

Aparentemente o ActiveRecord não está conseguindo obter o valor de auto incremento para o id do objeto, o que é possível no firebird através dos generators.

Se você estiver criando as tabelas manualmente, você deve atentar para a convenção de nomes para os generators, conforme pode ser precebido pelas mensagens de erro.

No Rails 1.2 já existe suporte a migrations para o firebird, que ficaria por conta de criar os generators adequadamente. Se você deseja que sua aplicação funcione com mais de um fornecedor de banco de dados, utilizar migrations é importante.

 
440002948_b8dc8436b4 Marcelo Júnior 799 posts

Estou trabalhando com uma base jah criada. E ela não tem generators, não tem campos auto incremento.

 
Ver Tassio Virginio 28 posts

Eu trabalho com Firebird + Rails, e na maioria das vezes faço o banco primeiro, depois caio no rails…
já tive esse mesmo problema, isso acontece porque o rails procurar o gerador com o nome * PRODUTO_SEQ* no seu banco e não encontra…

Não sei o que pode se feito no seu caso, porque vc disse que não utiliza o autoincrement nas suas tabelas. No meu caso eu criei o gerador quando fiz os autoincrements.

E ficou funcionando tudo blz !

 
440002948_b8dc8436b4 Marcelo Júnior 799 posts

Acontece que o projeto que estou desenvolvendo jah esta em andamento, é um projeto feito em VB, mas estou fazendo um modulo on-line para pedidos, usando a mesma base. A base está 100% fora das convenções rails. Como eu faria para que o rails não buscasse esse auto incremento, ou então, como eu faço para criar apenas esse campo?

 
Avatar Fernando Allen 39 posts

Marcelo,

Encontrei este artigo que poderá te ajudar. Recomendo dar uma olhada na documentação do adaptador firebird para o Rails se precisar de mais informações para aplicar as dicas do artigo.

 
440002948_b8dc8436b4 Marcelo Júnior 799 posts

Eu procurei mas não achei uma forma de desativar esses campos auto-incremento. Eu gostaria que o rails não buscasse por esses campos, que funcionasse sem eles. Tem como fazer isso?

 
Avatar Fernando Allen 39 posts

… Eu gostaria que o rails não buscasse por esses campos, que funcionasse sem eles. Tem como fazer isso?

Marcelo, no artigo é possível ver formas de resolver o problema do campo auto-incremento, mas mesmo assim você vai precisar de uma chave primária para seu Model, seja ela composta ou não. Tem como postar uma DDL de uma destas tabelas para vermos como é a estrutura?

 
440002948_b8dc8436b4 Marcelo Júnior 799 posts
/******************************************************************************/
/****               Generated by IBExpert 12/2/2007 21:46:51               ****/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES NONE;



/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/

CREATE TABLE CLIENTES (
    CODCLIENTE      VARCHAR(10) NOT NULL,
    IDCLIENTE       NUMERIC(10,2) DEFAULT 0 NOT NULL,
    CLIENTEDSC      VARCHAR(50) NOT NULL,
    RAZAOSOCIAL     VARCHAR(50),
    CNPJ            VARCHAR(16),
    IE              VARCHAR(19),
    CODSEGMENTO     NUMERIC(10,2),
    TELEFONE        VARCHAR(20),
    CELULAR         VARCHAR(20),
    FAX             VARCHAR(20),
    FRETE           VARCHAR(3),
    LAUDOTECNICO    CHAR(1),
    TRANSPORTADORA  VARCHAR(50),
    EMAIL           VARCHAR(50) DEFAULT '',
    IPI             CHAR(1),
    ICMS            CHAR(1),
    COFINS          CHAR(1),
    PIS             CHAR(1),
    CODCONDPAGTO    SMALLINT,
    LSTUPDUSR       VARCHAR(15),
    LSTUPDDT        DATE,
    LSTUPDTM        TIME,
    CLIENTES_SEQ    INTEGER
);





/******************************************************************************/
/****                             Primary Keys                             ****/
/******************************************************************************/

ALTER TABLE CLIENTES ADD CONSTRAINT PK_CLIENTES PRIMARY KEY (CODCLIENTE, IDCLIENTE);


/******************************************************************************/
/****                              Privileges                              ****/
/******************************************************************************/
 
Avatar Fernando Allen 39 posts

Blz, Marcelo.

Para utilizar tabelas com chave primária composta, você precisará do plugin composite primary keys, cortesia do Dr. Nick.

Observe que com este plugin, você será responsável pela atribuição dos valores aos campos chave de sua tabela antes de gravar um novo registro.