Página 3 de 4

Re: excel e macro que cria e controla um banco de dados

Enviado: Seg Jul 13, 2015 10:41 pm
por Edcronos
Sobre o MySQL já tinha lido, e caso se queira usar a versão gratuita comercialmente tem que passar o codigo de seu projeto, assim como outros que vi
por isso mesmo a escolha pelo Postgree que tem um tipo de licença livre até para distribuição junto de projeto comercial

Lógica de Programação, provavelmente já tenho as bases

Programação Orientada a Objetos, esse para mim é o maior desafio,
pelo que vi o proprio ADO que é necessário para conectar ao banco de dados é em cima de disso, então não tem nem como fugir.
para mim o problema é lembrar os nomes das funções, normalmente eu faço as mesmas coisas usando projetos proprios e nomes que eu lembre

Modelagem de Dados Relacional já tinha lido a respeito
Linguagem SQL para banco de dados não tem nem como fugir

mas como falei é tanta coisa que se quer e tão pouco tempo, mas vou aprendendo aos poucos assim como foi com o vba

o pc que montei instalei um win em um hd e vou escolher um linux para instalar em outro por motivos de comparação
vou dar uma olhada no vb6, apesar de achar que é a mesma coisa do basic

Tenho que sair do vicio de macros de deslocamento, já fiz tantos tipos quue devo ter até algum que deita os dados e ainda coloca para dormir :P

Re: excel e macro que cria e controla um banco de dados

Enviado: Sex Jul 31, 2015 1:47 pm
por Edcronos
Ola
acabei dando uma parada no aprendizado
mas é pq estou tentando fazer uma adequação na minha planilha e adicionar outras coisas

agora estou agarrado com matemática básica,
fiz um filtro que pega valores específicos de qualquer parte da pasta de trabalho

mas não estou conseguindo fazer a totalização dos resultados,
e pior que não sei nem por onde começar

mas assim que resolver a questão volto para o banco de dados

até.

Re: excel e macro que cria e controla um banco de dados

Enviado: Sáb Ago 22, 2015 2:09 am
por Edcronos
estou tentando entender o funcionamento de arrays no postgresql para poder tentar migrar minhas aplicações

mas é bem confuso
como falei quero usar o banco de dados para otimizar e proteger o meu projeto
o escel seria apenas de interface o controle podendo conter dados recentes de comparação e informação
provavelmente o postgresql uma senha para uso e outra de administrador "nem sei ainda".

mas a abordagem do funcionamento das funções são um tanto confusas
ao mesmo tempo estou tentando entender os dados da bolsa para montar o banco de dados para testar a aplicação

Re: excel e macro que cria e controla um banco de dados

Enviado: Sáb Ago 22, 2015 8:09 pm
por Mikel Silveira Fraga
Edcronos, boa noite.

Cara, bem interessante esse projeto que esta tentando fazer e é isso mesmo, tentando que se aprende.

Realmente nunca trabalhei com o Postgree SQL, mas a base de funcionamento é a mesma do MySQL e SQL Server.

Em relação as funções do Sql, eu já postei aqui e volto a indicar o Curso SQL Completo da Softblue. Fiz o curso e é excelente, além de ser gratuito.

Ainda quero pegar o Postgree SQL para testar. Fazer uma análise de desempenho dele (local, rede intranet e remoto/internet), velocidade de resposta e todo o resto. Quando comprar o Raspberry Pi, vou instalar junto do Linux e ver como se comporta.

Bem cara, tenha um excelente final de semana por ai e se cuida. Conversamos mais durante a semana.

Re: excel e macro que cria e controla um banco de dados

Enviado: Sáb Ago 22, 2015 9:10 pm
por Edcronos
Cara o problema é conciliar o aprendizado de nova ferramenta e as varias ideias para aplicar na planilha
para ter ideia eu nunca tinha usado o listbox
e fui fazer um formulario para visualizar outras areas e outros dados da planilha
e como falei a planilha é toda dinâmica então eu tinha que ajustar o tamanho da userform de manira automática de acordo com a quantidade de colunas largura delas e se estava ou não visível
fiz mas achei o listbox muito chocho
pensei no listview mas como era somente para visualizar acabei usando caixa de imagem e captura de range e formatação condicional que já tem na planilha para melhorar o visual

