none
insert com campo alto incremento RRS feed

  • Pergunta

  • tenho o seguinte código.

    FbConnection conexao = new FbConnection(strconn);
                FbCommand comando = new FbCommand();
                string instrucaoSQL = "INSERT INTO TBL_PRO  VALUES (@DESC_PRO,@QUANT_PRO, @VAL_COMPRA, @DATA_COMPRA, @VAL_VENDA, @FORNECEDOR )";

                comando.Connection = conexao;
                comando.CommandType = CommandType.Text;
                comando.CommandText = instrucaoSQL;
                comando.Parameters.Add("@DESC_PRO",txt_descriçao_pro.Text);
                comando.Parameters.Add("@QUANT_PRO",txt_qunt_pro.Text);
                comando.Parameters.Add("@VAL_COMPRA",txt_valor_Pro_compra.Text);
                comando.Parameters.Add(" @DATA_COMPRA",dateTime_Compra_pro.Text);
                comando.Parameters.Add("@VAL_VENDA",txt_val_pro_venda.Text);
                comando.Parameters.Add("@FORNECEDOR",txt_fornecedor.Text);

    banco tem um campo alto incremento chamado ID_CODIGO_PRO.

    este código esta me retornando o erro -804 count of read-write columns does not equal count of values!!

    domingo, 21 de junho de 2015 00:54

Respostas

  • Bom dia,

    Não sei se resolveu teu problema, mas teu campo autoincremento no firebird, tem que ter uma trigger para alimentar ele. Segue um modelo de como deve ser feito para o autoincremento funcionar corretamente.

    CREATE TABLE TBL_PRO (
        ID_CODIGO_PRO INTEGER NOT NULL);
    	
    CREATE GENERATOR GEN_NEW_TABLE_ID;
    
    CREATE TRIGGER TBL_PRO_BI FOR TBL_PRO
    ACTIVE BEFORE INSERT POSITION 0
    AS
    BEGIN
      IF (NEW.ID_CODIGO_PRO IS NULL) THEN
        NEW.ID_CODIGO_PRO = GEN_ID(GEN_NEW_TABLE_ID,1);
    END;
    Não adicionei o campo como Primary Key.

    • Editado Gilson Joanelo segunda-feira, 22 de junho de 2015 11:23 Esqueci da PK
    • Marcado como Resposta Cristopher C I_ quarta-feira, 24 de junho de 2015 17:51
    segunda-feira, 22 de junho de 2015 11:22

Todas as Respostas

  • Erro quer dizer que o numero de campos no teu insert nao e igual ao numero de campos na tua tabela de destino. ou voce tem campos a mais ou a menos.

    tu disseste que tens um campo auto-incremento, talvez a base de dados que estas a usar nao permite que este campo esteje vazio. 


    A flower cannot blossom without sunshine, and man cannot live without love.

    domingo, 21 de junho de 2015 14:23
    Moderador
  • Bom dia,

    Não sei se resolveu teu problema, mas teu campo autoincremento no firebird, tem que ter uma trigger para alimentar ele. Segue um modelo de como deve ser feito para o autoincremento funcionar corretamente.

    CREATE TABLE TBL_PRO (
        ID_CODIGO_PRO INTEGER NOT NULL);
    	
    CREATE GENERATOR GEN_NEW_TABLE_ID;
    
    CREATE TRIGGER TBL_PRO_BI FOR TBL_PRO
    ACTIVE BEFORE INSERT POSITION 0
    AS
    BEGIN
      IF (NEW.ID_CODIGO_PRO IS NULL) THEN
        NEW.ID_CODIGO_PRO = GEN_ID(GEN_NEW_TABLE_ID,1);
    END;
    Não adicionei o campo como Primary Key.

    • Editado Gilson Joanelo segunda-feira, 22 de junho de 2015 11:23 Esqueci da PK
    • Marcado como Resposta Cristopher C I_ quarta-feira, 24 de junho de 2015 17:51
    segunda-feira, 22 de junho de 2015 11:22