GD Access    GD Access    Grupo de Discussão  Ir para Categorias  Grupos técnicos  Ir para Fóruns  Access    Obter no nome da pasta e sub-pasta
Go
Novo
Procurar
Notificar
Ferramentas
Responder
  
-star Rating Vote!  Login/Cadastrar 
Programador Sênior

postado
E aí galera, sou eu novamente.
Seguinte:
Sei como obter o caminho completo de um determinado arquivo.
Ex: "C\Documents and Settings\Pasta1\pasta2\Pasta3\Arquivo".
O que preciso é se alguém tem alguma função ou coisa parecida onde (conforme exemplo acima) eu possa obter separadamente, ou seja no meio da string o nome da:
Pasta1;
Pasta2;
Pasta3...no caso de houverem várias subpasta entenderam.
Em linha gerais, quando eu achar um arquivo quero dizer que está no diretório tal e pasta tal.
Olhei os tópicos a respeito mais a maioria informam o que já sei (endereco completo).
Espero ter sido claro.
Fico no aguardo,
Edson
 
Postagens: 370 | Registrado: 30 August 2005Reply With QuoteReport This Post
Gerente

Figura de  OsmarJr
postado Hide Post
Pegue o caminho completo em uma string e use o InStr([start, ]string1, string2[, compare]) para determinar os "pedaços".

Lem bre que start é a posição inicial da busca.


========================================================
O maior prazer de um homem inteligente é bancar o idiota diante de um idiota que banca o inteligente.

Exemplos - Esnips
Grupo DicasAccess
 
Postagens: 3365 | Localização: Curitiba - PR | Registrado: 08 March 2001Reply With QuoteReport This Post
Programador Sênior

postado Hide Post
quote:
InStr([start, ]string1, string2[, compare])

Como assim Osmar...Não entendi, poderia me explicar melhor? Desculpe a ignorância.

Gto,
Edson
 
Postagens: 370 | Registrado: 30 August 2005Reply With QuoteReport This Post
Gerente

Figura de  OsmarJr
postado Hide Post
Da Ajuda do Access:
quote:
Função InStr

Retorna uma Variant (Long) que especifica a posição da primeira ocorrência de uma seqüência de caracteres dentro de outra.

Sintaxe

InStr([start, ]string1, string2[, compare])

A sintaxe da função InStr tem os seguintes argumentos:

Parte Descrição
start Opcional. Expressão numérica que define a posição inicial de cada pesquisa. Se omitido, a pesquisa iniciará na posição do primeiro caractere. Se start contiver Null, ocorrerá um erro. O argumento start será necessário, se compare for especificado.
string1 Obrigatória. Expressão de seqüência sendo pesquisada.
string2 Obrigatória. Expressão de seqüência de caracteres procurada.
compare Opcional. Especifica o tipo de comparação de seqüência de caracteres. Se compare for Null, ocorrerá um erro. Se compare for omitido, a configuração Option Compare determinará o tipo de comparação. Especifique um LCID (LocaleID) válido para usar regras específicas da localidade na comparação.

Definições

As configurações do argumento compare são as seguintes:

Constante Valor Descrição
vbUseCompareOption -1 Executa uma comparação usando a configuração da instrução Option Compare.
vbBinaryCompare 0 Executa uma comparação binária.
vbTextCompare 1 Executa uma comparação textual.
vbDatabaseCompare 2 Somente Microsoft Access. Efetua uma comparação, com base nas informações existentes no banco de dados.



Valores retornados

Se A InStr retornará
string1 tiver comprimento zero 0
string1 for Null Null
string2 tiver comprimento zero start
string2 for Null Null
string2 não for encontrado 0
string2 for encontrado dentro de string1 A posição em que a correspondência foi encontrada
start > string2 0



Comentários

A função InStrB é usada com os dados de bytes contidos em uma seqüência de caracteres. Em vez de retornar a posição de caractere da primeira ocorrência de uma seqüência de caracteres dentro de outra, InStrB retorna a posição de byte.