e sabe como é, ideia puxa ideia e acabei adicionando uma busca de valores no setor escolhido e setas para navegar no setor com varredura por cod ou por valor, daí adicionei outra caixa de imagem para visualizar outro setor e area que esteja relacionado

Código: Selecionar todos


Private Sub Ti_Num_Change()
Inicio
    If Cod_Num.Value <> "" Then
        Call SetorL(sety_ory.Value, Plan_Ory.Value)
        ldd = (Cells(Rows.Count, Ti).End(xlUp).Row - Cells(Rows.Count, Ti).End(xlUp).Value) + Sort_Num.Value
        Cells(5, Cd).Value2 = Cells(ldd, Cd).Value2
        cwid = 120
        For c = Cells(1, Ti).Column To Cells(1, Fc).Column
            If Columns(c).Hidden = False Then cwid = cwid + (Columns(c).Width * 1.2)
        Next
          Final
        Call insereimagem(Me.Image1, Sheets(Plan_Ory.Value).Range(Ti & ldd - 3 & ":" & Fc & ldd + 3))
        If fsdfdsf.Value <> "" Then
        Inicio
            Call SetorL(fsdfdsf.Value, Plan_Ory.Value)

            For c = Cells(1, Ti).Column To Cells(1, Fc).Column
                If Columns(c).Hidden = False Then cwid = cwid + (Columns(c).Width * 1.2)
            Next
            Lista_Busca.Width = cwid '* 1.2
            Final
            Call insereimagem(Me.Image2, Sheets(Plan_Ory.Value).Range(Ti & ldd - 3 & ":" & Fc & ldd + 3))
            
        End If
        Me.Image2.Left = 114 + Me.Image1.Width + 3
    End If

End Sub
como a caixa de imagem tem a opção de se auto ajustar precisei apenas me preocupar com a userfor

e para colocar a range nas caixas de imagem fiz essa macro

Código: Selecionar todos

Private Sub insereimagem(Objet As Object, Rango As Range)

    Dim PLt As Worksheet
    Rango.CopyPicture xlScreen, xlBitmap
    Set PLt = Rango.Worksheet
    With PLt.ChartObjects.Add(0, 0, Rango.Width, Rango.Height)
        .Chart.Paste
        .Chart.Export ThisWorkbook.Path & "\imagew.gif"
        .Delete
    End With
    Objet.Picture = LoadPicture(ThisWorkbook.Path & "\imagew.gif")
End Sub
esse pode servir para outras pessoas já que funciona por referencia tanto da range como do objeto "caixa de imagem"
a busca de valores eu embuti nos controles de navegação

depois disso tudo achei muito lento e estou fazendo uma macro para subdividir a aba por linhas para listar os dados que se quer

Re: excel e macro que cria e controla um banco de dados

Enviado: Dom Ago 23, 2015 12:40 am
por Edcronos
acho que não vou poder trabalhar com o banco de dados do jeito que eu quero
isso pq não entendi o funcionamento dos array's
e eu gosto de varrer a array do meu jeito
tipo essa macro que organiza os setores por valor crescente, decrescente ou desloca apenas as linha que tenha certo valor

Código: Selecionar todos


