none
Erro no dataAdapter.fill para dataset RRS feed

  • Pergunta

  • Boas, ao executar o meu programa estou a ter um erro:

    "Tipo de dados incorreto na expressão de critérios."

    O código:

    rptInvoice rpt = new rptInvoice();
                cmd = new OleDbCommand();
                OleDbDataAdapter myDA = new OleDbDataAdapter();
                DataSet myDS = new DataSet();
                con = new OleDbConnection(cs);
                cmd.Connection = con;
                int nfact = Convert.ToInt32(txt_ndoc.Text);
                nfact = Convert.ToInt32(nfact - 1);
                string nTypeDoc = cb_doctype.Text.ToString();
                cmd.CommandText = "SELECT Config.ProductName, Sales.InvoiceDate, Sales.SubTotal, Sales.GrandTotal, Sales.Remarks, ProductSold.Doc, ProductSold.DocNo, ProductSold.Quantity, ProductSold.Price, ProductSold.TotalAmount, ProductSold.ConfigID, Customer.CustomerName, Customer.Address, Customer.Landmark, Customer.City, Customer.State, Customer.Phone, Customer.MobileNo, Customer.FaxNo, Customer.Email FROM (((Customer INNER JOIN Sales ON Customer.CustomerID = Sales.CustomerID) INNER JOIN ProductSold ON Sales.DocNo = ProductSold.DocNo)INNER JOIN Config ON ProductSold.ConfigID = Config.ConfigID) where Sales.Doc = '" + nTypeDoc + "' AND Sales.DocNO = '" + nfact + "'";
                    cmd.CommandType = CommandType.Text;
                    myDA.SelectCommand = cmd;
                    myDA.Fill(myDS, "Config");
                    myDA.Fill(myDS, "Sales");
                    myDA.Fill(myDS, "ProductSold");
                    myDA.Fill(myDS, "Customer");
                    rpt.SetDataSource(myDS);
                    frmInvoiceReport frm = new frmInvoiceReport();
                    frm.crystalReportViewer1.ReportSource = rpt;

    O erro dá nas seguintes linhas:

                    myDA.Fill(myDS, "Config");
                    myDA.Fill(myDS, "Sales");
                    myDA.Fill(myDS, "ProductSold");
                    myDA.Fill(myDS, "Customer");

    Alguém me consegue explicar o porquê deste problema? Não sei onde estou a errar...

    Cumprimentos

    segunda-feira, 5 de junho de 2017 15:22

Respostas

  • O que seria aquela parte com aspas vazias no final? Se é um valor nulo, não deveria ter um espaço entre... Não entendi. Tente colocar um # entre os valores também, tipo assim:

    nfact + "";

    #cb_doctype.Text# + " AND Sales.DocNo= " + #nfact#
    • Marcado como Resposta D3POD terça-feira, 6 de junho de 2017 15:11
    terça-feira, 6 de junho de 2017 12:27