Exemplo da função InStr
Este exemplo usa a função InStr para retornar a posição da primeira ocorrência de uma seqüência de caracteres dentro de outra.

Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP" ' Seqüência de caracteres a ser pesquisada.
SearchChar = "P" ' Procurar por "P".

' Uma comparação de texto iniciando na posição 4. Retorna 6.
MyPos = Instr(4, SearchString, SearchChar, 1)

' Uma comparação binária iniciando na posição 1. Retorna 9.
MyPos = Instr(1, SearchString, SearchChar, 0)

' A comparação é binária, como padrão (o último argumento é omitido).
MyPos = Instr(SearchString, SearchChar) ' Retorna 9.

MyPos = Instr(1, SearchString, "W") ' Retorna 0.


========================================================
O maior prazer de um homem inteligente é bancar o idiota diante de um idiota que banca o inteligente.

Exemplos - Esnips
Grupo DicasAccess
 
Postagens: 3365 | Localização: Curitiba - PR | Registrado: 08 March 2001Reply With QuoteReport This Post
Programador Sênior

postado Hide Post
Osmar,
Muitíssimo obrigado pela presteza, ontem mesmo foi na ajuda do access e verifiquei o que voce postou. Permaneceu a seguinte dúvida:

Dim SearchString, SearchChar, MyPos
SearchString = "F:\Nova pasta\Nova pasta1\Nova pasta (2)" ' Seqüência de caracteres a ser pesquisada.
SearchChar = "\" ' Procurar por "P".

MyPos = InStr(1, SearchString, SearchChar, 0)
porque que retorna 3, não deveria retornar 14?

Sds,
Edson

This message has been edited. Last edited by: Edson Alexan,
 
Postagens: 370 | Registrado: 30 August 2005Reply With QuoteReport This Post
Coordenador

Figura de  Cláudio Más
postado Hide Post
A função InStr retorna a posição da primeira ocorrência do caracter procurado no texto, que no exemplo é mesmo a posição 3.


**************************
Rio de Janeiro nas Olimpíadas 2016
 
Postagens: 2443 | Localização: Rio de Janeiro | Registrado: 16 September 2004Reply With QuoteReport This Post
Programador Sênior

postado Hide Post
SearchString ="XXpXXpXXPXXP" ' Seqüência de caracteres a ser pesquisada.
SearchChar = "P" ' Procurar por "P".

MyPos = Instr(1, SearchString, SearchChar, 0)Retorna 9.

Conforme exemplo acima, pelo que entendi Uma comparação binaria. Não ira informar qual posição a letra "p" aparece pela 2ª vez a comecar da posição 1?

Entao porque quando digo:

SearchString = "F:\Nova pasta\Nova pasta1\Nova pasta (2)"
SearchChar = "\"

MyPos = InStr(1, SearchString, SearchChar, 0)
retorna 3 se deveria retornar 14?
 
Postagens: 370 | Registrado: 30 August 2005Reply With QuoteReport This Post
Gerente

