Notifications
Clear all

Alterar Intervalo Consulta Query Excel VBA

11 Posts
2 Usuários
0 Reactions
3,846 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 
Private Sub btGerarReceber_Click()
    Data1 = Format(Me!txtDataIni.Text, "yyyy-mm-dd")
    Data2 = Format(Me!txtDataFim.Text, "yyyy-mm-dd")

    Sheets("Parametros").Select
    Range("b2") = txtDataIni.Text
    Range("b3") = txtDataIni.Text
    Sheets("Plan2").Select
    Columns("A:e").Select
    Selection.ListObject.QueryTable.Delete
    Selection.ClearContents
  ' Foi gerado pelo assistente e funciona normal
    '   With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
    '       "ODBC;DSN=NomeBanco;Driver=Firebird/InterBase(r) driver;Dbname=C:DadosDadosBANCO.fdB;CHARSET=NONE;;UID=SYSDBA;Client=C:Win" _
    '       ), Array("dowsSysWOW64GDS32.DLL;")), Destination:=Range("$A$1")).QueryTable
    '       .CommandText = Array( _
    '       "SELECT CLIENTES.CODCLI, CLIENTES.EMPRESA, CONTAS_RECEBER.CONTRATO, CONTAS_RECEBER.EMISSAO, CONTAS_RECEBER.VALOR" & Chr(13) & "" & Chr(10) & "FROM CLIENTES CLIENTES, CONTAS_RECEBER CONTAS_RECEBER" & Chr(13) & "" & Chr(10) & "WHERE CONTAS_RECEBER.CODCLI = CL" _
    '       , _
    '       "IENTES.CODCLI AND ((CONTAS_RECEBER.EMISSAO>={d '2012-08-01'}) AND (CONTAS_RECEBER.EMISSAO<={d '2012-08-31'}))" _
    '       )
' Alterar com intervalo mediante formulario ( não funciona erro 1004
  With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
    "ODBC;DSN=NomeBanco;Driver=Firebird/InterBase(r) driver;Dbname=C:DadosDados8BANCO.fdB;CHARSET=NONE;;UID=SYSDBA;Client=C:Win" _
     ), Array("dowsSysWOW64GDS32.DLL;")), Destination:=Range("$A$1")).QueryTable
     .CommandText = Array("SELECT CLIENTES.CODCLI, CLIENTES.EMPRESA, CONTAS_RECEBER.CONTRATO, CONTAS_RECEBER.EMISSAO, CONTAS_RECEBER.VALOR" & Chr(13) & "" & Chr(10) & "FROM CLIENTES CLIENTES, CONTAS_RECEBER CONTAS_RECEBER" & Chr(13) & "" & Chr(10) _
     & "WHERE CONTAS_RECEBER.CODCLI = CLIENTES.CODCLI AND ((CONTAS_RECEBER.EMISSAO>= # " & Data1 & "#) AND (CONTAS_RECEBER.EMISSAO<= #" & Data2 & "#))")
     .RowNumbers = False
     .FillAdjacentFormulas = False
     .PreserveFormatting = True
     .RefreshOnFileOpen = False
     .BackgroundQuery = True
     .RefreshStyle = xlInsertDeleteCells
     .SavePassword = False
     .SaveData = True
     .AdjustColumnWidth = True
     .RefreshPeriod = 0
     .PreserveColumnInfo = True
     .ListObject.DisplayName = "Tabela_ConsultaR"
     .Refresh BackgroundQuery:=False
  End With
    frmContasReceber.Hide
End Sub
 
Postado : 10/11/2012 1:19 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Não dá para testa pois não tenho o banco então :Vc não disse se testou conforme havia sugerido,
agora em seu codigo acima há um pequeno erro, vc carrega somente o txtdataini, assim txtdata2 fica vazio

 
Postado : 10/11/2012 1:33 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Testei não funcionou gera mensagem dados incompativeis
Quanto ao erro ele não está interferindo pois não estou usando os parametros da range e sim da textbox
mesmo assim já alterei para posterior uso.

Obrigado

 
Postado : 10/11/2012 1:41 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Testei não funcionou gera mensagem dados incompativeis
Quanto ao erro ele não está interferindo pois não estou usando os parametros da range e sim da textbox
mesmo assim já alterei para posterior uso.

Obrigado

Ivair, "Dados Incompativeis" é sinal que alguma Variável não está declarada corretamente, ou os dados que se encontram na planilha são de Tipos diferentes ao Declarado na Rotina,
De uma olhada no link abaixo referente a Tipos, e depois reveja os dados e variáveis declaradas, utilize o Recurso Passo a Passo com a Tecla "F8", assim saberá exatamente onde está linha de erro, alem e poder acompanhar os dados carregado.
Tambem não entendi quando diz que está utilizando os parametros dos textbox e não do Range, mas em sua rotina ela está assim :

Data1 = Format(Me!txtDataIni.Text, "yyyy-mm-dd")
Data2 = Format(Me!txtDataFim.Text, "yyyy-mm-dd")

Sheets("Parametros").Select
Range("b2") = txtDataIni.Text
Range("b3") = txtDataIni.Text

Funções de Tipo - VBA
http://www.juliobattisti.com.br/cursos/ ... lo5/14.asp

[]s

 
Postado : 10/11/2012 3:36 pm
(@hronconi)
Posts: 314
Reputable Member
 

Sugiro que você monte sua instrução SQL em uma variável string qualquer. Depois analise o conteúdo da variável para ver se está tudo certo. Depois execute a sua instrução utilizando a variável no lugar.

 
Postado : 10/11/2012 4:20 pm
(@hronconi)
Posts: 314
Reputable Member
 

Sugiro que você monte sua instrução SQL em uma variável string qualquer. Depois analise o conteúdo da variável para ver se está tudo certo. Depois execute a sua instrução utilizando a variável no lugar.

Fiz aqui segundo seu código e o resultado da consulta foi:

SELECT CLIENTES.CODCLI, CLIENTES.EMPRESA, CONTAS_RECEBER.CONTRATO, CONTAS_RECEBER.EMISSAO, CONTAS_RECEBER.VALOR
FROM CLIENTES CLIENTES, CONTAS_RECEBER CONTAS_RECEBER
WHERE CONTAS_RECEBER.CODCLI = CLIENTES.CODCLI AND ((CONTAS_RECEBER.EMISSAO>= # 2012-11-01#) AND (CONTAS_RECEBER.EMISSAO<= #2012-11-30#))

Está diferente da sintaxe com o "{d ' " que você apresentou no início do post.

Veja se não é por aí.
Sds,

Henrique

 
Postado : 10/11/2012 4:53 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia

Vamos começar novamente acho que não consegui relatar minha necessidade

abaixo consulta Gerada Gravar Nacros :

Private Sub btGerarReceber_Click()
Sheets("Plan2").Select
Columns("A:d").Select
Selection.ListObject.QueryTable.Delete
Selection.ClearContents
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
"ODBC;DSN=NomeBanco;Driver=Firebird/InterBase(r) driver;Dbname=C:DadosDadosBANCO.fdB;CHARSET=NONE;;UID=SYSDBA;Client=C:Win" _
), Array("dowsSysWOW64GDS32.DLL;")), Destination:=Range("$A$1")).QueryTable
.CommandText = Array( _
"SELECT CONTAS_RECEBER.EMISSAO, CONTAS_RECEBER.EMPRESA, CONTAS_RECEBER.EMISSAO, CONTAS_RECEBER.VALOR" & _
Chr(13) & "" & Chr(10) & "FROM CONTAS_RECEBER CONTAS_RECEBER" & Chr(13) & "" & Chr(10) & _
"WHERE (CONTAS_RECEBER.EMISSAO>{d '2012-10-11'}) AND (CONTAS_RECEBER.EMISSAO<={d '2012-10-31'})")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Tabela_ConsultaPeriodoReceber"
.Refresh BackgroundQuery:=False
End With
Columns("D:D").Select
Selection.Style = "Comma"
frmContasReceber.Hide
Columns("D:D").Select
Selection.NumberFormat = "dd/mm/yyyy"
Columns("E:E").ColumnWidth = 13.43
Columns("E:E").Select
Selection.Style = "Comma"
End Sub

Minha dificuldade gerei um formulario com dois textbox para alterar o periodo de consulta.
ele da erro aqui .Refresh BackgroundQuery:=False

Mudando ficaria ssim

"WHERE (CONTAS_RECEBER.EMISSAO> # " & Data1 & " #) AND (CONTAS_RECEBER.EMISSAO<= # " & Data2 & " #)")

no aguardo

 
Postado : 12/11/2012 6:00 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Como já disse, não sou conhecedor do Firebird, mas em pesquisa na net entre varios este trecho chamou atenção:

é sempre bom lembrar como o Firebird Trabalha com as Datas e seus formatos.
Primeiro - é sempre em string!
Segundo - existem 3 formatos para passar a data para a SQL_String:
'yyyy-mm-dd' ou 'dd.mm.yyyy' ou 'mm/dd/yyyy'
[ Sempre com Aspas Simples para não dar xabú ]
Terceiro - Você só poderar utilizar-se do Date se estiver usando o sql Dialect 3, caso contrário o você só terá Time ou TimeStamp
http://comunidade.itlab.com.br/eve/foru ... 2091015312

.
Então a sua primeira query (a que funciona) retonra (ou envia) no Array

