Delphi não encontra tabela
Olá gente, bom dia.
Não sei se alguém poderá me ajudar. A principio a coisa parece simples mas eu realmente não sei como resolver este pequeno problema. Agradeço quem puder ajudar.
Eu uso o [b:047d86f998]Delphi 7[/b:047d86f998] e no meu projeto eu tenho [b:047d86f998]1 ClientDataSet[/b:047d86f998], [b:047d86f998]1 DataSetProvider[/b:047d86f998], [b:047d86f998]1 DataSource[/b:047d86f998] e [b:047d86f998]1 Query[/b:047d86f998]. E uma [b:047d86f998]TABELA.DB[/b:047d86f998] feita em [b:047d86f998]Paradox[/b:047d86f998]. Todos esses componentes estão dentro de um [b:047d86f998]DataModule[/b:047d86f998].
A conexão está feita da seguinte maneira:
- [b:047d86f998]DataSetProvider[/b:047d86f998] com a propiedade [b:047d86f998]DataSet[/b:047d86f998] setada para a [b:047d86f998]Query[/b:047d86f998].
- [b:047d86f998]ClientDataSet[/b:047d86f998] com a propiedade [b:047d86f998]ProviderName[/b:047d86f998] setada para [b:047d86f998]DataSetProvider[/b:047d86f998].
- [b:047d86f998]DataSource[/b:047d86f998] com a propiedade [b:047d86f998]DataSet[/b:047d86f998] setada para o [b:047d86f998]ClientDataSet[/b:047d86f998].
- E a [b:047d86f998]Query[/b:047d86f998] a propiedade [b:047d86f998]SQL (TStrings...)[/b:047d86f998] setada com essa linha de comando: [b:047d86f998]Select * from Tabela[/b:047d86f998].
Até aí tudo bem, as conexões estão funcionando perfeitamente e vale lembrar também que a minha tabela está no diretório principal do meu projeto. Resolvi fazer dessa maneira para que quando a aplicação se instale no sistema de qualquer usuário apenas é necessário instalar o [b:047d86f998]BDE compacto[/b:047d86f998] e pronto, o programa vai rodar sem nenhum problema. Esse teste eu já fiz em outra máquina que não tinha o Delphi instalado e muito menos o BDE, e funcionou perfeitamente.
Meu problema começou a acontecer quando coloquei um sistema de [b:047d86f998]Backup[/b:047d86f998] com o [b:047d86f998]ZipMaster[/b:047d86f998]. Tenho 2 botões, um escrito [b:047d86f998]Salvar[/b:047d86f998] e outro escrito [b:047d86f998]Restaurar[/b:047d86f998].
No botão Salvar o código é o seguinte:
E no botão [b:047d86f998]Restaurar[/b:047d86f998] o código é o seguinte:
E no [b:047d86f998]FormCreat[/b:047d86f998] do formulário está o seguinte código:
Até aí está tudo perfeito, abro o programa clico no botão [b:047d86f998]Salvar[/b:047d86f998] para fazer o backup, o sistema criar perfeitamente o arquivo [b:047d86f998]backup.zip[/b:047d86f998] na pasta raiz do meu projeto, daí faço outro teste, clico no botão [b:047d86f998]Restaurar[/b:047d86f998] e novamente a extração é concluída com sucesso para a pasta raiz do meu projeto, daí faço mais um teste, em tempo de execução claro, faço um novo cadastro no banco de dados somente com textos, ou seja, adiciono um [b:047d86f998]nome[/b:047d86f998] e a [b:047d86f998]idade[/b:047d86f998] por exemplo, salvo o cadastro e depois vou direto fazer o [b:047d86f998]backup[/b:047d86f998], o backup é feito também com sucesso e idem para a [b:047d86f998]restauração[/b:047d86f998].
Agora o problema. Quando em tempo de execução claro, adiciono um novo cadastro no banco de dados, adiciono nome, a idade e uma [b:047d86f998]foto[/b:047d86f998] da pessoa por exemplo, o cadastro é efetuado com sucesso, mas na hora de clicar no botão para [b:047d86f998]salvar[/b:047d86f998] a base de dados, o Delphi se perde e fala que não foi possível encontrar a [b:047d86f998]Tabela.db[/b:047d86f998].
[b:047d86f998]Conclusão:[/b:047d86f998] Quando faço um cadastro [b:047d86f998]somente com texto [/b:047d86f998]o backup é feito com [b:047d86f998]sucesso[/b:047d86f998]. Mas quando o cadastro está envolvento uma [b:047d86f998]imagem[/b:047d86f998] o Delphi se perde dizendo que [b:047d86f998]não foi possível encontrar[/b:047d86f998] a [b:047d86f998]Tabela.db[/b:047d86f998].
[b:047d86f998]OBS-01:[/b:047d86f998] Utilizo a técnica de não gravar a imagem no banco de dados, gravo apenas o caminho da foto no banco de dados, que é somente texto. E uso o código abaixo para inserir uma foto:
[b:047d86f998]OBS-02:[/b:047d86f998] Descobri qual é o problema mas não sei como resolver. No pricípio do tópico no código do [b:047d86f998]ZipMaster[/b:047d86f998] eu coloquei o caminho para gerar o arquivo [b:047d86f998]backup.zip[/b:047d86f998] e da mesma maneira para compactar o arquivo que eu determinei via código: [b:047d86f998]´.\dados\Tabela.db´[/b:047d86f998]
Lembrando que ao adicionar os caracteres [b:047d86f998].\dados[/b:047d86f998] significa que estamos dizendo ao Delphi para utilizar a tabela que está no diretório [b:047d86f998]dados[/b:047d86f998] na raiz do programa. O mesmo efeito acontece se nós utilizarmos apenas [b:047d86f998].\[/b:047d86f998]. O Delphi irá usar a tabela que está no diretório raiz da aplicação. Já tentei também desta forma e deu o mesmo erro.
O problema está justamente aí se eu trocar [b:047d86f998]´.\dados\Tabela.db´[/b:047d86f998] por [b:047d86f998]´C:\Projeto1\dados\Tabela.db´[/b:047d86f998] o Delphi encontra a tabela perfeitamente mesmo [b:047d86f998]adicionando uma foto[/b:047d86f998] no cadastro e realiza o backup com sucesso.
Já tentei usar Alias com o [b:047d86f998]TDatabase[/b:047d86f998] mas dá o mesmo erro. Não sei se estou fazendo correto mas já tentei de tudo e não consegui, por isso estou postando até mesmo porque acredito que deve haver mais gente com o mesmo problema.
A razão disso tudo é bem simples, para que quando o usuário instale meu programa em seu computador ele tenha que ter apenas o [b:047d86f998]BDE Compacto instalado[/b:047d86f998] e que aliás o própio programa de instalação instalará automaticamente, assim não tendo que fazer nenhum tipo de configuração adicional, é simplesmente instalar e usar.
Agradeço quem puder me ajudar e desculpem pelo enorme tópico, mas acredito que quando o problema está bem detalhado é mais fácil de se entender e obter ajuda mais facilmente.
Desde já um abraço a todos da comunidade.
Charlo
Não sei se alguém poderá me ajudar. A principio a coisa parece simples mas eu realmente não sei como resolver este pequeno problema. Agradeço quem puder ajudar.
Eu uso o [b:047d86f998]Delphi 7[/b:047d86f998] e no meu projeto eu tenho [b:047d86f998]1 ClientDataSet[/b:047d86f998], [b:047d86f998]1 DataSetProvider[/b:047d86f998], [b:047d86f998]1 DataSource[/b:047d86f998] e [b:047d86f998]1 Query[/b:047d86f998]. E uma [b:047d86f998]TABELA.DB[/b:047d86f998] feita em [b:047d86f998]Paradox[/b:047d86f998]. Todos esses componentes estão dentro de um [b:047d86f998]DataModule[/b:047d86f998].
A conexão está feita da seguinte maneira:
- [b:047d86f998]DataSetProvider[/b:047d86f998] com a propiedade [b:047d86f998]DataSet[/b:047d86f998] setada para a [b:047d86f998]Query[/b:047d86f998].
- [b:047d86f998]ClientDataSet[/b:047d86f998] com a propiedade [b:047d86f998]ProviderName[/b:047d86f998] setada para [b:047d86f998]DataSetProvider[/b:047d86f998].
- [b:047d86f998]DataSource[/b:047d86f998] com a propiedade [b:047d86f998]DataSet[/b:047d86f998] setada para o [b:047d86f998]ClientDataSet[/b:047d86f998].
- E a [b:047d86f998]Query[/b:047d86f998] a propiedade [b:047d86f998]SQL (TStrings...)[/b:047d86f998] setada com essa linha de comando: [b:047d86f998]Select * from Tabela[/b:047d86f998].
Até aí tudo bem, as conexões estão funcionando perfeitamente e vale lembrar também que a minha tabela está no diretório principal do meu projeto. Resolvi fazer dessa maneira para que quando a aplicação se instale no sistema de qualquer usuário apenas é necessário instalar o [b:047d86f998]BDE compacto[/b:047d86f998] e pronto, o programa vai rodar sem nenhum problema. Esse teste eu já fiz em outra máquina que não tinha o Delphi instalado e muito menos o BDE, e funcionou perfeitamente.
Meu problema começou a acontecer quando coloquei um sistema de [b:047d86f998]Backup[/b:047d86f998] com o [b:047d86f998]ZipMaster[/b:047d86f998]. Tenho 2 botões, um escrito [b:047d86f998]Salvar[/b:047d86f998] e outro escrito [b:047d86f998]Restaurar[/b:047d86f998].
No botão Salvar o código é o seguinte:
begin if not FileExists(´.\dados\Tabela.db´) then begin ShowMessage(´Error - Tabela.db not found´); Exit; end; Form1.ZipMaster1.FSpecArgs.Add(´.\dados\Tabela.db´); Form1.ZipMaster1.Add; ShowMessage(´Files added = ´ + IntToStr(Form1.ZipMaster1.SuccessCnt)); end;
E no botão [b:047d86f998]Restaurar[/b:047d86f998] o código é o seguinte:
begin Form1.ZipMaster1.FSpecArgs.Add(´*.*´); Form1.ZipMaster1.ExtrBaseDir := ´dados´; Form1.ZipMaster1.ExtrOptions := Form1.ZipMaster1.ExtrOptions+[ExtrOverwrite]; Form1.ZipMaster1.Extract; ShowMessage(´Files extracted = ´ + IntToStr(Form1.ZipMaster1.SuccessCnt)); end;
E no [b:047d86f998]FormCreat[/b:047d86f998] do formulário está o seguinte código:
begin //SetCurrentDir(´C:\ZIP\DEMO2´); Caption:=´ZIP Demo 2 - ´ + GetCurrentDir; Form1.ZipMaster1.ZipFileName := ´backup.zip´; Form1.ZipMaster1.Dll_Load := true; end;
Até aí está tudo perfeito, abro o programa clico no botão [b:047d86f998]Salvar[/b:047d86f998] para fazer o backup, o sistema criar perfeitamente o arquivo [b:047d86f998]backup.zip[/b:047d86f998] na pasta raiz do meu projeto, daí faço outro teste, clico no botão [b:047d86f998]Restaurar[/b:047d86f998] e novamente a extração é concluída com sucesso para a pasta raiz do meu projeto, daí faço mais um teste, em tempo de execução claro, faço um novo cadastro no banco de dados somente com textos, ou seja, adiciono um [b:047d86f998]nome[/b:047d86f998] e a [b:047d86f998]idade[/b:047d86f998] por exemplo, salvo o cadastro e depois vou direto fazer o [b:047d86f998]backup[/b:047d86f998], o backup é feito também com sucesso e idem para a [b:047d86f998]restauração[/b:047d86f998].
Agora o problema. Quando em tempo de execução claro, adiciono um novo cadastro no banco de dados, adiciono nome, a idade e uma [b:047d86f998]foto[/b:047d86f998] da pessoa por exemplo, o cadastro é efetuado com sucesso, mas na hora de clicar no botão para [b:047d86f998]salvar[/b:047d86f998] a base de dados, o Delphi se perde e fala que não foi possível encontrar a [b:047d86f998]Tabela.db[/b:047d86f998].
[b:047d86f998]Conclusão:[/b:047d86f998] Quando faço um cadastro [b:047d86f998]somente com texto [/b:047d86f998]o backup é feito com [b:047d86f998]sucesso[/b:047d86f998]. Mas quando o cadastro está envolvento uma [b:047d86f998]imagem[/b:047d86f998] o Delphi se perde dizendo que [b:047d86f998]não foi possível encontrar[/b:047d86f998] a [b:047d86f998]Tabela.db[/b:047d86f998].
[b:047d86f998]OBS-01:[/b:047d86f998] Utilizo a técnica de não gravar a imagem no banco de dados, gravo apenas o caminho da foto no banco de dados, que é somente texto. E uso o código abaixo para inserir uma foto:
var Img : String; path: String; begin OpenPictureDialog1.Execute; path := extractfilepath(OpenPictureDialog1.FileName); path := path + ExtractFilename(OpenPictureDialog1.FileName); Img := OpenPictureDialog1.FileName; Imagem1.Picture.LoadFromFile(Img); end;
[b:047d86f998]OBS-02:[/b:047d86f998] Descobri qual é o problema mas não sei como resolver. No pricípio do tópico no código do [b:047d86f998]ZipMaster[/b:047d86f998] eu coloquei o caminho para gerar o arquivo [b:047d86f998]backup.zip[/b:047d86f998] e da mesma maneira para compactar o arquivo que eu determinei via código: [b:047d86f998]´.\dados\Tabela.db´[/b:047d86f998]
Lembrando que ao adicionar os caracteres [b:047d86f998].\dados[/b:047d86f998] significa que estamos dizendo ao Delphi para utilizar a tabela que está no diretório [b:047d86f998]dados[/b:047d86f998] na raiz do programa. O mesmo efeito acontece se nós utilizarmos apenas [b:047d86f998].\[/b:047d86f998]. O Delphi irá usar a tabela que está no diretório raiz da aplicação. Já tentei também desta forma e deu o mesmo erro.
O problema está justamente aí se eu trocar [b:047d86f998]´.\dados\Tabela.db´[/b:047d86f998] por [b:047d86f998]´C:\Projeto1\dados\Tabela.db´[/b:047d86f998] o Delphi encontra a tabela perfeitamente mesmo [b:047d86f998]adicionando uma foto[/b:047d86f998] no cadastro e realiza o backup com sucesso.
Já tentei usar Alias com o [b:047d86f998]TDatabase[/b:047d86f998] mas dá o mesmo erro. Não sei se estou fazendo correto mas já tentei de tudo e não consegui, por isso estou postando até mesmo porque acredito que deve haver mais gente com o mesmo problema.
A razão disso tudo é bem simples, para que quando o usuário instale meu programa em seu computador ele tenha que ter apenas o [b:047d86f998]BDE Compacto instalado[/b:047d86f998] e que aliás o própio programa de instalação instalará automaticamente, assim não tendo que fazer nenhum tipo de configuração adicional, é simplesmente instalar e usar.
Agradeço quem puder me ajudar e desculpem pelo enorme tópico, mas acredito que quando o problema está bem detalhado é mais fácil de se entender e obter ajuda mais facilmente.
Desde já um abraço a todos da comunidade.
Charlo
Charlo
Curtidas 0
Respostas
Martins
12/11/2007
No Delphi 7 e usava com Paradox assim:
[b:dbc0d15f83]DataBaseName = \dados[/b:dbc0d15f83] e em TableName informava o nome da tabela, e funcionava sem problemas.
Mas vc pode tentar tm assim no TableName:
Boa sorte e bons códigos.
[b:dbc0d15f83]DataBaseName = \dados[/b:dbc0d15f83] e em TableName informava o nome da tabela, e funcionava sem problemas.
Mas vc pode tentar tm assim no TableName:
ExtractFilePath(ParamStr(0))+´dados\Tabela.db´
Boa sorte e bons códigos.
GOSTEI 0
Charlo
12/11/2007
Olá gente, voltei com mais novidades.
Obrigado pela resposta Martin, mas não funcionou, estou com o mesmo problema.
Eu já descobri o problema. O problema está quando carrego um arquivo JPG qualquer, aí dá o erro de tabela não encontrada. Se por exemplo eu converto um arquivo JPG para BMP, ou um BMP do Windows para JPG utilizando o programa default do Windows para visualizar imagens, o Windows Picture and Fax Viewer não dá o problema.
Realmente uma coisa de louco. Eu estou usando o componente [b:733fa938a8]Image1[/b:733fa938a8] nativo do Delphi.
Alguém sabe de alguma coisa sobre isso?
Obrigado gente.
Charlo
Obrigado pela resposta Martin, mas não funcionou, estou com o mesmo problema.
Eu já descobri o problema. O problema está quando carrego um arquivo JPG qualquer, aí dá o erro de tabela não encontrada. Se por exemplo eu converto um arquivo JPG para BMP, ou um BMP do Windows para JPG utilizando o programa default do Windows para visualizar imagens, o Windows Picture and Fax Viewer não dá o problema.
Realmente uma coisa de louco. Eu estou usando o componente [b:733fa938a8]Image1[/b:733fa938a8] nativo do Delphi.
Alguém sabe de alguma coisa sobre isso?
Obrigado gente.
Charlo
GOSTEI 0
Vagner.oliveira
12/11/2007
poste o código para tentarmos vizualizar seu problema
GOSTEI 0
Lacowicz
12/11/2007
Use
ExtractFilePath(Application.ExeName) +´dados\Tabela.db´
ExtractFilePath(Application.ExeName) +´dados\Tabela.db´
GOSTEI 0