VERIFICAR O FLEXGRID ANTES DE GRAVAR
MARCELÃO
EU FIZ FIXO NA LINHA 1 E SEGUNDO ELE N FUNFOU TB
esse é o codigo estou usando pra gravar
nao gravar nada se a grid nao estiver dados...
Private Sub Cmd1_Click()
On Error GoTo Trataerro
[ô]-----------------------------------------------------
If G.TextMatrix(1, 0) = [Ô][Ô] Then
MsgBox ([Ô]Não Dados na Grid[Ô]), vbQuestion, [Ô]Aviso[Ô]
Exit Sub
End If
[ô]-----------------------------------------------------
[ô]Gravo na Tabela Entrada
Sql = [Ô]Insert Into Tbl_EntNota (NumEntrada, NFiscal)[Ô]
[ô]---
Sql = Sql & [Ô]Values ([Ô]
[ô]---
Sql = Sql & [Ô][ô][Ô] & TxtNumEntrada.Text & [Ô][ô],[Ô]
Sql = Sql & [Ô][ô][Ô] & TxtNFiscal.Text & [Ô][ô])[Ô]
Conexao.Execute Sql
[ô]Gravo na Tabela Itens Entrada
For F = 1 To G.Rows - 2
Sql = [Ô]Insert Into Tbl_EntItens (CodProd, Descricao, Quant, Vlr_Custo, Desco, Vlr_Venda, NumEntra, IdFornec, Usuario)[Ô]
[ô]---
Sql = Sql & [Ô]Values ([Ô]
[ô]---
Sql = Sql & [Ô][ô][Ô] & G.TextMatrix(F, 1) & [Ô][ô],[Ô] [ô]CodProd
Sql = Sql & [Ô][ô][Ô] & G.TextMatrix(F, 2) & [Ô][ô],[Ô] [ô]Descricao do Produto
Sql = Sql & [Ô][ô][Ô] & Replace(CDbl(G.TextMatrix(F, 3)), [Ô],[Ô], [Ô].[Ô]) & [Ô][ô],[Ô] [ô]Qtd Produto
Sql = Sql & [Ô][ô][Ô] & Replace(CDbl(G.TextMatrix(F, 4)), [Ô],[Ô], [Ô].[Ô]) & [Ô][ô],[Ô] [ô]Valor Custo
Sql = Sql & [Ô][ô][Ô] & Replace(CDbl(G.TextMatrix(F, 5)), [Ô],[Ô], [Ô].[Ô]) & [Ô][ô],[Ô] [ô]Descontos
Sql = Sql & [Ô][ô][Ô] & Replace(CDbl(G.TextMatrix(F, 6)), [Ô],[Ô], [Ô].[Ô]) & [Ô][ô],[Ô] [ô]Valor Venda
Sql = Sql & [Ô][ô][Ô] & TxtNumEntrada.Text & [Ô][ô],[Ô] [ô]Numero da Entrada de Produtos
Sql = Sql & [Ô][ô][Ô] & LblIdFornec.Caption & [Ô][ô],[Ô] [ô]Id do Fornecedor
Sql = Sql & [Ô][ô][Ô] & Usuario & [Ô][ô])[Ô] [ô]Nome do Usuário
Conexao.Execute Sql
Next F
MsgBox [Ô]Gravação Efetuado com Sucesso![Ô], vbInformation, [Ô]ATENÇÃO[Ô]
Exit Sub
Trataerro:
MsgBox Err.Description, vbCritical, [Ô]Erro no Sistema[Ô]
End Sub[txt-color=#e80000] [/txt-color]
nao gravar nada se a grid nao estiver dados...
Private Sub Cmd1_Click()
On Error GoTo Trataerro
[ô]-----------------------------------------------------
If G.TextMatrix(1, 0) = [Ô][Ô] Then
MsgBox ([Ô]Não Dados na Grid[Ô]), vbQuestion, [Ô]Aviso[Ô]
Exit Sub
End If
[ô]-----------------------------------------------------
[ô]Gravo na Tabela Entrada
Sql = [Ô]Insert Into Tbl_EntNota (NumEntrada, NFiscal)[Ô]
[ô]---
Sql = Sql & [Ô]Values ([Ô]
[ô]---
Sql = Sql & [Ô][ô][Ô] & TxtNumEntrada.Text & [Ô][ô],[Ô]
Sql = Sql & [Ô][ô][Ô] & TxtNFiscal.Text & [Ô][ô])[Ô]
Conexao.Execute Sql
[ô]Gravo na Tabela Itens Entrada
For F = 1 To G.Rows - 2
Sql = [Ô]Insert Into Tbl_EntItens (CodProd, Descricao, Quant, Vlr_Custo, Desco, Vlr_Venda, NumEntra, IdFornec, Usuario)[Ô]
[ô]---
Sql = Sql & [Ô]Values ([Ô]
[ô]---
Sql = Sql & [Ô][ô][Ô] & G.TextMatrix(F, 1) & [Ô][ô],[Ô] [ô]CodProd
Sql = Sql & [Ô][ô][Ô] & G.TextMatrix(F, 2) & [Ô][ô],[Ô] [ô]Descricao do Produto
Sql = Sql & [Ô][ô][Ô] & Replace(CDbl(G.TextMatrix(F, 3)), [Ô],[Ô], [Ô].[Ô]) & [Ô][ô],[Ô] [ô]Qtd Produto
Sql = Sql & [Ô][ô][Ô] & Replace(CDbl(G.TextMatrix(F, 4)), [Ô],[Ô], [Ô].[Ô]) & [Ô][ô],[Ô] [ô]Valor Custo
Sql = Sql & [Ô][ô][Ô] & Replace(CDbl(G.TextMatrix(F, 5)), [Ô],[Ô], [Ô].[Ô]) & [Ô][ô],[Ô] [ô]Descontos
Sql = Sql & [Ô][ô][Ô] & Replace(CDbl(G.TextMatrix(F, 6)), [Ô],[Ô], [Ô].[Ô]) & [Ô][ô],[Ô] [ô]Valor Venda
Sql = Sql & [Ô][ô][Ô] & TxtNumEntrada.Text & [Ô][ô],[Ô] [ô]Numero da Entrada de Produtos
Sql = Sql & [Ô][ô][Ô] & LblIdFornec.Caption & [Ô][ô],[Ô] [ô]Id do Fornecedor
Sql = Sql & [Ô][ô][Ô] & Usuario & [Ô][ô])[Ô] [ô]Nome do Usuário
Conexao.Execute Sql
Next F
MsgBox [Ô]Gravação Efetuado com Sucesso![Ô], vbInformation, [Ô]ATENÇÃO[Ô]
Exit Sub
Trataerro:
MsgBox Err.Description, vbCritical, [Ô]Erro no Sistema[Ô]
End Sub[txt-color=#e80000] [/txt-color]
MOREIRA, boa noite.
O que acontece é o seguinte.
No MSFlexGrid quando você usa esta propriedade MSFlexGrid.Rows ele conta todas as linhas inclusive o cabelalho, por isso se utiliza o -1 para poder desconsiderar o cabecalho que é uma linha fixa. No seu projeto percebi que sempre há uma linha em branco, ou seja, não preenchida que é justamete a última, entao quando você usa a esta propriedade MSFlexGrid.Rows -1 ele começa a contar de cima para baixo e a ultima linha nesta contagem vai ser justamente a linha em branco por isso seu sistema diz que não há dados no Grid, ok??
Você pode resolver este problema de duas maneiras, vamos lá:
[txt-color=#e80000]1º.[/txt-color] Faz loop analizando linha a linha se todas estão preenchidas e se a ultima não está, entao você elimina esta linha em branco para poder rodar a rotina de gravação dos dados, mais ou menos assim:
e Para chamar faz assim, antes no botão de gravação antes da linha que testa se não ha dados ok??
[txt-color=#e80000]2º.[/txt-color] Você muda de posição a intrução que adiciona as linhas no Grid no botão que envia os dados do Textbox para o grid. Cola a intrução para inserir antes de enviar os dados, mais ou menos assim:
Agora o grande [Ô]X[Ô] da questão é quando você monta o cabeçalho do Grid coloca somente 1 linha, a que seja suficiente só para o cabeçalho, ok???
Dúvidas posta ai novamente.
O que acontece é o seguinte.
No MSFlexGrid quando você usa esta propriedade MSFlexGrid.Rows ele conta todas as linhas inclusive o cabelalho, por isso se utiliza o -1 para poder desconsiderar o cabecalho que é uma linha fixa. No seu projeto percebi que sempre há uma linha em branco, ou seja, não preenchida que é justamete a última, entao quando você usa a esta propriedade MSFlexGrid.Rows -1 ele começa a contar de cima para baixo e a ultima linha nesta contagem vai ser justamente a linha em branco por isso seu sistema diz que não há dados no Grid, ok??
Você pode resolver este problema de duas maneiras, vamos lá:
[txt-color=#e80000]1º.[/txt-color] Faz loop analizando linha a linha se todas estão preenchidas e se a ultima não está, entao você elimina esta linha em branco para poder rodar a rotina de gravação dos dados, mais ou menos assim:
Private Sub Verifica_Linha_Em_Branco(Grid As MSFlexGrid)
[ô]Defina uma variável do tipo Integer
Dim cRow As Integer
cRow = 1
With Grid
Do Until cRow > .Rows - 1
[ô]Testanto se a linha está vazia
If .TextMatrix(cRow, 2) = [Ô][Ô] Then
[ô]Se linha vazia, o Grid assume somente as linhas com dados
Grid.Rows = cRow
Else
[ô]Incrementa a contagem
cRow = cRow + 1
End If
Loop
End With
End Sub
e Para chamar faz assim, antes no botão de gravação antes da linha que testa se não ha dados ok??
Call Verifica_Linha_Em_Branco(G)
[txt-color=#e80000]2º.[/txt-color] Você muda de posição a intrução que adiciona as linhas no Grid no botão que envia os dados do Textbox para o grid. Cola a intrução para inserir antes de enviar os dados, mais ou menos assim:
[ô]Aqui deve estar a linha que aduciona as linhas do grid
G.Rows = G.Row + 1
[ô]Aqui envia os dados para o grid -> Exemplo
G.TextMatrix(Linha, Coluna) = Text1.Text
G.TextMatrix(Linha, Coluna) = Text2.Text
G.TextMatrix(Linha, Coluna) = Text3.Text
G.TextMatrix(Linha, Coluna) = Text4.Text
Agora o grande [Ô]X[Ô] da questão é quando você monta o cabeçalho do Grid coloca somente 1 linha, a que seja suficiente só para o cabeçalho, ok???
Dúvidas posta ai novamente.
Tópico encerrado , respostas não são mais permitidas