SELECT CONTAS_RECEBER.EMISSAO, CONTAS_RECEBER.EMPRESA, CONTAS_RECEBER.EMISSAO, CONTAS_RECEBER.VALOR
FROM CONTAS_RECEBER.CONTAS_RECEBER
WHERE (CONTAS_RECEBER.EMISSAO>{d '2012-10-11'}) AND (CONTAS_RECEBER.EMISSAO<={d '2012-10-31'})

A sua modificação (lembrando que o formato data entre "#" e valido para access e muitos outros bancos)

SELECT CONTAS_RECEBER.EMISSAO, CONTAS_RECEBER.EMPRESA, CONTAS_RECEBER.EMISSAO, CONTAS_RECEBER.VALOR
FROM CONTAS_RECEBER.CONTAS_RECEBER
WHERE (CONTAS_RECEBER.EMISSAO># 2012-10-11#) AND (CONTAS_RECEBER.EMISSAO<=#2012-10-31#)

Talvez então possa funcionar assim

Array( _
"SELECT CONTAS_RECEBER.EMISSAO, CONTAS_RECEBER.EMPRESA, CONTAS_RECEBER.EMISSAO, CONTAS_RECEBER.VALOR" & _
Chr(13) & "" & Chr(10) & "FROM CONTAS_RECEBER.CONTAS_RECEBER" & Chr(13) & "" & Chr(10) & _
"WHERE (CONTAS_RECEBER.EMISSAO>'" & Data1 & "') AND (CONTAS_RECEBER.EMISSAO<='" & Data2 & "')")

cujo retorno seria

SELECT CONTAS_RECEBER.EMISSAO, CONTAS_RECEBER.EMPRESA, CONTAS_RECEBER.EMISSAO, CONTAS_RECEBER.VALOR

FROM CONTAS_RECEBER.CONTAS_RECEBER

WHERE (CONTAS_RECEBER.EMISSAO>'2012-10-11') AND (CONTAS_RECEBER.EMISSAO<='2012-10-31')

 
Postado : 12/11/2012 6:48 am
(@hronconi)
Posts: 314
Reputable Member
 

Não sei se o Microsoft Query abre sua base Firebird, mas se abrir seria uma boa ferramenta para verificar o que está acontecendo e qual o comando que vai funcionar.

 
Postado : 12/11/2012 7:22 am
(@hronconi)
Posts: 314
Reputable Member
 

Outra coisa que me chamou a atenção no seu código é um espaço a mais na instrução SQL, exatamente onde voce insere a data inicial. (EM VERMELHO)

.CommandText = Array("SELECT CLIENTES.CODCLI, CLIENTES.EMPRESA, CONTAS_RECEBER.CONTRATO, CONTAS_RECEBER.EMISSAO, CONTAS_RECEBER.VALOR" & Chr(13) & "" & Chr(10) & "FROM CLIENTES CLIENTES, CONTAS_RECEBER CONTAS_RECEBER" & Chr(13) & "" & Chr(10) _
& "WHERE CONTAS_RECEBER.CODCLI = CLIENTES.CODCLI AND ((CONTAS_RECEBER.EMISSAO>= # " & Data1 & "#) AND (CONTAS_RECEBER.EMISSAO<= #" & Data2 & "#))")
.RowNumbers = False

 
Postado : 12/11/2012 7:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Obrigado Funcionou
Ficou assim

Private Sub btGerarReceber_Click()
    Data1 = Format(Me!txtDataIni.Text, "yyyy-mm-dd")
    Data2 = Format(Me!txtDataFim.Text, "yyyy-mm-dd")
    Sheets("Plan2").Select
    Columns("A:c").Select
    Selection.ListObject.QueryTable.Delete
    Selection.ClearContents
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
        "ODBC;DSN=NomeBanco;Driver=Firebird/InterBase(r) driver;Dbname=C:DadosDadosBANCO.fdB;CHARSET=NONE;;UID=SYSDBA;Client=C:Win" _
        ), Array("dowsSysWOW64GDS32.DLL;")), Destination:=Range("$A$1")).QueryTable
        .CommandText = Array( _
        "SELECT CONTAS_RECEBER.EMPRESA, CONTAS_RECEBER.EMISSAO, CONTAS_RECEBER.VALOR" & _
        Chr(13) & "" & Chr(10) & "FROM CONTAS_RECEBER CONTAS_RECEBER" & Chr(13) & "" & Chr(10) & _
        "WHERE (CONTAS_RECEBER.EMISSAO>= '" & Data1 & "') AND (CONTAS_RECEBER.EMISSAO<= '" & Data2 & ")")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "Tabela_ConsultaPeriodoReceber"
        .Refresh BackgroundQuery:=False
    End With
    frmContasReceber.Hide
    Columns("b:b").Select
    Selection.NumberFormat = "dd/mm/yyyy"
    Columns("c:c").ColumnWidth = 13.43
    Columns("c:c").Select
    Selection.Style = "Comma"
End Sub
 
Postado : 12/11/2012 7:27 am