RETIRAR DADOS DE MSHFLEXGRID

LINDOLPHO 06/06/2007 12:19:16
#220015
Estou tentando fazer um pequeno sistema em VB6. Utilizando uma base de dados ADO com Acess eu coloco os registros numa MSHFLEXGRID.Tenho os seguintes campos:Código,Nome, Data de nascimento e sexo (F/M).Carrego a MSHFLEXGRID assim:

Sub flex()
If Len(Text2.Text) = 0 Then
sql = "SELECT código,format(nascimento,'DD/MM/YYYY') as nascimento,nome,sexo FROM geral ORDER BY nome "
Else
sql = "SELECT código,format(nascimento,'DD/MM/YYYY') as nascimento,nome,sexo FROM geral WHERE nome LIKE '" & Trim(Me.Text2.Text) & "%'ORDER BY nome "

End If
rs.Close

rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
rs.LockType = adLockBatchOptimistic

rs.Open sql, conexao

Set MSHFlexGrid1.DataSource = rs

End Sub


Gostaria de manipular estes dados:
1) Enviando a linha selecionada para 4 textbox (1 para cada campo:Código,Nome, Data de nascimento e sexo)
2) Excluindo do banco de dados a linha selecionada com o clique de um botão
3) Alterando no banco de dados os dados da linha selecionada que foram alterados nas textbox com o clique de um botão.

Agradeço a quem puder me ajudar

USUARIO.EXCLUIDOS 06/06/2007 14:47:19
#220040
Eu faço da seguinte maneira:
Depois de montado o GRID e eu quero fazer algo eu Clico na Linha e coloco um botão para fazer algo, no evento CLICK do botão eu pego da seguinte forma:

Textbox =  MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, [Coluna que eu quero]) 


O primeiro parametro é a linha então eu uso o retorno da propriedade ROW e coloco o número da coluna que eu quero passando para o textbox

Espero ter ajudado

LINDOLPHO 08/06/2007 12:01:04
#220348
Valeu Cheskys. Muito obrigado. Deu certinho.

Tentei com este artifício conseguir alterar e excluir os registros do banco de dados, mas infelizmente não consegui.

Agradeço a quem puder me ajudar nestes dois ÂÂ'tópicos'.

LINDOLPHO 08/06/2007 16:27:34
#220411
Alguem me ajuda...
USUARIO.EXCLUIDOS 08/06/2007 17:23:20
#220426
Para vc alterar ou excluir estes registros primeiro vc deve chamar ele na tela, intaum use um textbox e no on-change ou no Lost Focus dele coloque

Sql = "Select * From geral Where codigo Like '" & textbox.Text & "%' ORDER BY codigo"

com isso vc localiza no Banco o registo selecionado,,,

Ai criar um botão com delete no Sql para excluir e outro com Update no Sql para alterar...

Voce pode alterar o textbox pela linha selecionada no Mshflexgrid ai vc substitui o texbox por grid.text,,,

Pelo que eu entendi da sua duvida acho que isso deve resolver.

LINDOLPHO 09/06/2007 08:46:28
#220466
VFNET obrigado pela ajuda.

Ainda estou com dificuldade pois não consegui fazer um código que desse um resultado satisfatório nos botões excluir e alterar.


Como seria o código???

USUARIO.EXCLUIDOS 09/06/2007 09:46:30
#220467
No Delete coloque o codigo
Sql = "Delete * From geral"

No Alterar
Sql = "UPDATE tbent SET Codigo='" & Txt1.Text & "', nascimento='" & Txt2.Text & "', nome='" & Txt3.Text & "', sexo='" & Txt4.Text & "'"


E claro que cada Txt.text tem que ser o textbox que vc usa em seu sistema!
LINDOLPHO 09/06/2007 11:42:50
#220480
Tentei mas infelizmente não deu. Olhe o código que coloquei

Sub limpa()
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
End Sub


Private Sub cmd_Alterar_Click()