Todas as Respostas

  • Boa tarde, D3POD.

    Como estão os dados no teu BD??

    segunda-feira, 5 de junho de 2017 18:09
  • Na BD está tudo certinho... o estranho é que já funcionou anteriormente e agora não.

    segunda-feira, 5 de junho de 2017 18:12
  • Mas você não fez nenhum tipo de alteração?
    segunda-feira, 5 de junho de 2017 18:18
  • Não... a unica coisa que fiz foi coloquei o valor diretamente do textbox e do combobox na string...

    Se eu colocar assim já funciona:

    cmd.CommandText = "SELECT Config.ProductName, Sales.InvoiceDate, Sales.SubTotal, Sales.GrandTotal, Sales.Remarks, ProductSold.Doc, ProductSold.DocNo, ProductSold.Quantity, ProductSold.Price, ProductSold.TotalAmount, ProductSold.ConfigID, Customer.CustomerName, Customer.Address, Customer.Landmark, Customer.City, Customer.State, Customer.Phone, Customer.MobileNo, Customer.FaxNo, Customer.Email FROM (((Customer INNER JOIN Sales ON Customer.CustomerID = Sales.CustomerID) INNER JOIN ProductSold ON Sales.DocNo = ProductSold.DocNo)INNER JOIN Config ON ProductSold.ConfigID = Config.ConfigID) where Sales.DocNO = 69";

    segunda-feira, 5 de junho de 2017 18:32
  • Porque você está querendo colocar o valor direto do textbox e combobox na string? É necessário isso? 
    Não da pra deixar do jeito que você falou que funcionou?
    segunda-feira, 5 de junho de 2017 18:35
  • Isto é um programa de faturação... e preciso que ele passe na string o tipo de documento e o número do documento...

    segunda-feira, 5 de junho de 2017 18:45
  • Já tentou tirar as aspas simples? deixar só as duplas?
    segunda-feira, 5 de junho de 2017 19:06
  • Obrigado pela ajuda... retirando as aspas simples já consigo que a string esteja correta para um dos valores... mas quando tento utilizar dois valores dá o seguinte erro:

    Erro de sintaxe (operador em falta) na expressão de consulta 'Sales.Doc = Fatura Proforma AND Sales.DocNo= 67'.

    cmd.CommandText = "SELECT Config.ProductName, Sales.InvoiceDate, Sales.SubTotal, Sales.GrandTotal, Sales.Remarks, ProductSold.Doc, ProductSold.DocNo, ProductSold.Quantity, ProductSold.Price, ProductSold.TotalAmount, ProductSold.ConfigID, Customer.CustomerName, Customer.Address, Customer.Landmark, Customer.City, Customer.State, Customer.Phone, Customer.MobileNo, Customer.FaxNo, Customer.Email FROM (((Customer INNER JOIN Sales ON Customer.CustomerID = Sales.CustomerID) INNER JOIN ProductSold ON Sales.DocNo = ProductSold.DocNo)INNER JOIN Config ON ProductSold.ConfigID = Config.ConfigID) where Sales.Doc = " + cb_doctype.Text + " AND Sales.DocNo= " + nfact + "";


    • Editado D3POD segunda-feira, 5 de junho de 2017 19:59
    segunda-feira, 5 de junho de 2017 19:57
  • Certo, qual delas que está dando problema? Testou com as duas separadas já? 
    segunda-feira, 5 de junho de 2017 20:21
  • Se for em separado funcionam bem... penso que o problema estará na junção das duas... alguma coisa errada talvez com as aspas
    terça-feira, 6 de junho de 2017 07:10
  • O que seria aquela parte com aspas vazias no final? Se é um valor nulo, não deveria ter um espaço entre... Não entendi. Tente colocar um # entre os valores também, tipo assim:

    nfact + "";

    #cb_doctype.Text# + " AND Sales.DocNo= " + #nfact#
    • Marcado como Resposta D3POD terça-feira, 6 de junho de 2017 15:11
    terça-feira, 6 de junho de 2017 12:27
  • Obrigado pela ajuda, consegui resolver assim:

    cmd.CommandText = "SELECT Config.ProductName, Sales.InvoiceDate, Sales.SubTotal, Sales.GrandTotal, Sales.Remarks, ProductSold.Doc, ProductSold.DocNo, ProductSold.Quantity, ProductSold.Price, ProductSold.TotalAmount, ProductSold.ConfigID, Customer.CustomerName, Customer.Address, Customer.Landmark, Customer.City, Customer.State, Customer.Phone, Customer.MobileNo, Customer.FaxNo, Customer.Email FROM (((Customer INNER JOIN Sales ON Customer.CustomerID = Sales.CustomerID) INNER JOIN ProductSold ON Sales.DocNo = ProductSold.DocNo)INNER JOIN Config ON ProductSold.ConfigID = Config.ConfigID) where Sales.Doc ="  + nTypeDoc +  "AND Sales.DocNO =" + nfact ;

    Cumprimentos

    terça-feira, 6 de junho de 2017 15:11
  • Que bom que ajudei :)
    terça-feira, 6 de junho de 2017 16:08