Problemas com Firebird
|
|
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 |
|
|
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. |
|
|
Estou trabalhando com uma base jah criada. E ela não tem generators, não tem campos auto incremento. |
|
|
Eu trabalho com Firebird + Rails, e na maioria das vezes faço o banco primeiro, depois caio no rails… 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 ! |
|
|
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? |
|
|
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. |
|
|
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? |
|
|
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? |
|
|
/******************************************************************************/
/**** 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 ****/
/******************************************************************************/
|
|
|
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. |

