Notifications
Clear all

Conexao SQL

2 Posts
2 Usuários
0 Reactions
956 Visualizações
(@rcanun)
Posts: 0
New Member
Topic starter
 

Bom dia a todos.

Preciso da ajuda urgente de vocês para não perder um projeto que me custou boas horas de trabalho.

Montei o código abaixo via Gravador de Macros para conexão a uma base SQL e modifiquei o código SQL para efetuar uma query específica por data de lançamento (campos marcados em vermelho).

O meu problema é que esse intervalo de datas está numa sheet do Excel e não consegui montar variáveis que alimentasse o código SQL.

Há alguma alternativa para isso?

With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
"OLEDB;Provider=SQLOLEDB.1;Password=xxxxxxxxxx;Persist Security Info=True;User ID=usrgf;Data Source=LPSCLSQLCORPSQLCORP;Use Procedure" _
, "for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=BRLPS0107N0832;Use Encryption for Data=False;Tag with column " _
, "collation when possible=False;Initial Catalog=DBGF"), Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM Livro_diario WHERE ldia_dat_lancto BETWEEN 41275-2 AND 41305-2 ORDER BY emps_cod, ldia_dat_lancto, ldia_num_arquiv")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceConnectionFile = _
"C:UsersrcnunesDocumentsMinhas fontes de dadosLPSCLSQLCORP_SQLCORP DBGF Livro_diario.odc"
.ListObject.DisplayName = _
"Tabela_LPSCLSQLCORP_SQLCORP_DBGF_Livro_diario_ano_corrente"
.Refresh BackgroundQuery:=False
End With

Obrigado a todos.

Rodrigo Nunes

 
Postado : 20/10/2014 5:56 am
(@alminen)
Posts: 77
Trusted Member
 

No Gerador de Macros você selecionou as células que continham estas datas e as mesmas foram gravadas como estes números?

Se foi o caso veja se a solução de trocar:

.CommandText = Array("SELECT * FROM Livro_diario WHERE ldia_dat_lancto BETWEEN [color=#FF0000]41275-2[/color] AND [color=#FF0000]41305-2[/color] ORDER BY emps_cod, ldia_dat_lancto, ldia_num_arquiv")

Por:

.CommandText = Array("SELECT * FROM Livro_diario WHERE ldia_dat_lancto BETWEEN" & Sheets(1).Range("A1").Value & " AND " & Sheets(1).Range("A2").Value & " ORDER BY emps_cod, ldia_dat_lancto, ldia_num_arquiv")

Resolve seu problema. No caso, suponho que a data inicial esteja na célula A1 da primeira planilha, e a data final está na célula A2 da primeira planilha.

 
Postado : 20/10/2014 10:55 am