Sql = "Select * FROM geral Where código Like '" & Text1.Text & "%' ORDER BY código"
rs.Close
rs.Open Sql, conexao, adOpenKeyset, adLockOptimistic

Sql = "UPDATE tbent SET Código='" & Text1.Text & "', nascimento='" & Text3.Text & "', nome='" & Text2.Text & "', sexo='" & Text4.Text & "'"
limpa
Text2.SetFocus
Exit Sub

End Sub

Private Sub cmd_Excluir_Click()
r = MsgBox("Deseja excluir -" & rs.Fields(0), vbYesNo, "Excluir registro")
If r = vbYes Then
Sql = "Select * FROM geral Where código Like '" & Text1.Text & "%' ORDER BY código"
rs.Close
rs.Open Sql, conexao, adOpenKeyset, adLockOptimistic
Sql = "Delete * From geral"

limpa
Text2.SetFocus
End If
End Sub



USUARIO.EXCLUIDOS 11/06/2007 09:56:24
#220625
Resposta escolhida
Vamos avaliar seu código:

Neste ponto criamos uma string e abrimos um rs ...

Sql = "Select * FROM geral Where código Like '" & Text1.Text & "%' ORDER BY código"
rs.Close
rs.Open Sql, conexao, adOpenKeyset, adLockOptimistic


Neste momento abrimos uma string, limpamos as tstbox e jogamos o foco para outra então saimos da função...

Sql = "UPDATE tbent SET Código='" & Text1.Text & "', nascimento='" & Text3.Text & "', nome='" & Text2.Text & "', sexo='" & Text4.Text & "'"
limpa
Text2.SetFocus
Exit Sub


Vc realmente não percebeu que precisaria EXECUTAR o comando da ultima SQL ?
onde vc falou executa SQL (UPDATE tbent ...)?


Faltou a linha :
conexao.Execute Sql

Faz assim:

Sql = "UPDATE tbent SET Código='" & Text1.Text & "', nascimento='" & Text3.Text & "', nome='" & Text2.Text & "', sexo='" & Text4.Text & "'"
conexao.Execute Sql
limpa
Text2.SetFocus
Exit Sub

LINDOLPHO 11/06/2007 10:58:01
#220639
Realmente não tinha atentado para este dado. Já quebrei cabeça até mesmo.
Fiz a alteração no código mas infelizmente não deu certo.

O campo código é do tipo auto numeração e o sistema diz que não pode ser atualizado. Se retiro o código da instrução sql:

Sql = "UPDATE tbent SET nascimento='" & Text3.Text & "', nome='" & Text2.Text & "', sexo='" & Text4.Text & "'"

O sistema dá erro indicando que está sendo gerado registro com dados repetidos e grava os dados como um novo registro e com novo número de código. O registro inicial que deveria ser alterado permanece preservado.

No comando de exclusão funcionou depois que alterei a instrução da dica do amigo vf net . Ficou assim.
Private Sub cmd_Excluir_Click()
r = MsgBox("Deseja excluir -" & rs.Fields(0), vbYesNo, "Excluir registro")
If r = vbYes Then
Sql = "Select * FROM geral Where código Like '" & Text1.Text & "%' ORDER BY código"
rs.Close
rs.Open Sql, conexao, adOpenKeyset, adLockOptimistic
Sql = "Delete * FROM geral Where código Like '" & Text1.Text & "'"
conexao.Execute Sql
limpa
Text2.SetFocus
End If
End Sub


USUARIO.EXCLUIDOS 11/06/2007 11:08:52
#220643
Cade a condiçao ? queres atualizar todos os registros da sua tabela ?
Ainda bem que o comando não deu certo pois senão vc ia ter 1mi de registros iguais, hehehehe.

Tem que ser algo assim fii.

UPDATE tabela SET campo=valor ... WHERE condicao

Este WHERE é tal qual o utilizado num SELECT
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas