Ir para conteúdo
Fórum Script Brasil
  • 0

Sql Server Via Vb6


Vraptor

Pergunta

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

  • 0

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

Sim, 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

Link para o comentário
Compartilhar em outros sites

  • 0

Caro Graymalkin

Eu 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.

Link para o comentário
Compartilhar em outros sites

  • 0

Caro Graymalkin

Eu 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
Next

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...