USAR FLEXGRID PARA INCLUIR E EDITAR BANCO DE DADO

LLAIA 27/03/2012 09:26:29
#398381
Se vc estiver usando algum SGBD, vc poderia usar o INSERT OR UPDATE como é o caso do Firebird:

Description: UPDATE OR INSERT checks if any existing records already contain the new values supplied for the MATCHING columns. If so, those records are updated. If not, a new record is inserted. In the absence of a MATCHING clause, matching is done against the primary key. If a RETURNING clause is present and more than one matching record is found, an error is raised.

Syntax:

UPDATE OR INSERT INTO
{tablename | viewname} [(<columns>)]
VALUES (<values>)
[MATCHING (<columns>)]
[RETURNING <values> [INTO <variables>]]

<columns> ::= colname [, colname ...]
<values> ::= value [, value ...]
<variables> ::= :varname [, :varname ...]
RICOCARDOZO 27/03/2012 10:36:34
#398388
Para editar estou usando :

Private Sub edita_dados()
TabelaContas
TB_CONTAS.Open [Ô]SELECT * FROM contas [Ô], BD_CAIXA

For L = 1 To Grade.Rows - 1
sql = [Ô]UPDATE contas set con_nome=[ô][Ô] & Grade.TextMatrix(L, 2) & [Ô][ô][Ô] _
& [Ô] where con_codigo =[Ô] & Grade.TextMatrix(L, 1)
BD_CAIXA.Execute (sql)
Next L
FechaTabelaContas
End Sub

Para inlcuir uma nova linha :
Private Sub grava_dados()
TabelaContas
TB_CONTAS.Open [Ô]SELECT * FROM contas ORDER BY CON_CODIGO[Ô], BD_CAIXA
sql = [Ô]INSERT INTO contas(con_nome) VALUES ([Ô]
sql = sql & [Ô][ô][Ô] & Grade.TextMatrix(Grade.Row, 2) & [Ô][ô])[Ô]
BD_CAIXA.Execute (sql)
FechaTabelaContas
End Sub

Só que ele cria um codigo nada a ver tipo:
codigo Nome
1 Carlos
2 Joao
3 Maria
4 Jose
13 Ricardo <- novo registro

Meu campo codigo é autonumeração achei q ele iria criar como 5
4
MARCELO.TREZE 27/03/2012 11:59:08
#398393
Bom vou explicar primeiro porque a auto numeração não coloca o numero 5 após o 4, bom o o ACCESS trabalha assim com campo autonumeração.

se vc incluir registro na sequencia 1, 2, 3, 4, 5, e depois resolver excluir o registro 5 por exemplo este não será criado novamente ou seja o campo numeração automática vai criar o registro 6, e se vc resolver excluir este registro também, ai o próximo será o 7 ficando assim 1, 2, 3, 4, 7 isto é uma particularidade do campo numeração automática do access.

porém acredito que está faltando um pouco de lógica no seu código.

vou explicar como faço

em um formulário possuo os campos que usarei para salvar os registros no Banco de dados (textbox), ex: txnome, txtendereco, txtidade..etc

neste mesmo formulário possuo 4 command butons que ativo e desativo conforme minha necessidade (são eles NOVO, SALVAR, ALETRAR, EXCLUIR)

e Também possuo um FlexGrid

vamos aos procedimentos, primeiro incluir um registro, como procedo:

No load do form eu Ativo os Botões NOVO e SALVAR, e desativo os Botões ALTERAR e EXCLUIR.

preencho os campos com os dados necessários e clico em salvar, uso a query INSERT normalmente

ex: [Ô]INSERT INTO tabela (Nome,endereco, idade) VALUES ([ô]marcelo[ô], [ô]rua B[ô], 40)[Ô]

nesta inserção não lanço nada no flexgrid na realiade eu crio uma sub PreencheFlex para preencher o grid com os dados ja salvos na tabela

Ex:

