Database not assigned - Mas o DM está no auto-create

Delphi

04/09/2006

Olá pessoal tudo bem com vcs?

Tudo bem que o erro Database not assigned é quando a ibquery não está setada corretamente ao ibDatabase, mas o pior é q esse erro está acontecendo no meu formulário de cadastro.
O componente ibquery está apontado no ibdatabase(ambos no datamodule) e no form de cad. de clientes tem o datasource apontando para o ibquery. Quando roda a aplicação, na primeira vez que o cadastro de clientes é chamado, tudo ocorre normalmente, posso inserir, excluir, alterar...etc...etc... Mas aí quando eu fecho a tela de cadastro de clientes e abro novamente para fazer alguma coisa na tela. Esse erro persiste em minha aplicação!!! No Project > Options o DataModule onde está o IbDatabase e IbQuery estão apontados para serem criados automaticamente e a tela de cadastro no Available. Mas mesmo assim acontece tal erro!! To ficando maluco, com isso!!!!

Alguém, por gentileza pode me ajudar a solucionar esse problema???

[]´s


Edibertoalves

Edibertoalves

Curtidas 0

Respostas

Edibertoalves

Edibertoalves

04/09/2006

UP!


GOSTEI 0
Mahdak

Mahdak

04/09/2006

pode parecer meio inconveniente de minha parte perguntar isso, mas quando voce fecha o formulario de cadastro, nos eventos de saida dele, tipo no Onclose, voce nao ta mandando destruir a conexão? alias, como voce faz a sua conexão? em tempo de projeto ou em tempo de execussao??

abraços!


GOSTEI 0
Edibertoalves

Edibertoalves

04/09/2006

Olá tudo blz???
O procedimento que faço para destruir o form é (só esse código no evento OnClose):

procedure TfrmCadCliente.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
frmCadCliente.Release;
frmcadcliente := nil;
end;

Para a conexão com o banco de dados eu faço em tempo de projeto.
Uso D7 + FB1.5.

O que faço????????

[]´s


GOSTEI 0
Martins

Martins

04/09/2006

Olá tudo blz??? O procedimento que faço para destruir o form é (só esse código no evento OnClose): procedure TfrmCadCliente.FormClose(Sender: TObject; var Action: TCloseAction); begin frmCadCliente.Release; frmcadcliente := nil; end; Para a conexão com o banco de dados eu faço em tempo de projeto. Uso D7 + FB1.5. O que faço???????? []´s


vc está fazendo a conexão com a base de dados em tempo de projeto não é isso?

Então vc abre a tela de cadastro a primeira vez e tudo normal, depois q vc fecha e libera da memória e então a chama novamente lhe é exibida a mensagem de que a base de dados não existe, é isso?

como vc está fazendo a abertura e fechamento dos componentes (IbTable, IbQuery)? E as trasações?

Sugiro q vc dê uma olhada mais detalhada em seu projeto para ver onde está acontecendo a falha, faça depuração.

boa sorte?


GOSTEI 0
Edibertoalves

Edibertoalves

04/09/2006

Olá Martins tudo blz?
Esses são os comandos que realizo:

// no main menu:
procedure TfrmMenu.Clientes1Click(Sender: TObject);
begin
frmCadCliente := TfrmCadCliente.create(self);
frmCadCliente.showmodal;
end;

// no oncreate do form de cad. de clientes
procedure TfrmCadCliente.FormCreate(Sender: TObject);
begin
dtsTelefone.DataSet.Close;
dtsTelefone.DataSet.Open;
//
dsHistorico.DataSet.Close;
dsHistorico.DataSet.Open;
//
dtsCadCliente.DataSet.Close;
dtsCadCliente.DataSet.Open;
dtsCadcliente.DataSet.last;
//
dsVendedor.DataSet.Close;
dsVendedor.DataSet.Open;
//
pgcPrincipal.ActivePage := tabGrid;
pgcGridTel.ActivePage := tabGridTel;
end;

Note-se que não há nada demais nesse código, utilizo as propriedades do TDataSet do TDataSource para navegar nas telas.
Agora suponha que eu feche e eu abra novamente a tela de cad. de clientes. O erro está aqui:


procedure TfrmMenu.Clientes1Click(Sender: TObject);
begin
frmCadCliente := TfrmCadCliente.create(self); // ERRO!!!

Bem na hora de criação do form, nem pula para o ShowModal!

O que estou fazendo de errado??????

[]´s


GOSTEI 0
Renato.pavan

Renato.pavan

04/09/2006

Olá Martins tudo blz? Esses são os comandos que realizo: // no main menu: procedure TfrmMenu.Clientes1Click(Sender: TObject); begin frmCadCliente := TfrmCadCliente.create(self); frmCadCliente.showmodal; end; // no oncreate do form de cad. de clientes procedure TfrmCadCliente.FormCreate(Sender: TObject); begin dtsTelefone.DataSet.Close; dtsTelefone.DataSet.Open; // dsHistorico.DataSet.Close; dsHistorico.DataSet.Open; // dtsCadCliente.DataSet.Close; dtsCadCliente.DataSet.Open; dtsCadcliente.DataSet.last; // dsVendedor.DataSet.Close; dsVendedor.DataSet.Open; // pgcPrincipal.ActivePage := tabGrid; pgcGridTel.ActivePage := tabGridTel; end; Note-se que não há nada demais nesse código, utilizo as propriedades do TDataSet do TDataSource para navegar nas telas. Agora suponha que eu feche e eu abra novamente a tela de cad. de clientes. O erro está aqui: procedure TfrmMenu.Clientes1Click(Sender: TObject); begin frmCadCliente := TfrmCadCliente.create(self); // ERRO!!! Bem na hora de criação do form, nem pula para o ShowModal! O que estou fazendo de errado?????? []´s


Tenta colocar no evento OnClose do frmCadCliente
  if Action = caFree then
     frmCadClientes := NIL;

E qdo for abrir faça assim:
if frmCadClientes = NIL then
   frmCadClientes := TfrmCadClientes.Create(self);
frmCadClientes.Show;

Espero ter ajudado

Renato

[]´s


GOSTEI 0
Edibertoalves

Edibertoalves

04/09/2006

Renato, Obrigado pela ajuda!!!!
O que vc passou deu certo aqui no sistema, não sei realmente o que aconteceu mas agora depois dessa dica a tela de cadastro voltou a funcionar normalmente!!!

Obrigado a todos que me ajudaram!

[]´s


GOSTEI 0
POSTAR