Ir para conteúdo

Arquivado

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

coldcase

adicionando imagem

Recommended Posts

Olá comunidade, venho com mais uma duvida.

 

Tenho um form onde cada registro pode ter um foto.

É o seguinte, tem um campo que leva o caminho da foto e um botão do form, "exibir foto", que roda a foto que está no campo onde tem o caminho.

 

Aí você precisa indicar onde está a foto para que funcione corretamente.

 

Mas aqui no trabalho, estão pedindo para que você indique a foto, mas que o sistema salve essa foto em uma pasta dentro da pasta do sistema e aí sim indique no campo do caminho.

 

Podendo assim, a foto ser adicionada apartir de um disquete ou cd. E depois de adicionada possa ser retirado o cd ou disquete e a foto está lá no sistema.

 

Vou postar como funciona atualmente:

 

O botão que serve para indicar o caminho:

Private Sub cmdModificar_Click() 'diretorio onde estao as imagens	CommonDialog1.InitDir = App.Path	CommonDialog1.DefaultExt = "*.*"	CommonDialog1.ShowOpen	Adodc1.Recordset.Fields("Foto").Value = CommonDialog1.FileNameEnd Sub

E o botão para exibir a foto, caso exista uma foto:

Private Sub cmdExibir_Click()  If Adodc1.Recordset("Foto") <> "" Then  Dim i&  i& = ShellExecute(0, "open", Adodc1.Recordset("Foto"), "", "", SW_SHOW)  Else  MsgBox ("Sem Foto")  End IfEnd Sub

desse jeito só está indicando o caminho. Eu queria que ele salvasse a foto em uma pasta e depois sim a indicasse no caminho. tem como?

Compartilhar este post


Link para o post
Compartilhar em outros sites

deixa eu tentar explicar melhor.

 

Imagem Postada

 

essa eh a aparencia do form.

 

ali embaixo do botão modificar foto, eh o campo com o caminho da foto.

 

e o botão exibir lá em cima, se você clicar, ele exibe a foto (caso tenha uma).

 

eu quero que o programa pegue a foto que você lhe indicar e a salve por conta propria em uma pasta e direcione o caminho para essa foto que ele salvou quando o usuário indica.

 

assim o usuário pode indicar uma foto de disquete e depois tirar o disquete que a foto vai estar adicionada no sistema.

 

como está, o programa só pega o caminho que você indica para a foto e pronto.

se você indicar uma foto do disquete e depois tirar o disquete, ele nao abre.

 

entenderam agora? :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, você vai precisar fazer o seguinte:

Pega esse arquivo de seu caminho atual, que o usuário indicar, e copiá-lo para uma determinada pasta (app.path), para isso você pode usar FSO (o que eu aconselho) ou usar as funções nativas do VB para manusear arquivos, dá uma olhada nesses links:

Usando o FileSystemObject - FSO - Tratando arquivos e diretórios

Visual Basic - Operações com arquivos e diretórios

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi usar o FileCopy pois devido ao meu nivel em vb :D achei mais facil.

 

Private Sub Command13_Click()CommonDialog1.InitDir = App.Path	CommonDialog1.DefaultExt = "*.*"	CommonDialog1.ShowOpen	FileCopy CommonDialog1.FileName, "\\Ainfo_banco\BANCO_DPL\SistemaDPLver.Beta\vistorias\"End Sub
Fiz desse jeito, mas deu erro. Diz Bad File Name or Number

 

A linha em negrito eu arrisquei. Não tem como fazer desse jeito ou eu errei em algo?

 

Se fosse possivel fazer desse jeito, depois eu mandaria o campo "caminho" ler: \\Ainfo_banco\BANCO_DPL\SistemaDPLver.Beta\vistorias\CommonDialog1.FileName

 

Viajei?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse erro está acontecendo pois você não está dizendo o caminho completo de destino, que deve incluir não só o caminho mas também o nome (podendo ser um novo) do arquivo.Ou seja além, de copiar o arquivo você pode alterar o nome dele. É igual se faz via dos na hora de mover arquivos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao eu fiz assim:

 

Private Sub Command13_Click()CommonDialog1.InitDir = App.Path	CommonDialog1.DefaultExt = "*.*"	CommonDialog1.ShowOpen	FileCopy CommonDialog1.FileName, "\\Ainfo_banco\BANCO_DPL\SistemaDPLver.Beta\vistorias\CommonDialog1.FileName"End Sub
eu queria que ele copiasse para essa pasta com o mesmo nome do arquivo indicado.

mas adivinha. ele criou um arquivo com nome CommonDialog1.FileName

 

existe algum modo de fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro você tem que lembrar a propriedade FileName contém não só o nome do arquivo como todo o diretório dele, ou seja você terá que tratá-la.

O que você está fazendo de errado é que está jogando o "commondialog1.filename" como texto (note que está dentro das aspas) por ele ser uma parte do código e não uma string você tem que concatená-lo assim:

FileCopy CommonDialog1.FileName, "\\Ainfo_banco\BANCO_DPL\SistemaDPLver.Beta\vistorias\" & nome_do_arquivo

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas se eu colocar dessa maneira:

 

FileCopy CommonDialog1.FileName, "\\Ainfo_banco\BANCO_DPL\SistemaDPLver.Beta\vistorias\" & nome_do_arquivo

 

O sistema vai sempre copiar os arquivos com o mesmo nome, no caso nome_do_arquivo.

 

certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu coloquei essa variavel (nome_do_arquivo) só como exemplo, o valor dela pode ser variavel (parece redundância xD).Você pode até mesmo retirar o nome do arquivo da propriedade filename e colocar aí. Isso fica à sua vontade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu sei que nome_do_arquivo é um exemplo..

 

