USAR FLEXGRID PARA INCLUIR E EDITAR BANCO DE DADO
Olá a todos
Gostaria de uma dica de como fazer o seguinte:
Tenho uma flexgride com 10 linhas
Carrego eslas em branco Ok
Fiz uma rotina com text para poder editar certo.
Agora gostaria de poder incluir no banco de dados quando for nova linha e editar quando houver alteração de uma determinada celula de uma linha existente.
Gostaria de uma dica de como fazer o seguinte:
Tenho uma flexgride com 10 linhas
Carrego eslas em branco Ok
Fiz uma rotina com text para poder editar certo.
Agora gostaria de poder incluir no banco de dados quando for nova linha e editar quando houver alteração de uma determinada celula de uma linha existente.
Neste caso você terá que construir uma rotina que será associado ao eventos do grid para manipular estes dados junto ao banco de dados
Eu pensei em fazer o seguinte na logica por enquanto;
Abrir o Grid com 5 linhas e duas colunas:
Codido | Descrição
Na coluna codigo inserir no banco de dados o numero de 1 a 5 e descricão deixar em branco.
Esconder a coluna codigo do usuário, e a hora que ele abrir o form verá o grid e ao inlcuir qualquer dado ao sair ou pular para proxima linha excutar um update na tebela.
Abrir o Grid com 5 linhas e duas colunas:
Codido | Descrição
Na coluna codigo inserir no banco de dados o numero de 1 a 5 e descricão deixar em branco.
Esconder a coluna codigo do usuário, e a hora que ele abrir o form verá o grid e ao inlcuir qualquer dado ao sair ou pular para proxima linha excutar um update na tebela.
Coloque as informações no Grid e quando trocar o curso de Row, salve no Banco. Não precisa criar linhas no BD quando não tem informação a inserir.
Fiz esta funçãozinha mais não ta dando certo
Ele cria o grid com 5 linhas numerado aparentemente correto , mas nao ta gravando no bd.
Private Sub inclui_dados()
TabelaContas
TB_CONTAS.Open [Ô]SELECT * FROM contas [Ô], BD_CAIXA
Grade.Rows = 5
Dim codigo As Integer
codigo = 1
For L = 1 To Grade.Rows - 1
Grade.TextMatrix(L, 1) = codigo
If TB_CONTAS.EOF = True Then
sql = [Ô]INSERT INTO contas(con_codigo) VALUES ([Ô]
sql = sql & [Ô][ô][Ô] & codigo & [Ô][ô])[Ô]
codigo = codigo + 1
Else
sql = [Ô]UPDATE contas set con_codigo=[ô][Ô] & Grade.TextMatrix(L, 1) & [Ô][ô][Ô]
BD_CAIXA.Execute (sql)
codigo = codigo + 1
End If
Next L
FechaTabelaContas
End Sub
Ele cria o grid com 5 linhas numerado aparentemente correto , mas nao ta gravando no bd.
Private Sub inclui_dados()
TabelaContas
TB_CONTAS.Open [Ô]SELECT * FROM contas [Ô], BD_CAIXA
Grade.Rows = 5
Dim codigo As Integer
codigo = 1
For L = 1 To Grade.Rows - 1
Grade.TextMatrix(L, 1) = codigo
If TB_CONTAS.EOF = True Then
sql = [Ô]INSERT INTO contas(con_codigo) VALUES ([Ô]
sql = sql & [Ô][ô][Ô] & codigo & [Ô][ô])[Ô]
codigo = codigo + 1
Else
sql = [Ô]UPDATE contas set con_codigo=[ô][Ô] & Grade.TextMatrix(L, 1) & [Ô][ô][Ô]
BD_CAIXA.Execute (sql)
codigo = codigo + 1
End If
Next L
FechaTabelaContas
End Sub
Puts que gafe sem execute nunca ia funcionar n rsrsrsrsrsrs
Corrigido
Private Sub inclui_dados()
TabelaContas
TB_CONTAS.Open [Ô]SELECT * FROM contas [Ô], BD_CAIXA
Grade.Rows = 5
Dim codigo As Integer
codigo = 1
For L = 1 To Grade.Rows - 1
Grade.TextMatrix(L, 1) = codigo
If TB_CONTAS.EOF = True Then
sql = [Ô]INSERT INTO contas(con_codigo) VALUES ([Ô]
sql = sql & [Ô][ô][Ô] & codigo & [Ô][ô])[Ô]
codigo = codigo + 1
BD_CAIXA.Execute (sql)
Else
sql = [Ô]UPDATE contas set con_codigo=[ô][Ô] & Grade.TextMatrix(L, 1) & [Ô][ô][Ô]
BD_CAIXA.Execute (sql)
codigo = codigo + 1
BD_CAIXA.Execute (sql)
End If
Next L
FechaTabelaContas
End Sub
Só que agora acontece o seguinte na primeira execução com o bd limpo ele faz os lançamentos certinho mais a medidade que eu executo a segunda vez ele faz o seguinte:
Codigo
4
4
4
4
Corrigido
Private Sub inclui_dados()
TabelaContas
TB_CONTAS.Open [Ô]SELECT * FROM contas [Ô], BD_CAIXA
Grade.Rows = 5
Dim codigo As Integer
codigo = 1
For L = 1 To Grade.Rows - 1
Grade.TextMatrix(L, 1) = codigo
If TB_CONTAS.EOF = True Then
sql = [Ô]INSERT INTO contas(con_codigo) VALUES ([Ô]
sql = sql & [Ô][ô][Ô] & codigo & [Ô][ô])[Ô]
codigo = codigo + 1
BD_CAIXA.Execute (sql)
Else
sql = [Ô]UPDATE contas set con_codigo=[ô][Ô] & Grade.TextMatrix(L, 1) & [Ô][ô][Ô]
BD_CAIXA.Execute (sql)
codigo = codigo + 1
BD_CAIXA.Execute (sql)
End If
Next L
FechaTabelaContas
End Sub
Só que agora acontece o seguinte na primeira execução com o bd limpo ele faz os lançamentos certinho mais a medidade que eu executo a segunda vez ele faz o seguinte:
Codigo
4
4
4
4
ta faltando um WHERE na query de UPDATE
Onde Treze?
sql = [Ô]UPDATE contas set con_codigo=[ô][Ô] & Grade.TextMatrix(L, 1) & [Ô][ô][Ô]
Where não seria para comparar? ou filtrar?
desculpe se eu estiver errado
sql = [Ô]UPDATE contas set con_codigo=[ô][Ô] & Grade.TextMatrix(L, 1) & [Ô][ô][Ô]
Where não seria para comparar? ou filtrar?
desculpe se eu estiver errado
Exatamente pra isso mesmo
é assim
UPDATE tabela SET nome=[ô]marcelo[ô],idade=40 WHERE id = 1
no caso acima o registro de ID 1 é o que será alterado entendeu
é assim
UPDATE tabela SET nome=[ô]marcelo[ô],idade=40 WHERE id = 1
no caso acima o registro de ID 1 é o que será alterado entendeu
O que pode estar errado ?
Ele acerta no grid:
Codigo
1
2
3
4
Mais a hora que recarrego o form ele volta assim
Codigo
4
4
4
4
For L = 1 To Grade.Rows - 1
Grade.TextMatrix(L, 1) = codigo
If TB_CONTAS.EOF = True Then
sql = [Ô]INSERT INTO contas(con_codigo) VALUES ([Ô]
sql = sql & [Ô][ô][Ô] & codigo & [Ô][ô])[Ô]
codigo = codigo + 1
BD_CAIXA.Execute (sql)
Else
sql = [Ô]UPDATE contas set con_codigo=[ô][Ô] & codigo & [Ô][ô][Ô] _
& [Ô] where con_codigo =[Ô] & Grade.TextMatrix(L, 1)
codigo = codigo + 1
BD_CAIXA.Execute (sql)
End If
Next L
FechaTabelaContas
Ele acerta no grid:
Codigo
1
2
3
4
Mais a hora que recarrego o form ele volta assim
Codigo
4
4
4
4
For L = 1 To Grade.Rows - 1
Grade.TextMatrix(L, 1) = codigo
If TB_CONTAS.EOF = True Then
sql = [Ô]INSERT INTO contas(con_codigo) VALUES ([Ô]
sql = sql & [Ô][ô][Ô] & codigo & [Ô][ô])[Ô]
codigo = codigo + 1
BD_CAIXA.Execute (sql)
Else
sql = [Ô]UPDATE contas set con_codigo=[ô][Ô] & codigo & [Ô][ô][Ô] _
& [Ô] where con_codigo =[Ô] & Grade.TextMatrix(L, 1)
codigo = codigo + 1
BD_CAIXA.Execute (sql)
End If
Next L
FechaTabelaContas
olha no update vc não atualiza con_codigo apenas usa ele como a referencia para registro a ser atualizado
veja bem este exemplo
eu possuo os seguintes dados na tabela
Id Nome Endereco
01 Marcelo Rua A
02 Joao Rua B
03 Pedro Rua C
supondo que o João mudou de endereço, farei uma atualização
no update acima eu poderia até atualizar o nome do joão mas o id não mudarei apenas o usarei como base para atualização
espero que tenha entendido
veja bem este exemplo
eu possuo os seguintes dados na tabela
Id Nome Endereco
01 Marcelo Rua A
02 Joao Rua B
03 Pedro Rua C
supondo que o João mudou de endereço, farei uma atualização
UPDATE tabela SET endereco = [ô]rua dos bobos nº 0[ô] WHERE id = 02
no update acima eu poderia até atualizar o nome do joão mas o id não mudarei apenas o usarei como base para atualização
espero que tenha entendido
Tópico encerrado , respostas não são mais permitidas