IDEIA SOBRE ABRIR E FECHAR CONEXAO ADO MYSQL

XXXANGELSXXX 16/01/2010 23:48:45
#332151
Como os amigos aqui que frequentam o site sao so [Ô]bombados[Ô] no vb.. rs.. gostaria de tirar uma duvidazinha cruel que me mata, vejam bem, estou trabalhando com mysql agora, larguei o danado do acess de mao, e ja vi enormes melhores com relacao a segurança e tratamento de dados, agora vejam bem, toda procedure minha que busca os dados eu tenho que instanciar o recordset, ate ai tudo bem, mas no final do codigo eu fecho o recordset?, se eu fecho ele, as minhas outras funcoes nao funcionam, como por exemplo, quando eu clico em um registro do grid com o recodset aberto, todas as minhas funcoes funcionam perfeitamente, como CONTARREGISTROS DO BANCO e CARREGAR AS TEXTBOX, gostaria de ver como vcs fazem a respeito desse caso, pois to vendo que se eu deixar o rs e o bd aberto, e quase a mesma coisa de trabalhar no acess.. vou postar algumas partes do codigo que to usando..


Private myRS As ADODB.Recordset
Private rsConCNPJ As ADODB.Recordset
Dim VText As String


Private Sub Form_Load()
Conecta True
Call ConexaoBD
Call ContaRegistros
Call CarregarTextbox
Call PreencheGrid
Check1.BackColor = &HF8F8F8
Check2.BackColor = &HF8F8F8
VText = [Ô][Ô]
CoresGrid TDBGrid1, &HEFEFEF, &HFFFFFF, True
End Sub

Sub ConexaoBD()
Conecta True
Set myRS = New ADODB.Recordset
myRS.Open [Ô]SELECT * FROM servicecadpessoas ORDER BY pesscodigo[Ô], Conexao, adOpenForwardOnly, adLockReadOnly
End Sub
Private Sub ContaRegistros()
If myRS.RecordCount = 0 Then
TDBGrid1.Caption = [Ô]Registro : 0 de 0[Ô]
Else
TDBGrid1.Caption = [Ô]Registro : [Ô] & CStr(myRS.AbsolutePosition) & [Ô] de [Ô] & CStr(myRS.RecordCount)
End If
End Sub
Sub CarregarTextbox()
If Not myRS.EOF Then
txtNome.Text = myRS!pessnomereduzido & [Ô][Ô]
txtCnpj.Text = myRS!pesscnpj & [Ô][Ô]
txtNome.Text = myRS!pessnome & [Ô][Ô]
txtFantasia.Text = myRS!pessfantasia & [Ô][Ô]


End If
End Sub

nesses casos acima como vcs fariam para o sistema buscar do banco de dados as informacoes?, deste jeito ai ele busca os dados, nao estou usando dataset vinculado ao banco, mas eu acho que se usar dessa forma é quase a mesma coisa de estar usando datasets ne?abraçao a todos.
TECLA 17/01/2010 10:23:05
#332156
O componente TDBGrid precisa de uma conexão aberta com o RECORDSET?
Se você [Ô]alimentá-lo[Ô] e depois [Ô]destruir[Ô] o objeto, ele se mantém funcionando normal?
XXXANGELSXXX 17/01/2010 12:27:21
#332164
Nao, o tdbgrid nao necessita de conexao aberta nao, eu posso preencher e destruir a conexao depois, mas o problema é que to sem saber o que fazer para preencher os campos textbox quando o cara for navegando de um registro para o outro. exemplo, eu tenho um contador de registros no form, o defaut dele quando conecta é REGISTRO : 1 DE 500 por exemplo.. quando eu for clicando no grid de clientes ele tem que alimentando de acordo com o registro que estou , e mudar os campos textbox para o cliente que quero.entenderam? vou enviar uma tela do sistema para vcs entenderem melhor. o que esta circulado e o seguinte o contador de registro uso a funçao..

Sub ContaRegistros()
Conecta True
Set myRS = New ADODB.Recordset
myRS.Open [Ô]SELECT * FROM cadpessoas [Ô], Conexao, adOpenForwardOnly, adLockReadOnly

If myRS.RecordCount = 0 Then
Frame1.Caption = [Ô]Registro : 0 de 0[Ô]
Else
Frame1.Caption = [Ô]Registro : [Ô] & CStr(myRS.AbsolutePosition) & [Ô] de [Ô] & CStr(myRS.RecordCount)
End If
myRS.Close
Conecta False

Set myRS = Nothing
End Sub

e o preenchetext box com a seguinte funçao..

