ADODB.CONNECTION - VB6

RRGOTARDO 26/10/2012 09:35:30
#412852
Bom dia!

Eu estou lendo uma planilha em Excel e jogando para um RecordSet. Até aqui tudo bem!
Quando executo o comando Conn.Open Trim(txtArquivo.Texto), onde o txtArquivo.Texto é o caminho e o nome do arquivo da planilha, este comando acaba abrindo a planilha em modo [Ô]Somente leitura[Ô], o que não quero, pois o usuário precisa ir no gerenciador de tarefa para finalizar está planilha.

Eu somente quero que leia a planilha e jogue para o recordSet, sem precisar abrir a mesma, pois estarei jogando esses dados da Planilha em uma Grid.

Se alguém souber como faço isso

Segue o código que estou utilizando:

Private Sub ProcessarPlanilha()

On Error GoTo MostrarErro

Processando = True

Aguarde Me, fraAguarde, True

Dim RS As New ADODB.Recordset [ô]cria o ponteiro
Dim strSQL As String [ô]variavel para o sql
Dim Conn As New ADODB.Connection
Dim i As Long
Dim Excel As Object
Dim xlw As Object

Set Excel = CreateObject([Ô]Excel.Application[Ô])

OcorreuErro = False

[ô]Abrir o arquivo do Excel em memória
Set xlw = Excel.Workbooks.Open(Trim(txtArquivo.Texto))

[ô]verificação se ja existe uma conexão
If Conn.State = 0 Then [ô]se nao existir cria
Conn.Provider = [Ô]Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0[Ô]
Conn.Open Trim(txtArquivo.Texto) [ô]Momento em que abre a planilha como somente leitura
End If

[ô]seta o comando em sql
strSQL = [Ô]SELECT * FROM [Baixas$][Ô]

[ô]prepara o recordset para executar a leitura
RS.CursorType = adOpenForwardOnly
RS.LockType = adLockReadOnly
RS.CursorLocation = adUseClient

[ô]executa o comando sql
RS.Open strSQL, Conn

RS.ActiveConnection = Nothing

If Not xlw Is Nothing Then xlw.Close False

[ô]Excel.ActiveWorkbook.Close
Excel.quit

Set xlw = Nothing
Set Excel = Nothing
Set Conn = Nothing

[ô]verifica se existi algum registro na tabela
If RS.RecordCount = 0 Then
MsgBox [Ô]Não existe dados a serem importados![Ô], vbExclamation, [Ô]Atenção[Ô]
Else
If ValidaColunasGridRS(vsfgListaTitulos, RS) Then

[ô]Joga aqui o RS para uma Grid

End If
End If

Set RS = Nothing

Aguarde Me, fraAguarde, False

Processando = False

vsfgListaTitulos.SetFocus

If OcorreuErro Then

[ô]Se ocorreu algum erro de validação Mostra para o usuário os erros

End If

On Error GoTo 0

Exit Sub

MostrarErro:

Set RS = Nothing
Set Conn = Nothing
Set xlw = Nothing
Set Excel = Nothing

Aguarde Me, fraAguarde, False
Processando = False

Dim CodigoErro As Long
CodigoErro = Err.Number
If Abs(CodigoErro) > 1000 Then
CodigoErro = &H10000 - (-CodigoErro Mod &H10000)
End If

If (CodigoErro = 16389) Then
MsgBox [Ô]Não foi encontrado uma planilha com o nome: Baixas![Ô], vbExclamation, [Ô]Importação Baixas Receber[Ô]
Else
Call MsgBox([Ô]Ocorreu erro no Sistema Direct. [Ô] _
& vbCrLf & [Ô]Método: ProcessarPlanilha[Ô] _
& vbCrLf & [Ô]Número do erro: [Ô] & Err.Number _
& vbCrLf & [Ô]Descricão do erro: [Ô] & Err.Description, vbCritical, [Ô]Sistema Direct[Ô])
End If

End Sub
LLAIA 26/10/2012 10:22:00
#412859
Cara, nunca trabalhei com Excel e ADO. Não sei se é natural nesse caso, sempre abrir como somente leitura. Podemos tentar setar a propriedade Mode do objeto Connection para Escrita e Leitura. Talvez dê certo.

A propriedade Mode:

Especifica as permissões da conexão.

Alguns dos valores mais habituais que podemos atribuir são:

1 Estabelece permissão só de Leitura
2 Estabelece permissão só de Escritura
3 Estabelece permissão de Leitura/Escritura

fonte:http://www.criarweb.com/artigos/objeto-connection-propriedades-e-metodos.html


Exemplo:

O trecho específico ficaria assim:

    [ô]verificação se ja existe uma conexão
If Conn.State = 0 Then [ô]se nao existir cria
Conn.Provider = [Ô]Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0[Ô]
Conn.Mode = 3
Conn.Open Trim(txtArquivo.Texto) [ô]Momento em que abre a planilha como somente leitura
End If
ROBIU 26/10/2012 10:37:23
#412865
KERPLUNK 26/10/2012 10:40:44
#412866
Ele abre em somente leitura porque antes de abrir com o ADO, você abre a planilha usando um objeto do excel, nessa linha:
Set xlw = Excel.Workbooks.Open(Trim(txtArquivo.Texto))
RRGOTARDO 26/10/2012 11:41:51
#412875
Obrigado pelas ajudas, mas não deram certos.

O que reparei foi o seguinte agora, quando executo o comando [Ô]Conn.Open Trim(txtArquivo.Texto)[Ô] ele somente está abrindo a planilha se ja tiver uma planilha qualquer aberta (ou o excel aberto sem nenhuma planilha). Caso o excel já NÃO esteja sendo executando ao executar o comando a minha planilha não é aberta
MARCELO.TREZE 26/10/2012 13:12:25
#412890
é acho que o problema está aqui veja

[ô]Abrir o arquivo do Excel em memória
Set xlw = Excel.Workbooks.Open(Trim(txtArquivo.Texto))

[ô]verificação se ja existe uma conexão
If Conn.State = 0 Then [ô]se nao existir cria
Conn.Provider = [Ô]Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0[Ô]
Conn.Open Trim(txtArquivo.Texto) [ô]Momento em que abre a planilha como somente leitura
End If


tente isso



   [ô]verificação se ja existe uma conexão
If Conn.State = 0 Then [ô]se nao existir cria
Conn.Provider = [Ô]Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0[Ô]
Conn.Open Trim(txtArquivo.Texto) [ô]Momento em que abre a planilha como somente leitura
Else
[ô]Abrir o arquivo do Excel em memória
Set xlw = Excel.Workbooks.Open(Trim(txtArquivo.Texto))
End If


RRGOTARDO 26/10/2012 14:12:44
#412901
MARCELO-TREZE se eu não executar o comando [Ô]Set xlw = Excel.Workbooks.Open(Trim(txtArquivo.Texto))[Ô] antes de [Ô]Coon.Open[Ô] o vb6 da Run-Timer-Error
MARCELO.TREZE 26/10/2012 14:54:59
#412905
então coloque dentro do if assim

If Conn.State = 0 Then [ô]se nao existir cria
Set xlw = Excel.Workbooks.Open(Trim(txtArquivo.Texto))
Conn.Provider = [Ô]Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0[Ô]
Conn.Open Trim(txtArquivo.Texto) [ô]Momento em que abre a planilha como somente leitura
End If
Tópico encerrado , respostas não são mais permitidas