Campo Varchar com Path para imagem
Bom dia, pessoal
Tenho um banco em postgreSQL. Uma tabela armazena o codigo do cliente e o caminho para o arquivo com a imagem desse cliente.
O problema eh que qd o programa grava o caminho para a foto, na tabela, ele perde alguns caracteres.
Por exemplo. Se o programa passa a string c:\fotos\img001.jpg, o banco grava como cfotos@001.jpg. Ou seja, ele faz um rebosteio só! A base esta codificada como SQL_ASCII, mas ja testei com o UTF8 e deu o mesmo problema.
Alguem sabe como eu posso gravar um path para um arquivo no banco sem que ele perca os caracteres?
Abraços
Silvio Ribeiro
Tenho um banco em postgreSQL. Uma tabela armazena o codigo do cliente e o caminho para o arquivo com a imagem desse cliente.
O problema eh que qd o programa grava o caminho para a foto, na tabela, ele perde alguns caracteres.
Por exemplo. Se o programa passa a string c:\fotos\img001.jpg, o banco grava como cfotos@001.jpg. Ou seja, ele faz um rebosteio só! A base esta codificada como SQL_ASCII, mas ja testei com o UTF8 e deu o mesmo problema.
Alguem sabe como eu posso gravar um path para um arquivo no banco sem que ele perca os caracteres?
Abraços
Silvio Ribeiro
Silvio Ribeiro
Curtidas 0
Respostas
Andersonpgsql
05/12/2006
Boa tarde...não sei se entendi direito...vc ta usando um código ou um campo edit ou dbedit pra capturar o caminho e salvar??? pois fis aqui com um campo dbedit e com um edit e nos dois casos ficaram serto da mesma forma que digitei no sis ficou no banco???, me desculpe se entendi errado mas se vc puder ser um pouco mais especifico quanto ao erro, talvez algun de nos membro do forum possa te ajudar mais...
GOSTEI 0
Silvio Ribeiro
05/12/2006
Obrigado pelo retorno, Anderson. Tentarei ser mais claro.
Estou usando Delphi 7, PSQL 8.1 e o PostgresDAC para o acesso a dados direto.
No meu form tem um componente Image pra mostrar as fotos e um OpenPictureDialog. Tem um button pra chamar a caixa de dialogo de selecao de imagem. Qd o usuario seleciona a imagem ele pega o OpenPictureDialog1.Filename e joga para o campo pathfotos na tabela FOTOS.
Essa tabela eh composta pelos seguintes campos:
O processo q uso pra gravar no banco eh o seguinte: qd a pessoa selecionou a imagem no openpicturedialog e pressionou o botao ok ai ele grava a foto na tabela:
Fazendo a depuracao nesse trecho, observei que a string com o path da foto esta sendo gravada corretamente no banco, ou seja, se eu selecionar uma imagem IMG001.JPG na pasta c:\fotos, ele grava no banco a string C:\FOTOS\IMG001.JPG.
Mas qd eu vou olha la na tabela pelo pgAdmin o registro gravado, ele mostra completamente diferente do que ele gravou. Primeiro ele remove todas as ´\´ do path do arquivo. Em algumas situacoes, no lugar da ´\´, ele coloca outro caracter, normalmente uma ´@´ e perde parte do nome do arquivo, entao ao inves de no banco aparecer assim:
[b:68113d4bee]C:\FOTOS\IMG001.JPG[/b:68113d4bee]
ele está aparecendo assim:
[b:68113d4bee]CFOTOS@001.JPG[/b:68113d4bee]
É como se o banco eliminasse os caracteres q ele nao suporta, ou algo parecido.... Nesse caso eu usaria o campo como VARCHAR mesmo ou teria outro tipo de banco para fazer isso?
Aguardo algum retorno,
grato,
Silvio Ribeiro
Joao Pessoa - PB
Estou usando Delphi 7, PSQL 8.1 e o PostgresDAC para o acesso a dados direto.
No meu form tem um componente Image pra mostrar as fotos e um OpenPictureDialog. Tem um button pra chamar a caixa de dialogo de selecao de imagem. Qd o usuario seleciona a imagem ele pega o OpenPictureDialog1.Filename e joga para o campo pathfotos na tabela FOTOS.
Essa tabela eh composta pelos seguintes campos:
idfoto serial, idcliente integer, pathfoto varchar(255).
O processo q uso pra gravar no banco eh o seguinte: qd a pessoa selecionou a imagem no openpicturedialog e pressionou o botao ok ai ele grava a foto na tabela:
tblFotos.append; tblFotos.FieldByName(´IDCLIENTE´).AsInteger := idcliente; tblFotos.FieldByName(´PATHFOTO´).AsString := openPictureDialog1.FileName; tblFotos.post;
Fazendo a depuracao nesse trecho, observei que a string com o path da foto esta sendo gravada corretamente no banco, ou seja, se eu selecionar uma imagem IMG001.JPG na pasta c:\fotos, ele grava no banco a string C:\FOTOS\IMG001.JPG.
Mas qd eu vou olha la na tabela pelo pgAdmin o registro gravado, ele mostra completamente diferente do que ele gravou. Primeiro ele remove todas as ´\´ do path do arquivo. Em algumas situacoes, no lugar da ´\´, ele coloca outro caracter, normalmente uma ´@´ e perde parte do nome do arquivo, entao ao inves de no banco aparecer assim:
[b:68113d4bee]C:\FOTOS\IMG001.JPG[/b:68113d4bee]
ele está aparecendo assim:
[b:68113d4bee]CFOTOS@001.JPG[/b:68113d4bee]
É como se o banco eliminasse os caracteres q ele nao suporta, ou algo parecido.... Nesse caso eu usaria o campo como VARCHAR mesmo ou teria outro tipo de banco para fazer isso?
Aguardo algum retorno,
grato,
Silvio Ribeiro
Joao Pessoa - PB
GOSTEI 0
Andersonpgsql
05/12/2006
Bom dia...
eu ja usei esta paleta de conexão que vc esta usando no momento, mas percebi que ela tem alguns bug´s, no momento estou usando a conexao ado e um drive oldb e odbc...fiz algumas pequenas mudanças e ficou super rapido, mas não to querendo dizer que é este o problema...nesta parte não testei...aqui eu fiz o seguinte...[--usei um openpcturedialog, e dois botaos, só pra facilitar o código pra vc entender melhor, é coisa simples, pode se usar tanto um dbedito visible:=false, ou colocar direto no value do banco.
la vai o código...
ADOQuery1.Insert;
OpenPictureDialog1.Execute;
//Este
DBEdit2.Text:=OpenPictureDialog1.FileName;
//ou este tanto faz
ADOQuery1local_foto.Value:=OpenPictureDialog1.FileName;
como disse é muito simples o código, e salvou corretamente no banco.
ve se isso resolve, se não der certo vamos tentar de outra forma
eu ja usei esta paleta de conexão que vc esta usando no momento, mas percebi que ela tem alguns bug´s, no momento estou usando a conexao ado e um drive oldb e odbc...fiz algumas pequenas mudanças e ficou super rapido, mas não to querendo dizer que é este o problema...nesta parte não testei...aqui eu fiz o seguinte...[--usei um openpcturedialog, e dois botaos, só pra facilitar o código pra vc entender melhor, é coisa simples, pode se usar tanto um dbedito visible:=false, ou colocar direto no value do banco.
la vai o código...
ADOQuery1.Insert;
OpenPictureDialog1.Execute;
//Este
DBEdit2.Text:=OpenPictureDialog1.FileName;
//ou este tanto faz
ADOQuery1local_foto.Value:=OpenPictureDialog1.FileName;
como disse é muito simples o código, e salvou corretamente no banco.
ve se isso resolve, se não der certo vamos tentar de outra forma
GOSTEI 0
Daemon
05/12/2006
..outro kit de componentes que eu tenho usado para a conexão com o banco e que vi que é muito bom é o Zeos ......
GOSTEI 0
Silvio Ribeiro
05/12/2006
Para quem tem o mesmo problema que eu tive, consegui solucioná-lo adicionando outra ´\´ antes das ´\´ do path da foto.
Então se a foto esta no path
C:\Fotos\Imagem.JPG
gravei no banco PSQL assim:
C:\\Fotos\\Imagem.Jpg
Assim resolveu o problema ao gravar o path no banco postgreSQL.
Vlw
Então se a foto esta no path
C:\Fotos\Imagem.JPG
gravei no banco PSQL assim:
C:\\Fotos\\Imagem.Jpg
Assim resolveu o problema ao gravar o path no banco postgreSQL.
Vlw
GOSTEI 0