Sub PreencheGrid()
Wtih MSFlexGrid1
.Rows = 1 [ô] exibe apenas a primeira linha do grid (cabeçalho)
Set Rs = BD_CAIXA.Execute ([Ô]SELECT * FROM tabela[Ô])
Do While Not RS.EOF
.Rows = .Rows + 1 [ô] vai incluindo linha a linha conforme a quantidade de registros
.TextMatrix(.Rows -1, 0) = RS!id
.TextMatrix(.Rows -1, 1) = RS!Nome
.TextMatrix(.Rows -1, 2) = RS!Idade
RS.MoveNext
Loop
End With
End Sub


este é um exemplo basico da sub , então após o codigo insert, eu chamo a sub PrrencheGrid, que vai atualizar a grid com todos os registros.

após o grid preenchido se eu quiser alterar algum dos registros o que eu faço no enveto click do grid, eu capturo os dados da linha selecionada, e preencho os textbox, ao mesmo tempo eu desativo o Botão SALVAR e ativo ALTERAR e EXCLUIR, o botão NOVO ficará sempre ativo poisele apenas apaga os textbox.

no botão alterar eu tenho a seguinte query

[Ô]UPDATE tabela SET nome = [ô]marcelo[ô], endereco = [ô]rua F[ô],idade = 40 WHERE id = [Ô] & txtID.Text

faço o up date na tabela e chamo

PrrencheGrid


os dados atualizados serã carregados no grid, os Botões ALTERAR e EXCLUIR são desativados e o Botão SALVAR será ativado deixando o programa pronto para um novo registro.

desta maneira, não corro riscos, epero que tenha entendido


RICOCARDOZO 27/03/2012 12:53:18
#398400
Ta dando erro neste insert :
Erro de sintaxe
Private Sub grava_dados()
sql = [Ô]INSERT INTO contas(con_codigo,con_nome)[Ô]
sql = sql & [Ô]VALUES([Ô]
sql = sql & [Ô][ô][Ô] & Grade.TextMatrix(Grade.Row, 1) & [Ô][ô],[Ô]
sql = sql & [Ô][ô][Ô] & Grade.TextMatrix(Grade.Row, 2) & [Ô][ô],)[Ô]
BD_CAIXA.Execute (sql)
End Sub
MARCELO.TREZE 27/03/2012 13:30:07
#398402
RICARDO mais uma vez o con_codigo, é automático vc não o insere
RICOCARDOZO 27/03/2012 13:41:01
#398403
Eu mudei ele Treze desculpe não mensionei achei mais facil deixar sem auto numeração.
RICOCARDOZO 27/03/2012 13:57:47
#398406
Achei Treze o erro de sintaxe
Agora esta funcionando o editar e incluir .

Private Sub edita_dados()
TabelaContas
TB_CONTAS.Open [Ô]SELECT * FROM contas [Ô], BD_CAIXA

For L = 1 To Grade.Rows - 1
sql = [Ô]UPDATE contas set con_nome=[ô][Ô] & Grade.TextMatrix(L, 2) & [Ô][ô][Ô] _
& [Ô] where con_codigo =[Ô] & Grade.TextMatrix(L, 1)
BD_CAIXA.Execute (sql)
Next L
FechaTabelaContas
End Sub

Private Sub grava_dados()
sql = [Ô]INSERT INTO contas(con_codigo,con_nome)[Ô]
sql = sql & [Ô]Values ([Ô]
sql = sql & Grade.TextMatrix(Grade.Row, 1) & [Ô],[ô][Ô]
sql = sql & Grade.TextMatrix(Grade.Row, 2) & [Ô][ô])[Ô]
BD_CAIXA.Execute (sql)
End Sub


RICOCARDOZO 27/03/2012 13:59:12
#398407
Agora vou fazer uma para executar o delete

Página 2 de 2 [18 registro(s)]
Tópico encerrado , respostas não são mais permitidas