Sub OrdenaARRAY(ByVal cres1_decre2 As Byte, Optional ByVal Valor_vai_esqueda As Variant)
    Dim a As Variant, b As Variant, inC As Long, i As Long, Ci1 As Long, Cf1 As Long
    func = cres1_decre2
    If Limit = 1 Then Exit Sub
    If Valor_vai_esqueda <> "" Then X = Valor_vai_esqueda * 1

    Lfim = UBound(ColunO, 1): TCo = UBound(ColunO, 2)
    Ci1 = 4    ' coluna inicial de dados da array

    '-------------------------------------------------------------------------(inicio do loop )
    If func > 2 Then
        For L = 1 To Lfim
            If func = 3 Then    ' ---<<----( ORDEM POR VALOR X)---0
                Cx = Ci1
                For i = Ci1 To TCo
                    a = ColunO(L, i)
                    If a = X Then Cx = i
                Next
            End If
            If func = 4 Then    ' ---<<----( ORDEM CRECENTE )---0
                Y = ColunO(L, Ci1)
                Cx = Ci1
                For i = Ci1 + 1 To TCo
                    a = ColunO(L, i)
                    If a < Y Then Y = a: Cx = i
                Next
            End If

            If Cx > 4 Then
                For QL = 1 To Cx - Ci1
                    a = ColunO(L, Ci1)
                    For cl = Ci1 To TCo - 1
                        ColunO(L, cl) = ColunO(L, cl + 1)
                    Next
                    ColunO(L, TCo) = a
                Next
            End If
        Next
    End If
    '-------------------------------------------------------------------------------------------------

    If func = 1 Then    ' ---<<----( ordena valor Crescente)---0
        For lx = 1 To Lfim
            inC = Ci1:
            i = inC + 1
            Do
                a = ColunO(lx, inC): b = ColunO(lx, inC + 1)
                If a > b Then
                    ColunO(lx, inC) = b: c = a
                    ColunO(lx, inC + 1) = c
                    If inC > Ci1 Then inC = inC - 1
                Else
                    inC = i: i = i + 1
                End If
            Loop Until inC = TCo
        Next
    End If
    '----------------------------------------------------------------------------------------------------


End Sub
fora os filtros, junção e desmembramento de setores, comparações, deslocamentos ...

para mim varrer o array por linhas e colunas "Array(Linha,Coluna,Plano)"
é muito mais logico do que usar comandos já prontos

Re: excel e macro que cria e controla um banco de dados

Enviado: Sex Ago 28, 2015 8:12 pm
por Edcronos
busquei mas a maqueira que eu sei e gosto de trabalhar com arrays pelo visto não é possível,
isso pq acho que é tudo voltado a objetos
mas vou implementar o banco de dados e nele apenas colocar filtragem padrão para trazer os dados para a planilha
com o tempo vou pegando o jeito. "antes de morrer eu disponibilizo o projeto, ( isso se descobrir quando vai ser :P)"

Achei algo aqui que pode ser interessante para alguma pessoas
https://support.office.com/en-za/articl ... n-ZA&ad=ZA
https://geotecnologias.wordpress.com/20 ... -to-excel/

Re: excel e macro que cria e controla um banco de dados

Enviado: Sáb Ago 29, 2015 7:54 pm
por Mikel Silveira Fraga
Boa noite Edcronos, blz.

O primeiro link que você postou é bem interessante, mas ele é limitado ao uso do Office 2013, já que o Power Query é uma ferramenta exclusivo desta versão.

Agora, o trabalho de conexão com o Postgree SQL, utilizando o Driver ODBC, é excelente pra qualquer tipo de situação, já que o processo padrão de conexão é muito parecido com demais bancos.

Cara, você comentou anteriormente sobre a dificuldade de entendimento das funções do SQL. Eu te digo uma coisa: a vantagem de se trabalhar com ele é otimização de comandos, tanto em termos de escrita de código, como desempenho e velocidade dos comandos.

Outra coisa que costumo a dizer, o ta o próprio Tomas como exemplo, esse desenvolvimento de Excel e VBA é um passo inicial para futuros programadores em outras áreas, seja VB.Net, C#/C++, Delphi, Asp.Net, Java, etc. SQL é padrão para ser utilizado com bancos de dados, e banco de dados são fundamentais para qualquer outra linguagem de programação.

Em resumo, foque não apenas em ser bom no VBA, mas foque em melhorar sempre seu conhecimento, por menor que pareça.

Excelente final de semana e bons estudos!!!!

Re: excel e macro que cria e controla um banco de dados

Enviado: Sáb Ago 29, 2015 8:04 pm
por Edcronos
sofri tentando achar a maneira certa de conectar ao banco de dados
e pelos foruns afora cada um conseguiu de uma maneira diferente

primeiro segui os passos do site
https://geotecnologias.wordpress.com/20 ... -to-excel/
para instar o driver ODBC para PostgreSQL

o odbcad32.exe tem tanto no
C:\Windows\System32
como tem no
C:\Windows\SysWOW64
mas em SysWOW64 o odbcad32 lista outras coisas até do próprio office, isso leva a crer que é o local padrão
com isso o excel é capaz de se conectar ao banco de dados e importar as tabelas