mas eu nao sei o que colocar no lugar para ficar, como posso dizer, "aleatorio".

 

Ou que pelo menos copiasse com o mesmo nome do arquivo origem.

 

Dá o bizu :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um metodo para não haver nunca nomes iguais, o que você pode fazer é utilizar a data e horário do momento em que você está copiando o arquivo. Daí nunca haverá nomes iguais. (desconsiderando o caso de copiarem duas figuras no mesmo segundo xD)

 

Para fazer isso você pega só os números do dia, mÊs, ano, hora, minuto e segundo.

 

E para uma maior segurança você pode fazer uma verificação se o arquivo a já existe daí alterar mais ainda o nome.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um metodo para não haver nunca nomes iguais, o que você pode fazer é utilizar a data e horário do momento em que você está copiando o arquivo. Daí nunca haverá nomes iguais. (desconsiderando o caso de copiarem duas figuras no mesmo segundo xD)

 

Para fazer isso você pega só os números do dia, mÊs, ano, hora, minuto e segundo.

 

E para uma maior segurança você pode fazer uma verificação se o arquivo a já existe daí alterar mais ainda o nome.

Isso seria perfeito!

 

Mas nao tenho a minima ideia de como fazer :wacko:

 

Nao tem nenhum artigo pra me indicar não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Naqueles artigos que te passei anteriormente fala sobre como fazer essa verificação.

 

Para pegar o dia, mês, ano e etc é só usar as funções:

Day(date)Month(date)Year(date)Hour(now)Minute(now)Second(now)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou encontrando muitas dificuldades em concluir meu projeto..

 

Eu pensei em dar escolha ao usuário no nome do arquivo na hora da copia, então fiz assim:

 

Private Sub Command13_Click()CommonDialog1.InitDir = App.Path	CommonDialog1.DefaultExt = "*.jpg"	CommonDialog1.ShowOpen		datPrimaryRS.Recordset.Fields("temp").Value = CommonDialog1.FileName	CommonDialog1.InitDir = App.Path	CommonDialog1.DefaultExt = "*.jpg"	CommonDialog1.ShowSave	FileCopy datPrimaryRS.Recordset("temp"), CommonDialog1End Sub

tmb tentei assim:

 

Private Sub Command13_Click()CommonDialog1.InitDir = App.Path	CommonDialog1.DefaultExt = "*.jpg"	CommonDialog1.ShowOpen		CommonDialog2.InitDir = App.Path	CommonDialog2.DefaultExt = "*.jpg"	CommonDialog2.ShowSave	FileCopy CommonDialog1, CommonDialog2End Sub

Mas ele deu esse erro:

 

Run-Time Error '394':Property is write-only

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro é nessa linha:

 

FileCopy CommonDialog1, CommonDialog2
?

 

Se for, tenta colocar a propriedade filename das CommonDialogs e não só elas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o erro eh nessa linha mesmo..

 

coloquei ela assim:

FileCopy CommonDialog1.FileName, CommonDialog2.FileName

agora ta dando erro de Bad file name or number

 

ta f***! hehe

 

opa.. agora deu!

mas eu to tendo que digitar a extensão na hora de salvar.. isso nao eh bom.

 

tem algum jeito dele copiar já na extensão que era antes (arquivo origem)??

eu nao quero que o usuário tenha que escrever .jpg ou .gif no final do nome do arquivo que ele quer salvar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode pegar a extensão assim:

 

ext = right(CommonDialog1.FileName,len(CommonDialog1.FileName) - strrev(CommonDialog1.FileName,".")+1)
Lembrando que se o arquivo inicial não tiver extensão esse esquema quebra. Por tanto você deve fazer uma verificação antes. Tudo isso partindo da idéia que você não está utilizando FSO.

 

Em FSO:

fso.GetExtensionName("caminho_do_arquivo")

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz dessa forma:

 

FileCopy CommonDialog1.FileName, CommonDialog2.FileName

que permitiu ao usuário escolher onde salvar o arquivo. Mas o pessoal aqui não gostou.

 

Eles querem que o usuário nao tenha essa escolha.. que o usuário soh indique o arquivo no caso da common1 e o sistema o copie para uma pasta já estabelecida (\\Ainfo_banco\BANCO_DPL\SistemaDPLver.Beta\vistorias\) com nome aleatório de forma a nao permitir repetição nos nomes. Poderia ser por data, hora, enfim...

 

Mas estou encontrando muitas dificuldades em entender em que ponto no codigo vou usar Day(date), Month(date), Hour(now), etc, para copiar o arquivo com esses nomes. E tmb de que forma vou fazer para que campos como "FOTO1", "FOTO2", etc recebam o caminho exato, inclusive o nome da copia.

Antes era assim:

datPrimaryRS.Recordset.Fields("FOTO2").Value = CommonDialog2.FileName
Mas nao vamos ter mais o Common2

 

Sei que estou pedindo demais, mas deem uma força aí por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize variaveis, para não ter perigo de você pegar horários diferentes, na hora de você salvar o arquivo e incluir no BD:

 

'sendo a commondialog1 onde o usuário qual arquivo será copiadoextensao = right(CommonDialog1.FileName,len(CommonDialog1.FileName) - instrrev(CommonDialog1.FileName,".")+1)nome_do_arquivo_de_destino = "\\Ainfo_banco\BANCO_DPL\SistemaDPLver.Beta\vistorias\" & day(date) & month(date) & year(date) & hour(now) & minute(now) & second(now) & "." & extensaoFileCopy CommonDialog1.FileName, nome_do_arquivo_de_destino'salva no bd como caminho do arquivo final a variavel nome_do_arquivo_de_destino

[/code]

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.