Usuário com melhor resposta
Gravar parcelas

Pergunta
-
Boa tarde!
Estou desenvolvendo uma aplicação desktop só para treinamento mesmo antes usava banco acces funcionava tudo perfeitamente.
O idcontrole tem que ser o mesmo para todas as parcelas nesse exemplo pegou o codigo 42 que é o códgo da conta como no acces veja abaixo;
estou trocado pelo SQLITE, e esta acontecendo o seguinte, o idcontrole esta gravando códigos em sequencia não pode acontecer.
lembrando que tenho dois métodos, uma GravarConta(controle) e outro gravaparcelas, no evento do botão salvar executo primeiro o método gravaconta depois gravaparcelas
private void btnSalvar_Click(object sender, EventArgs e) { GravarConta(); salvar_parcela(); LimpaCampo(); dataGridParcelas.DataSource = null; }
Agora veja os métodos;
private void GravarConta() { if (CodFornecedor != string.Empty) { try { ContasMODEL objprecos = new ContasMODEL(); objprecos.IDControle = Convert.ToInt32(txtCodigo.Text); objprecos.Id_centro_custo = Convert.ToInt32(CodCentroCusto); objprecos.Datacadastro = Convert.ToDateTime(dtLancamento.Text); objprecos.IDFornecedor = Convert.ToInt32(CodFornecedor); objprecos.Descricao = txtDescricao.Text; ContasBLL precosbll = new ContasBLL(); precosbll.gravaPrecosDal(objprecos); txtCodigo.Text = RetornaCodigoContaMaisUm(QueryParcela).ToString();//EU } catch (SQLiteException ex) { MessageBox.Show("Verifique os erros", ex.Message); } } else MessageBox.Show("Escolha um fornecedor", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
Gravar
private void gravar_Parcelas() { foreach (DataGridViewRow linha in dataGridParcelas.Rows) { int posicao = 0; //********************* var conn = Conexao.Conex(); SQLiteCommand cmd = new SQLiteCommand("INSERT INTO parcelas (idparcela, idcontrole, num_parcela, datavenc, valor_parc ) VALUES (@idparcela, @idcontrole, @num_parcela, @datavenc, @valor_parc)", conn); posicao = linha.Index; conn.Open(); string cod_parcela = linha.Cells[0].Value.ToString(); string cod_controle = linha.Cells[1].Value.ToString(); string num_parcela = linha.Cells[2].Value.ToString(); string preço = linha.Cells[4].Value.ToString(); string data = linha.Cells[3].Value.ToString();//Nova implmentação Int32 parcela = Convert.ToInt32(cod_parcela); Int32 controle = Convert.ToInt32(cod_controle); Int32 numroparcela = Convert.ToInt32(num_parcela); DateTime Data = Convert.ToDateTime(data);//Nova implementação parcela = Convert.ToInt32(RetornaCodigoContaMaisUm(QueryParcela).ToString());// Nova implemntação preço = preço.Replace("R", "").Replace("$", "").Replace(" ", "").Replace(".", ""); cmd.Parameters.AddWithValue("@idparcela", parcela); cmd.Parameters.AddWithValue("@idcontrole", controle); cmd.Parameters.AddWithValue("@num_parcela", numroparcela); cmd.Parameters.AddWithValue("@datavenc", Data); cmd.Parameters.AddWithValue("@valor_parc", Convert.ToDecimal(preço)); cmd.ExecuteNonQuery(); conn.Close(); } MessageBox.Show("Gravado com sucesso !", "Informação!", MessageBoxButtons.OK, MessageBoxIcon.Information); }
Olha o código que usei para criar as tabelas no SQLITE;
CREATE TABLE centrocusto ( idcentro INTEGER CONSTRAINT AUTO_INCREMENT PRIMARY KEY, centro_custo TEXT ) CREATE TABLE controle ( idcontrole INTEGER AUTO_INCREMENT PRIMARY KEY, datacadastro DATE, idcentro INTEGER CONSTRAINT centrocusto REFERENCES idcentro, idfornecedor INTEGER CONSTRAINT fornecedor REFERENCES idfornecedor, descricao TEXT /*FOREIGN KEY(idcentro) REFERENCES centrocusto(idcentro) FOREIGN KEY(idfornecedor) REFERENCES fornecedor(idfornecedor) */ ) CREATE TABLE fornecedor ( idfornecedor INTEGER CONSTRAINT AUTO_INCREMENT PRIMARY KEY, fornecedor TEXT ) CREATE TABLE parcelas ( idparcela INTEGER CONSTRAINT AUTO_INCREMENT PRIMARY KEY, idcontrole INTEGER CONSTRAINT controle REFERENCES idcontrole, num_parcela INTEGER, valor_parc FLOAT, datavenc DATE, datapgto DATE, pago BOOLEAN /*FOREIGN KEY(idcontrole) REFERENCES controle(idcontrole) */ ) CREATE TABLE usuario ( idusuario INTEGER CONSTRAINT AUTO_INCREMENT PRIMARY KEY, usuario TEXT, senha TEXT, nivelacesso TEXT )
Alguém poderia me dar um força nessa tarefa?
Respostas
-
Consegue resolver o problema, foi só inverter a ordem primeiro idparcela em seguida txtCodigo, dessar forma resolver antes estava txtCodgo.tex, Idparcela++
for (var i = 0; i < Num_Parcela; i++) { dt.Rows.Add( Idparcela++, txtCodigo.Text, (i + 1), Data_Venc.AddMonths(i + 1), resultado); // gerando as parcelas no grid } dataGridParcelas.DataSource = dt;
- Marcado como Resposta WR Services Wadson quarta-feira, 27 de abril de 2016 21:21
Todas as Respostas
-
-
Boa tarde,
Não encontrei o erro no seu código. Confirma se na coluna 2 da sua grid o código do controle esta correto. Quando você esta inserindo a parcela, esta obtendo os dados do DataGridView e o código do controle esta obtendo da segunda coluna.
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
-
Consegue resolver o problema, foi só inverter a ordem primeiro idparcela em seguida txtCodigo, dessar forma resolver antes estava txtCodgo.tex, Idparcela++
for (var i = 0; i < Num_Parcela; i++) { dt.Rows.Add( Idparcela++, txtCodigo.Text, (i + 1), Data_Venc.AddMonths(i + 1), resultado); // gerando as parcelas no grid } dataGridParcelas.DataSource = dt;
- Marcado como Resposta WR Services Wadson quarta-feira, 27 de abril de 2016 21:21