GARANTIR DESCONTO

Fórum Delphi não encontra tabela #348815

12/11/2007

0

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:

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

Charlo

Responder

Posts

12/11/2007

Martins

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:

ExtractFilePath(ParamStr(0))+´dados\Tabela.db´ 


Boa sorte e bons códigos.


Responder

Gostei + 0

12/11/2007

Charlo

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


Responder

Gostei + 0

12/11/2007

Vagner.oliveira

poste o código para tentarmos vizualizar seu problema


Responder

Gostei + 0

12/11/2007

Lacowicz

Use

ExtractFilePath(Application.ExeName) +´dados\Tabela.db´


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar