none
DataBinding erro Dynamic SQl operation is not supported against multiple base tables RRS feed

  • Pergunta

  • Caros amigos,

     

    Tenho uma dúvida sobre ADO.NET sou iniciante em C#, gostaria vossa ajuda
     
     
    Tenho uma aplicação Winform com um datagrid de contas a receber que pode sofrer várias alterações conforme o cliente

     

    desejar e por fim ele clica no botão salvar e todas as alterações são gravadas no bd.
     
    Quando estava usando o Databinding conseguia atualizar normalmente o banco quando era somente uma tabela,
     
    ou seja usava somente um da.Update como abaixo,
     
    mas agora estou usando o inner join e o data adapter não sabe qual tabela deve atualizar,

    ocorre o erro: "Dynamic SQl operation is not supported against multiple base tables"
     
    se eu fizer um da.UpdateCommand, como faria para atualizar múltiplas linhas ?
     

    private void btnSalvar_Click(object sender, EventArgs e)
    {


     this.BindingContext[ds.Tables["CONTASRECEBER"]].EndCurrentEdit();

    if (MessageBox.Show("Deseja salvar as alterações?", "CONTASRECEBER", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)

    {
    ContasReceberSQL cr = new ContasReceberSQL();


     try

     {

     cr.SaveTableContasReceber(ds.Tables["CONTASRECEBER"]);
    os dados para poder exibir os códigos dos times criados


     CarregarDG();

     }

     catch (Exception ex)

    {

     CarregarDG();

     em caso de erro, exibo na tela

     MessageBox.Show(ex.ToString());

     }

    }
    //codigo da.update
    public

    ContasReceberSQL()
    {

    da =

    new FbDataAdapter("select T1.ID AS NUMERO_DOC,T3.DESCRICAO AS STATUS,T1.PARCELA,T1.FK_IDVENDEDOR AS CODVEND, "+

    "T1.VALORPARCELA,T1.VALORTOTAL,T2.DESCRICAO AS FORMA_PGTO,T1.DATAVCTO AS DATA_VCTO,T1.DATAPGTO AS DATA_PGTO,T1.OBS "+

    "from contasreceber AS T1 inner JOIN formaspgto AS T2 inner JOIN SITUACAO AS T3 on T1.FK_FORMAPGTO=T2.ID "+

    "on T1.FK_STATUS=T3.ID ", conex.Conectar());
    cb =

    new FbCommandBuilder(da);
    }


    public DataTable GetTableContasReceber()
    {


    DataTable dt = new DataTable( "CONTASRECEBER");
    da.Fill(dt);

     

    return dt;
    }


    public void SaveTableContasReceber(DataTable dt)
    {


    da.Update(dt);
    }

    GRATO,

    terça-feira, 9 de outubro de 2007 13:04

Todas as Respostas

  • Bom ... o seu código ficou meio grande, mas numa rápida passada, me parece haver um erro em

    select T1.ID AS NUMERO_DOC,T3.DESCRICAO AS STATUS,T1.PARCELA,T1.FK_IDVENDEDOR AS CODVEND, "+

    "T1.VALORPARCELA,T1.VALORTOTAL,T2.DESCRICAO AS FORMA_PGTO,T1.DATAVCTO AS DATA_VCTO,T1.DATAPGTO AS DATA_PGTO,T1.OBS "+

    "from contasreceber AS T1 inner JOIN formaspgto AS T2 inner JOIN SITUACAO AS T3 on T1.FK_FORMAPGTO=T2.ID "+

    "on T1.FK_STATUS=T3.ID

    Onde deve ser algo como

    select

    T1.ID AS NUMERO_DOC, T3.DESCRICAO AS STATUS,T1.PARCELA,T1.FK_IDVENDEDOR AS CODVEND, "+

    "T1.VALORPARCELA,T1.VALORTOTAL,T2.DESCRICAO AS FORMA_PGTO,T1.DATAVCTO AS DATA_VCTO,T1.DATAPGTO AS DATA_PGTO,T1.OBS "+

    "from contasreceber AS T1 inner JOIN formaspgto AS T2 on T1.FK_FORMAPGTO=T2.ID inner JOIN SITUACAO AS T3 on  "+

    "T1.FK_STATUS=T3.ID

    terça-feira, 9 de outubro de 2007 17:30
  • Caro Lúcio a query está funcionando corretamente no select , você só mudou a ordem da mesma, o problema está no Update quando faço o update para uma única tabela funciona corretamente, porém como tenho inner join ocorre o erro. sei que tenho que fazer um update diferenciado mas como faria ?, se quisesse alterar vários registros no datagrid e depois salvar ??

     

     

    grato,

     

    Flávio

    terça-feira, 9 de outubro de 2007 21:17