Sub CarregarTextbox()
Conecta True
Set myRS = New ADODB.Recordset
myRS.Open [Ô]SELECT * FROM cadpessoas [Ô], Conexao, adOpenForwardOnly, adLockReadOnly
If Not myRS.EOF Then
txtCodigo.Text = myRS!id & [Ô][Ô]
txtCnpj.Text = myRS!pesscnpj & [Ô][Ô]
txtNome.Text = myRS!pessnome & [Ô][Ô]
txtFantasia.Text = myRS!pessfantasia & [Ô][Ô]
txtTipEndereco.Text = myRS!pesstipendereco & [Ô][Ô]
txtEndereco.Text = myRS!pessendereco & [Ô][Ô]
txtNumero.Text = myRS!pessnumero & [Ô][Ô]
txtComplemento.Text = myRS!pesscomplemento & [Ô][Ô]
txtBairro.Text = myRS!pessbairro & [Ô][Ô]
txtCep.Text = myRS!pesscep & [Ô][Ô]
txtCidade.Text = myRS!pesscidade & [Ô][Ô]
txtEstado.Text = myRS!pessuf & [Ô][Ô]
txtContato.Text = myRS!pesscontato & [Ô][Ô]
txtDecisor.Text = myRS!pessdecisor & [Ô][Ô]
End If
myRS.Close
Conecta False
Set myRS = Nothing

End Sub

so que quando eu chamo essa funçao no RowColChange do grid por exemplo, ele tipo da um reset na funçao, oiu seja, se eu clico no registro 2, ele nao carrega os textbox do registro 2 nem conta os registros, continua 1 de 2 etc.. entenderam?
XXXANGELSXXX 17/01/2010 12:44:15
#332167
Se eu arumasse um jeito de contar os registros apartir do click no grid seria otimo, eu mais ou menos saquei como vou fazer para preecher os textbox apartir do grid.. usando mais ou menos o seguinte..

Sub TDBGrid2_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
with tdbgrid2
txtcodigo.text = .columns(0).text:txtendereco.text = .columns(1).text:txtendereco.text = .columns(2).text
end with

End Sub

ou seja, dessa forma ele preenche os textbox desvinculado, aproveitando os dados que estao no grid, agora so nao consegui fazer preencher as informaçoes da contagem dos registros como citado, ou seja, se eu nao fecho a conexao, eu uso a funcao anterior, entao no load do form eu carrego apenas o grid, ou seja, eu preencho apenas o grid e uso ele para alimentar os textbox.
XXXANGELSXXX 17/01/2010 13:25:04
#332169
Amigos, fiz uma gambiarra aqui que aparentemente deu certo, vou testar com mais registros depois para ver se ta ok mesmo. declarei uma variavel como String, fiz ele contar o registro em cima dessa variavel, e no rowcolchange do grid pedi para ele verificar isso.. mais ou menos assim..

Dim vConta As String
___________________
Sub ContaRegistros()
Conecta True
Set myRS = New ADODB.Recordset
myRS.Open [Ô]SELECT * FROM cadpessoas [Ô], Conexao, adOpenForwardOnly, adLockReadOnly

If myRS.RecordCount = 0 Then
vConta = 0
Else

vConta = CStr(myRS.RecordCount)
End If
myRS.Close
Conecta False

Set myRS = Nothing
End Sub
________________________
Private Sub TDBGrid2_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Dim LinhaAtual As Integer
LinhaAtual = TDBGrid2.Row
Call CarregarTextbox
Frame1.Caption = [Ô]Registro : [Ô] & LinhaAtual + 1 & [Ô] de [Ô] & vConta
End Sub

e o carregar textbox fiz assim

Sub CarregarTextbox()
With TDBGrid2
txtCodigo.Text = .Columns(0).Text
txtCnpj.Text = .Columns(1).Text
txtNome.Text = .Columns(2).Text
txtFantasia.Text = .Columns(3).Text
txtTipEndereco.Text = .Columns(4).Text
txtEndereco.Text = .Columns(5).Text
txtNumero.Text = .Columns(6).Text
txtComplemento.Text = .Columns(7).Text
txtBairro.Text = .Columns(8).Text
txtCep.Text = .Columns(9).Text
txtCidade.Text = .Columns(10).Text
txtEstado.Text = .Columns(11).Text
txtContato.Text = .Columns(12).Text
txtDecisor.Text = .Columns(13).Text
End With
End Sub

Vou testando.. qualquer coisa grito vcs novamente, de qualquer forma obrigadaço pela ajuda..
Tópico encerrado , respostas não são mais permitidas