Vraptor Postado Novembro 20, 2005 Denunciar Share Postado Novembro 20, 2005 Bom dia pessoaljá montei e acessei algumas tabelas do SQL Server pelo VB6 sem problemas.infelizmente me deparei com um pequeno problema que não conssigo resolver.Segue alguns trechos do codigo:'Inicia a conexao com o ServerOn Error GoTo ErroCmdDim oCo As ADODB.ConnectionSet oCo = New ADODB.ConnectionoCo.Provider = "SQLOLEDB"oCo.Properties("Data Source").Value = "escrit-ribx0gv"oCo.Properties("Initial Catalog").Value = "Construcao"oCo.Properties("User ID").Value = "sa"oCo.Properties("Integrated Security").Value = "SSPI"oCo.OpenMsgBox "Conexao efetuada com sucesso !" If Not VerificaTabela("CombinacoesConcatenadas") Then MsgBox "Tabela CombinacoesConcatenadas não Existe !" End End If If Not VerificaTabela(........ ........ ....... 'VERIFICA AS TABELAS X'sVERIFICAX: If Not VerificaTabela("TabelaX") Then oCo.Execute ("Create Table TabelaX (Codigo int primary key,Concatenacao varchar(200), )") MsgBox "Tabela TabelaX criada com sucesso !" Else MsgBox "Tabela TabelaX já existe e sera excluida !" oCo.Execute ("Drop Table TabelaX") MsgBox "Tabela TabelaX excluida com sucesso !" GoTo VERIFICAX: End If........................................ErroCmd:MontarDescricaoDoErroMsgBox sErroFIMSUB:End Sub__________________________________________________Function VerificaTabela(nomeTabela As String) Dim oRs As ADODB.Recordset Dim oCo As ADODB.Connection Set oRs = New ADODB.Recordset Set oRs = oCo.OpenSchema(adSchemaTables) Do While Not oRs.EOF If oRs!Table_Name = nomeTabela Then VerificaTabela = True Exit Do End If oRs.MoveNext Loop oRs.Close End Function__________________________________________________Public Sub MontarDescricaoDoErro()Dim oErro As ADODB.ErrorsErro = "Erro: " + CStr(Err.Number)For Each oErro In oCo.ErrorssErro = sErro + oErro.DescriptionNextEnd SubLogo na primeira verificaçao de tabela surge a seguinte menssagem de erro:Run-Time error '91':Object Variable or with block variable not setSubstituindo “On Error GoTo ErroCmd” por “On Error Resume Next”ele emite o msgbox “Tabela CombinacoesConcatenadas não Existe”Esta tabela foi criada e acessada por outros Forms do programa.Em outras tabelas ele inssiste em cria-las sendo que já foram criadas.Agradeceria muito a ajuda de alguém.Sem mais Daniel. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Novembro 20, 2005 Denunciar Share Postado Novembro 20, 2005 Logo na primeira verificaçao de tabela surge a seguinte menssagem de erro:Run-Time error '91':Object Variable or with block variable not setSim, você *não* criou um objeto ADODB.Connection aqui:Function VerificaTabela(nomeTabela As String) Dim oRs As ADODB.Recordset Dim oCo As ADODB.Connection Set oRs = New ADODB.Recordset Set oRs = oCo.OpenSchema(adSchemaTables) ...Note a utilização do oCo sem a criação de um objeto (utilizando o operador New). Se você possuir um oCo global (em um módulo, ou no General Declarations de um form), esse oCo declarado dentro da rotina "sombreia" ele (ou seja, é esse local que vale na rotina). Se sua intenção é utilizar esse outro que já foi inicializado, retire a declaração de oCo da rotina.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Vraptor Postado Novembro 21, 2005 Autor Denunciar Share Postado Novembro 21, 2005 Caro GraymalkinEu posso criar um Objeto oCo no modulo para torna-lo global ?Tambem posso criar um Objeto RecordSet no Modulo ?Estou perguntando porque em todos Form's crio uma conecçao assim como os RecordSet's.Ou seja a mesmas tabelas usadas em varios Form's.Bem...como quem não chora não mama...vou pedir mais uma dica:Como faço para fechar todos RecorSet's simultaneamente, tenho varios livros de VB e infelizmente nenhum fala sobre tal metodo.Novamente agradeço você e o restante do pessoal pela colaboraçao...Abraços e tenha um bom dia.Daniel. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Novembro 21, 2005 Denunciar Share Postado Novembro 21, 2005 Caro GraymalkinEu posso criar um Objeto oCo no modulo para torna-lo global ?Tambem posso criar um Objeto RecordSet no Modulo ?Estou perguntando porque em todos Form's crio uma conecçao assim como os RecordSet's.Ou seja a mesmas tabelas usadas em varios Form's.Sim, pode. Eu, particularmente, sempre coloco a conexão em um módulo e os recordsets nos forms (afinal de contas, a conexão pode ficar aberta o tempo todo, mas os recordset vão variar de um form para outro então, a nível de performance, não é recomendável manter recordsets abertos que não estejam sendo utilizados).Bem...como quem não chora não mama...vou pedir mais uma dica:Como faço para fechar todos RecorSet's simultaneamente, tenho varios livros de VB e infelizmente nenhum fala sobre tal metodo.Novamente agradeço você e o restante do pessoal pela colaboraçao...Abraços e tenha um bom dia.Daniel.Que eu saiba não tem como. Afinal de contas, cada Recordset é um objeto e não existe uma ligação entre eles (ou uma coleção deles). Entretanto, nada impediria que você fizesse uma coleção de recordsets e depois fechasse todos eles através de um For Each... Next. Supondo que você tenha uma coleção em um módulo...Dim coleção As New Collection ... e que você adicione nela os objetos ADODB.Recordset que estão abertos... coleção.Add rs coleção.Add rs2 ... você poderia depois fechar todos assim: For Each recset In coleção If recset.State = adStateOpen Then recset.Close End If NextAbraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Vraptor Postado Novembro 22, 2005 Autor Denunciar Share Postado Novembro 22, 2005 Valeu !!Abraços !!Daniel. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Vraptor
Bom dia pessoal
já montei e acessei algumas tabelas do SQL Server pelo VB6 sem problemas.
infelizmente me deparei com um pequeno problema que não conssigo resolver.
Segue alguns trechos do codigo:
'Inicia a conexao com o Server
On Error GoTo ErroCmd
Dim oCo As ADODB.Connection
Set oCo = New ADODB.Connection
oCo.Provider = "SQLOLEDB"
oCo.Properties("Data Source").Value = "escrit-ribx0gv"
oCo.Properties("Initial Catalog").Value = "Construcao"
oCo.Properties("User ID").Value = "sa"
oCo.Properties("Integrated Security").Value = "SSPI"
oCo.Open
MsgBox "Conexao efetuada com sucesso !"
If Not VerificaTabela("CombinacoesConcatenadas") Then
MsgBox "Tabela CombinacoesConcatenadas não Existe !"
End
End If
If Not VerificaTabela(........
........
.......
'VERIFICA AS TABELAS X's
VERIFICAX:
If Not VerificaTabela("TabelaX") Then
oCo.Execute ("Create Table TabelaX (Codigo int primary key,Concatenacao varchar(200), )")
MsgBox "Tabela TabelaX criada com sucesso !"
Else
MsgBox "Tabela TabelaX já existe e sera excluida !"
oCo.Execute ("Drop Table TabelaX")
MsgBox "Tabela TabelaX excluida com sucesso !"
GoTo VERIFICAX:
End If
...........
...........
.........
.........
ErroCmd:
MontarDescricaoDoErro
MsgBox sErro
FIMSUB:
End Sub
__________________________________________________
Function VerificaTabela(nomeTabela As String)
Dim oRs As ADODB.Recordset
Dim oCo As ADODB.Connection
Set oRs = New ADODB.Recordset
Set oRs = oCo.OpenSchema(adSchemaTables)
Do While Not oRs.EOF
If oRs!Table_Name = nomeTabela Then
VerificaTabela = True
Exit Do
End If
oRs.MoveNext
Loop
oRs.Close
End Function
__________________________________________________
Public Sub MontarDescricaoDoErro()
Dim oErro As ADODB.Error
sErro = "Erro: " + CStr(Err.Number)
For Each oErro In oCo.Errors
sErro = sErro + oErro.Description
Next
End Sub
Logo na primeira verificaçao de tabela surge a seguinte menssagem de erro:
Run-Time error '91':
Object Variable or with block variable not set
Substituindo “On Error GoTo ErroCmd” por “On Error Resume Next”
ele emite o msgbox “Tabela CombinacoesConcatenadas não Existe”
Esta tabela foi criada e acessada por outros Forms do programa.
Em outras tabelas ele inssiste em cria-las sendo que já foram criadas.
Agradeceria muito a ajuda de alguém.
Sem mais Daniel.
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.