Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jbhelp

inserir arquivo no access

Recommended Posts

Galera estou desenvolvendo um sistema de controle de chamados. Bom criei a rotina, mas claro ainda não funciona. Alguém teria uma rotina destas. Basicamente tenho um campo texto e dois botões um localizar e o outro anexar.

 

1º Clicar no botão localizar

2ª Abrir a API do windos de abrir arquivo.

3º Ao selecionar o arquivo, o campo texto receberá o caminho do arquivo

4º Ao clicar no botão anexar ele salvará esta arquivo em um diretório.

5º Ao Consultar o chamado e ter um arquivo em anexo o nome do arquivo ficará um link, para dowload.

 

Se alguém tiver alguma referência, agradeço.

 

jbhelp

 

<dodigo>

Private Sub Comando45_Click()

On Error Resume Next

Dim k, x, NOME, CAMINHO

x = 0

NOME = ""

For k = Len(Forms!LOCALIZAR!CAMINHO) To 1 Step -1

If Mid(Forms!LOCALIZAR!CAMINHO, k, 1) <> "\" Then

NOME = Mid(Forms!LOCALIZAR!CAMINHO, k, 1) & NOME

Else

GoTo 10

End If

Next

 

 

Dim MyStr As String

MyStr = BrowseForFolder(Me.hWnd, _

"LOCAL PARA VINCULAÇÃO")

If Len(MyStr) > 0 Then

If MyStr = "C:\" Then

CAMINHO = MyStr

Else

CAMINHO = MyStr & "\"

End If

End If

 

 

DoCmd.TransferDatabase acLink, "Microsoft Access", "Controle_Chamados", acTable

 

 

 

End Sub

 

Private Sub Comando49_Click()

Dim iNull As Integer

Dim lpIDList As Long

Dim lResult As Long

Dim sPath As String

 

With udtBI

.hWndOwner = hWndOwner

 

 

.ulFlags = BIF_RETURNONLYFSDIRS

End With

 

lpIDList = SHBrowseForFolder(udtBI)

If lpIDList Then

sPath = String$(MAX_PATH, 0)

lResult = SHGetPathFromIDList(lpIDList, sPath)

Call CoTaskMemFree(lpIDList)

iNull = InStr(sPath, vbNullChar)

If iNull Then

sPath = Left$(sPath, iNull - 1)

End If

End If

 

BrowseForFolder = sPath

 

End Function

End Sub

</codigo>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá JB,

 

Vamos às respostas:

 

1º Clicar no botão localizar[/Quote]

 

Private Sub findCommand_Click()

On Error GoTo Err_Anexar

If MsgBox("Deseja importar link do arquivo?", vbQuestion + vbYesNo, strTitle) = vbYes Then

Form_frmArquivo.caminhoText = modFileDialog("xls") 'Atribuir a patch ao campo do form

Else

Exit Sub

End If


Exit_Anexar:
Exit Sub

Err_Anexar:
strMsgErr 'Módulo de tratamento de erro

Resume Exit_Anexar

End Sub[/Code]

 

2ª Abrir a API do windos de abrir arquivo.[/Quote]

 

[Code]Function modFileDialog(strExtFile As String) As String
Dim strCaminho As String

'Rotina padrão para a seleção de arquivos via dialog
Set FD = Application.FileDialog(msoFileDialogFilePicker)

With FD
.InitialFileName = CurrentProject.Path 'Informa o folder padrão
.Filters.Add "Arquivo ." & strExtFile, "*." & strExtFile, 1 'Tipos de arquivo - extensão
.Title = "Selecionar arquivo" 'Header

If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
strCaminho = vrtSelectedItem
Next vrtSelectedItem
End If

End With
Set FD = Nothing

modFileDialog = strCaminho

End Function[/Code]

 

3º Ao selecionar o arquivo, o campo texto receberá o caminho do arquivo[/Quote]

 

[Code]Form_frmArquivo.caminhoText = modFileDialog("xls") 'Atribuir a patch ao campo do form[/Code]

 

* Já incluso no primeiro passo...

 

4º Ao clicar no botão anexar ele salvará esta arquivo em um diretório.[/Quote]

 

*Não acredito que seja necessário nenhuma rotina especial, basta "largar" o arquivo em algum diretório e informar no 2º passo...

 

[Code]5º Ao Consultar o chamado e ter um arquivo em anexo o nome do arquivo ficará um link, para dowload.[/Code]

 

[Code] Shell "explorer.exe " & form_frmArquivo.caminhoText & ".xls" 'Abrir arquivo Excel[/Code]

 

*Acredito que uma simples "chamada" já seja o suficiente...

 

 

 

PS: também dê uma olhada neste link, talvez ajude em alguma outra ideia...

 

Link

 

 

 

Sem mais,

 

Julien Sorel

Compartilhar este post


Link para o post
Compartilhar em outros sites

Julien tu é o cara ,muito obrigado pela força, estou testando.

Só para entender bem o quadro. este sistema será para controle de chamados aqui no nosso setor de TI.

Os users da empresa nos ligarão e então abriremos chamados, como temos acesso remoto as vezes tiramos print dos erros

Salvamos em jpg e anexamos estes arquivos, no sistema.

A minha idéia é deixar o back_End do sistema em de nossos servidore e deixar nas máquinas de meus colegas (4 users) somente os Front_Ends. Acredito que fica melhor para se trabalhar, base única. Já desenvolvi outros sistemas assim. Mas nunca trabalhei com arquivos.

Ai neste caso que fiquei com dúvida no botão anexar terei que jogar este arquivo em um diretório, mas no server.

Se puder dar uma ajuda nesta rotina te agradeço.

 

Depois se desejar posso te mandar uma cópia do sistema.

Abraço JB.

 

 

 

Olá JB,

 

Vamos às respostas:

 

1º Clicar no botão localizar[/Quote]

 

Private Sub findCommand_Click()

On Error GoTo Err_Anexar

If MsgBox("Deseja importar link do arquivo?", vbQuestion + vbYesNo, strTitle) = vbYes Then

Form_frmArquivo.caminhoText = modFileDialog("xls") 'Atribuir a patch ao campo do form

Else

Exit Sub

End If


Exit_Anexar:
Exit Sub

Err_Anexar:
strMsgErr 'Módulo de tratamento de erro

Resume Exit_Anexar

End Sub[/Code]

 

2ª Abrir a API do windos de abrir arquivo.[/Quote]

 

[Code]Function modFileDialog(strExtFile As String) As String
Dim strCaminho As String

'Rotina padrão para a seleção de arquivos via dialog
Set FD = Application.FileDialog(msoFileDialogFilePicker)

With FD
.InitialFileName = CurrentProject.Path 'Informa o folder padrão
.Filters.Add "Arquivo ." & strExtFile, "*." & strExtFile, 1 'Tipos de arquivo - extensão
.Title = "Selecionar arquivo" 'Header

If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
strCaminho = vrtSelectedItem
Next vrtSelectedItem
End If

End With
Set FD = Nothing

modFileDialog = strCaminho

End Function[/Code]

 

3º Ao selecionar o arquivo, o campo texto receberá o caminho do arquivo[/Quote]

 

[Code]Form_frmArquivo.caminhoText = modFileDialog("xls") 'Atribuir a patch ao campo do form[/Code]

 

* Já incluso no primeiro passo...

 

4º Ao clicar no botão anexar ele salvará esta arquivo em um diretório.[/Quote]

 

*Não acredito que seja necessário nenhuma rotina especial, basta "largar" o arquivo em algum diretório e informar no 2º passo...

 

[Code]5º Ao Consultar o chamado e ter um arquivo em anexo o nome do arquivo ficará um link, para dowload.[/Code]

 

[Code] Shell "explorer.exe " & form_frmArquivo.caminhoText & ".xls" 'Abrir arquivo Excel[/Code]

 

*Acredito que uma simples "chamada" já seja o suficiente...

 

 

 

PS: também dê uma olhada neste link, talvez ajude em alguma outra ideia...

 

Link

 

 

 

Sem mais,

 

Julien Sorel

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá JB,

 

Segue rotina para "duplicar" arquivo:

 

Private Sub copyCommand_Click()

Call modCopyFile(txtDir) 'txtDir = patch de orgigem do arquivo

End Sub
'--------------------------
Sub modCopyFile(strDirOrg As String)
Dim strDirDst As String, strNmFile As String

strNmFile = "NomeArquivo" & Right(strDirOrg, 4) 'Nome do arquivo
strDirDst = "C:\NomeFolder\" & strNmFile 'Informar o caminho para o diretório
FileCopy strDirOrg, strDirDst 'Função para duplicar arquivo

MsgBox "Processo realizado com sucesso", vbInformation, C_Title

End Sub[/Code]

 

 

*Apenas atribua o valor da variável strDirDst ao campo que deverá manter o link para o arquivo...

 

 

 

 

Sem mais,

 

Julien Sorel

Compartilhar este post


Link para o post
Compartilhar em outros sites

OPa Julien, me diz uma coisa preciso salvar em duas tabelas como são chamados deixarei em uma tabela somente a última interação o restante ficara em outra, ai pensei o seguinte criei um outro campo chamei de sequencia ou seja nesta segunda tabela havalio se já existe o id do chamado e ai insiro o mesmo id mas pego o campo sequencia e acrecento 01. Mas não esta funcionando, alguma idéia?

Meu código do botão salvar no formuláro chamado.

<código>

 

Private Sub Salvar_Click()

Dim seq As Double

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

 

Set db = CurrentDb()

Set rs = db.OpenRecordset("tinteracao", dbOpenTable)

 

 

If Me.ID_chamado = rs![iD_chamado] Then

seq = rs![sequencia] + 1

DoCmd.SetWarnings False

CurrentDb.Execute ("INSERT INTO tinteracao(ID_chamado, interacao, sequencia) VALUES(Me.id_chamado,Me.evento,seq );")

DoCmd.SetWarnings True

Else

seq = rs![iD_chamado]

DoCmd.SetWarnings False

currentedb.Execute ("INSERT INTO tinteracao(ID_chamado, interacao, sequencia) VALUES(Me.id_chamado,Me.evento, seq);")

DoCmd.SetWarnings True

End If

 

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

 

Exit_Salvar_Click:

Exit Sub

 

Err_Salvar_Click:

MsgBox Err.Description

Resume Exit_Salvar_Click

 

End Sub

 

</codigo>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá JB,

 

Que tal um "sub-tabela", vinculada pelo ID...?!

 

A tabela "original" receberá a última interação e a sub receberá todas as demais, através de um Insert simples...

 

Algo como: form com campos sem vínculo com a table e cada vez que forem preenchidos, a table principal assume estes valores e a sub acrescenta uma linha - atravéns de uma query...

 

INSERT INTO tblDetalhesDoPedido ( NrPedido, IDProduto, QtdeVendida )
SELECT
[forms]![frmBlaBlaBla]![peditoText] AS NrPedido,
[forms]![frmBlaBlaBla]![idProdutoTExt] AS IdProduto,
[forms]![frmBlaBlaBla]![produtoText] AS IdProduto[/Code]

 

 

 

 

PS: sempre uso rotinas SQL porque acho as conexões com o banco e a "leitura" das tabelas muito trabalhosos...

 

 

Sem mais,

 

Julien Sorel

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.