Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Paulo Mar

Sucessivos rs.open e rs.close

Recommended Posts

estou preenchendo um list com o banco de dados...

 

 

a cada registro que seleciono, preenche um comboBox!!!

 

sendo assim tenho que abrir e fechar várias vezes o Banco de Dados (MySQL).

 

só que parece que tem um limite de consulta!!!

 

sou novo em programação, alguém poderia me ajudar?

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou preenchendo um list com o banco de dados...

 

 

a cada registro que seleciono, preenche um comboBox!!!

 

sendo assim tenho que abrir e fechar várias vezes o Banco de Dados (MySQL).

 

só que parece que tem um limite de consulta!!!

 

sou novo em programação, alguém poderia me ajudar?

 

obrigado

Pelo q eu vi cada clique q você der no list ele vai preencher a combo com um valor diferente certo?

 

Se for isto, no evento clique do list

você vai criar uma variavel só pra isto

então você vai utilizar a padrao q você tem pra conectar ao bd só ira criar uma pra conectar ha recordset tipo assim

Em uma module você ira colocar!

 

Public Cnn As New ADODB.Connection

Public rst As New ADODB.Recordset

Public Sql As String

 

Public Function AbreConexao()

'Criando uma instância do objeto Connection

Cnn.Open "provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Metta;Data Source=adriano\sqlexpress;"

End Function

Esta função acima, é para abrir o bd

Então na hora em q carrega o seu mid principal, você abre elá!

Saco!

 

Public Function FecharConexao()

Cnn.Close

End Function

Esta aqui fecha, então qdo o programa utilizar um end tem q chamar ela tbm pra fechar a conexão com o bd blza!

 

Public Sub verifica_rs()

If rst.State = 1 Then rst.Close

End Sub

 

Esta aqui é no caso de você usar muito esta variavel rst. ela verifica se ela esta aberta se estiver ela fecha e você pode utilizar a variavel novamente!

 

Bom mas voltando ao assunto do list

Agora você vai fazer o seguinte, no caso do clique no list tu vai criar no list mesmo uma variavel do tipo adodb.recordset

Q q você acha de

dim rstlist As New ADODB.Recordset

dai no clique você faz o codigo desta rstlist

sql = "select * from tabel where codigo like '" & lstvw.SelectedItem.Text & "'"

rstlist.open sql, cnn

 

função pra preecher a combo

 

rstlist.close

 

pronto acabou o seu probrema!

Bom se for isto espero ter ajudado, klker coisa posta ai novamente!

E qto ao limite, nao tem problema naum, é só você abrir e fechar antes de abrir com uma nova instrução select!

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adriano, observando seu código acima, poderia me tirar uma dúvida? Por que utilizou a variável sql?Por que ao invés de fazer de rstlist receber direto a query você preferiu passar para a variável sql e depois fazer o rstlist receber a variável sql? Isso dá algum desempenho melhor?Pergunto pq eu teria feito direto, sem a variável sql.Ah, e uma coisa que talvez te ajude, isso aprendi no curso de VB, então acho que seja válido, já que a escola é boa.Quando você declara suas variáveis tanto de conexão, quanto a de recordset, você já coloca new, e desta forma, toda vez que que seu programa ler a variável, ele vai fazer uma nova conexão com o banco (é algo mais ou menos isso, meu professor explicou bem na época mas não lembro os detalhes), então lá vai uma dica:Declare sem o new, por exemplo: private cnn as ADODB.connectionE quando for fazer ela receber a conexão, faça antes:set cnn = new ADODB.connection.Bom, espero ajudado...Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Adriano,

 

eu consigo preencher o combo.

 

mas se pensarmos que o suário vai selecionar um à um. (No List)

 

 

 

List => ComboBox => Operação

 

Empresa 1 => Arquivo empresa 1 => Limpa combo, Abre Banco, preenche ComboBox e fecha Banco

Empresa 2 => Arquivo empresa 2 => Limpa combo, Abre Banco, preenche ComboBox e fecha Banco

Empresa 3 => Arquivo empresa 3 => Limpa combo, Abre Banco, preenche ComboBox e fecha Banco

Empresa n => Arquivo empresa n => Limpa combo, Abre Banco, preenche ComboBox e fecha Banco

 

 

Observação: O conteúdo do combo é uma data!

 

 

Uma hora o VB trava... e não da chance de Debug! ele da aqele erro que gera um relatório para microsoft e pergunta se você quer enviar ou não enviar!

 

 

Sei que o erro da na hora que vai abrir o banco para preencher o Combo (ele esta fechado). Minha professora falou que talvez o cursor tenha se perdido... mas ela tbm não sabe (Não é a professora da matéria de SQL, nem VB)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adriano, observando seu código acima, poderia me tirar uma dúvida? Por que utilizou a variável sql?Por que ao invés de fazer de rstlist receber direto a query você preferiu passar para a variável sql e depois fazer o rstlist receber a variável sql? Isso dá algum desempenho melhor?Pergunto pq eu teria feito direto, sem a variável sql.Ah, e uma coisa que talvez te ajude, isso aprendi no curso de VB, então acho que seja válido, já que a escola é boa.Quando você declara suas variáveis tanto de conexão, quanto a de recordset, você já coloca new, e desta forma, toda vez que que seu programa ler a variável, ele vai fazer uma nova conexão com o banco (é algo mais ou menos isso, meu professor explicou bem na época mas não lembro os detalhes), então lá vai uma dica:Declare sem o new, por exemplo: private cnn as ADODB.connectionE quando for fazer ela receber a conexão, faça antes:set cnn = new ADODB.connection.Bom, espero ajudado...Abraços...

Kra vou tentar prq eu faço somente daquele jeito, vai ver q é por isso q da o erro de ter de fechar e abrir as conexões!Bom valeu pela dica!E qto a variavel é q eu prefiro digitar tudo na varialvel prq acho mais facil de ler.Ex.:Sql = "SELECT * FROM detconta WHERE data >='" & Format(DtpDta(0).Value, "MM/DD/YYYY") & ""Sql = Sql & "' AND data <='" & Format(DtpDta(1).Value, "MM/DD/YYYY") & ""Sql = Sql & "' AND CodCliente LIKE '" & Txt(0).Text & "' order by data"depois rst.open sql, cnnacho mais facil saca!Mas nunca reparei agilidade no codigo, prq nunca utilizei do outro jeito q você falou!Abraços!E paulo como q você ta trabalhando com estas datas!O vb tem um lance q ele só le datas nesta forma "MM/DD/YYYY"Pode ser isto!Tenta convertar as datas para este formato para ele ler depois formata elas ao nomal "DD/MM/YYYY"Pra isso você tera de usar um for durante as inserções dos dados!E qto ao lance q você disse q o cursor se perde!Como você ta fazendo a inserção dos dados na combo!Tenta este codigo aqui apos os cliques no listPrivate Sub PreencherCombo()If rst.RecordCount = 0 ThenExit SubElserst.MoveFirst While Not rst.EOF CmbServ.AddItem rst("servico") rst.MoveNext WendEnd Ifrst.MoveFirstEnd Subda no evento click tu chama preenchecomboblza!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.