Figura de  OsmarJr
postado Hide Post
De forma bem grosseira:
Dim cnt1 As Integer
Dim cnt2 As Integer
Dim str1 As String
Dim str2 As String
Dim SuaString As String

    SuaString = "C:\Pasta0\Pasta1\Pasta2\SeuBanco.mdb"
    cnt2 = 1
    cnt1 = InStr(cnt2, "\", SuaString) ' Dá a posição do primeiro "\"
    str1 = Mid(SuaString, 1, cnt1 -1) ' Pega o C:
    cnt2 = cnt1 + 1 ' Primeira posição depois do primeiro "\"
    cnt1 = InStr(cnt2, "\", SuaString) ' Pega a posição do segundo "\"
    str2 = Mid(SuaString, cnt2 +1, cnt1 - 1) ' Pega o Pasta0
    ... Dá para melhorar bastante



O cnt1 vai conter a posição do próximo "\" e o cnt2 vai ter a posição a partir da qual o InStr deve procurar.


========================================================
O maior prazer de um homem inteligente é bancar o idiota diante de um idiota que banca o inteligente.

Exemplos - Esnips
Grupo DicasAccess
 
Postagens: 3365 | Localização: Curitiba - PR | Registrado: 08 March 2001Reply With QuoteReport This Post
Programador Sênior

postado Hide Post
Grato a todos!
Pelo percebei agora acho que com essa postagem do Osmar vai funcionar.

Obrigado!

Edson
 
Postagens: 370 | Registrado: 30 August 2005Reply With QuoteReport This Post
Coordenador

Figura de  Cláudio Más
postado Hide Post
quote:
SearchString ="XXpXXpXXPXXP" ' Seqüência de caracteres a ser pesquisada.
SearchChar = "P" ' Procurar por "P".

MyPos = Instr(1, SearchString, SearchChar, 0)Retorna 9.

Só para reforçar, se a busca (SearchChar) for feita por "p" (p minúsculo), retorna 3.


**************************
Rio de Janeiro nas Olimpíadas 2016
 
Postagens: 2443 | Localização: Rio de Janeiro | Registrado: 16 September 2004Reply With QuoteReport This Post
Programador Sênior

postado Hide Post
Fala aí galera, para quem precisar encontrei a solução no site do nosso amigo JR, conforme abaixo:

Como obter o diretório, o caminho completo ou o somente o nome do mdb?


Veja os três exemplos de código abaixo:


A rotina abaixo exibe o Caminho (Path) completo do MDB:

Function GetNamePath()
Dim MyDB As DAO.Database
' Define MyDB como o banco de dados atual.
Set MyDB = DBEngine.Workspaces(0).Databases(0)
GetNamePath = MyDB.Name
End Function

Essa função roda em todas as versões a partir do Access 2.0, contanto que se referencie a biblioteca DAO correspondente no menu Ferramentas - Referências. Por exemplo, use DAO 3.5 para as versões 95 e 97; e DAO 3.6 para a versão 2000.

Para testar o código, abra a Janela Depurar ou Verificação imediata (CTRL+G), digite a expressão abaixo e tecle ENTER:

?GetNamePath()


A função abaixo retorna somente o diretório do MDB:

Function ExtraiPasta(caminho As String) As String
'Cortesia de JR - http://www26.brinkster.com/accessjr/
'Retorna a pasta de um arquivo cujo caminho foi informado.
Dim arquivo As String
If Len(caminho) > 0 Then
arquivo = Dir(caminho)
ExtraiPasta = Left(caminho, Len(caminho) - Len(arquivo))
End If
End Function

Ou:

Function ExtraiPasta(caminho As String) As String
'Cortesia de JR - http://www26.brinkster.com/accessjr/
'Retorna a pasta de um arquivo cujo caminho foi informado.
On Error Resume Next
Dim I As Integer, Nome As String

For I = 1 To Len(caminho)
Nome = Right(caminho, I)
If InStr(Nome, "\") Then
ExtraiPasta = StrConv(Left$(caminho, Len(caminho) - Len(Nome)), _
vbProperCase)
Exit For
End If
Next I
If Err <> 0 Then MsgBox Err.Description
End Function


A função abaixo retorna somente o nome do arquivo MDB:

Function ExtraiNomeBD(caminho As String) As String
' Desenvolvida por João Rodrigues (JR)
' http://www26.brinkster.com/accessjr/
Dim I As Integer, Nome As String
On Error Resume Next

For I = 1 To Len(caminho)
Nome = Right(caminho, I)
If InStr(Nome, "\") <> 0 Then
ExtraiNomeBD = StrConv(Right(Nome, Len(Nome) - 1), _
vbProperCase)
Exit For
End If
Next I

If Err <> 0 Then MsgBox Err.Description

End Function

A todos o Meu muito obrigado!!!

Sds,
Edson
 
Postagens: 370 | Registrado: 30 August 2005Reply With QuoteReport This Post
  Powered by Social Strata  
 

GD Access    GD Access    Grupo de Discussão  Ir para Categorias  Grupos técnicos  Ir para Fóruns  Access    Obter no nome da pasta e sub-pasta

©