mas no vba é que foi dificil, cada lugar informa uma maneira diferente
apesar de estar com um pc para servidor já montado como iniciante eu fui na configuração que mais se encontra pela net

eu tive que testar um por um e tentar minhas próprias maneiras até conseguir me conectar ao banco

para a instalação com configuração padrão do postgres
cn.Open "Driver={PostgreSQL Unicode};Dsn=my_system_dsn;Server=localhost;port=5432;
a parte em vermelho foi crucial e a mais difícil e cada lugar informa de maneira diferente tentei até usar referencia oledb

Código: Selecionar todos

Dim cn As ADODB.Connection
Dim cmd As ADODB.Command, RS As ADODB.Recordset


Sub conecta_sql()
    Set cn = New ADODB.Connection
    cn.Open "Driver={PostgreSQL Unicode};Dsn=my_system_dsn;Server=localhost;port=5432;" & _
     "Database=postgres;" & _
     "Uid=postgres;" & _
     "Pwd=senha"
End Sub

Código: Selecionar todos

Sub desconecta_sql()
cn.Close
End Sub
Uid=postgres é o usuário padrão na instalação
Database=postgres é um banco de dados padrão criado na instalação do postgres , eu criei um com nome "teste" pelo pgAdmin do postgres e a conexão tbm foi legal

não sei se esse tipo de drive e conexão vai permitir criar e editar o banco, mas agora que consegui pelo menos me conectar posso dar um passo adiante


Edit:
como sempre...
depois de uma luta danada tentando fazer funcionar e nada do que se acha dar certo
e depois conseguir por conta própria, vai e aparece um site com algo funcional...
e ainda com um extra para outros bancos de dados
http://pragmateek.com/using-an-access-m ... -from-vba/

excel e macro, cria e controla um banco de dados[RESOLVIDO]

Enviado: Dom Ago 30, 2015 4:01 am
por Edcronos
Depois de uns testes creio que o topico está resolvido

1º instalar o driver ODBC para PostgreSQL
é só seguir o tutorial da pagina
https://geotecnologias.wordpress.com/20 ... -to-excel/

para conectar algo assim

Código: Selecionar todos

Dim cn As ADODB.Connection


Sub Conecta_Banco(Optional ByVal Nome_banco As String, Optional ByVal Nome_usuario As String, Optional ByVal Senha_Usuario As String)
    If Nome_banco = "" Then Nome_banco = "postgres"
    If Nome_usuario = "" Then Nome_usuario = "postgres"
    If Senha_Usuario = "" Then Senha_Usuario = "a1b2c3"
    
    Set Cn = New ADODB.Connection
    dbConnectStr = "Driver={PostgreSQL Unicode};Dsn=my_system_dsn;Server=localhost;port=5432;" & _
            "Database=" & Nome_banco & _
            ";Uid=" & Nome_usuario & _
            ";Pwd=" & Senha_Usuario
    Cn.Open dbConnectStr
End Sub
para criar novo usuario e senha algo assim

Código: Selecionar todos

Sub Criar_Usuario_SQL(ByVal Nome_usuario As String, Optional ByVal Senha_Usuario As String)
    If Nome_usuario <> "" Then
        If Cn Is Nothing Then Conecta_Banco
        Cn.Execute "CREATE ROLE " & Nome_usuario & " LOGIN PASSWORD " & "'" & Senha_Usuario & "'" & ";"
    End If
End Sub
para criar novo banco algo assim

Código: Selecionar todos

Sub Criar_banco(Optional ByVal Nome_banco As String, Optional ByVal Nome_usuario As String, Optional ByVal Senha_Usuario As String)
    If Nome_banco = "" Then Exit Sub
    If Cn Is Nothing Then Conecta_Banco
    Cn.Execute "CREATE Database " & Nome_banco & " OWNER " & Nome_usuario
End Sub
como pode ver daí para frente é só usar os comandos do SQL,
para isso se tem varios tutoriais pela net
Mikel Silveira Fraga indicou ótimas video aulas "infelizmente para mim não serve (para mim somente escrito)"

claro que sem esquecer o esforço próprio e tbm da imaginação.

Att.