Fórum problema 3 camadas com clientdataset e poo #332390

31/10/2006

0

Pessoas é o seguinte, eu postei uma mensagem aqui hoje cedo, após muita pesquisa eu desobri mais ou menos o que acontece, eu estou fazendo meu TCC em 3 camadas e orientado a objetos, o ´botão´ da minha aplicação chama um método da minha aplicação servidora, esta instancia, passa alguns parâmetros para o objeto( no caso, é um objeto da classe usuário , que eu uso para fazer verificações de permissão) e este método da classe, trabalha manipulando um TSQLQuery. Eu tenho um Client Dataset ligado nessa query na aplicação cliente, o problema é o seguinte, o clientdataset tem por padrão abrir e fechar a query, pois ele utiliza os dados somente quando ele precisa, mas a minha aplicação servidora, precisa desse query sempre ligado, pois qualquer método que é chamado, pega o coduser da query para gravar no registro da tabela correspondente, apenas a fins de auditoria. Como posso usar o query dataset ligado nessa query e mante-la sempre aberta, sem que o clientdataset a fecha sozinha ?


Brunocantelli

Brunocantelli

Responder

Posts

31/10/2006

Marco Salles

na verdade quem fecha a query é o DataSetprovider

Porem não conheço nenhuma propriedade que impeçaque isto ocorra

Mas se voce colocar depois do Dm.CdsUsuario.Open;
o comando Dm.SuaQuery.Active:=True; ela não ficara aberta ????


procedure TFrmLogin.ActLoginExecute(Sender: TObject); begin validado:=false; If Dm.conMercado.AppServer.ValidaUsuario( EdtUsuario.text,EdtSenha.text)=´VALIDO´ then begin validado:=true; close; Dm.CdsUsuario.Open; //Dm.CdsUsuario.Refresh; end else begin Application.MessageBox(´Senha ou usuário Incorreto, Tente novamente´, ´Dados Incorretos´, mb_IconExclamation + MB_OK); EdtSenha.SetFocus; end; end;



Responder

Gostei + 0

31/10/2006

Brunocantelli

na verdade não, olha só que estranho, como eu uso essa qryusuarios para fazer a validação do login com clientdataset e também utilizo para métodos da minha aplicação servidora( daí a necessidade de ela estar sempre aberta), eu criei outro método na aplicação servidora para fazer a mesma coisa com um outro SqlQuery, chamado SqlLogin, só olha que estranho, a ClientDataSet parou de ficar linkada no qryusuarios, e mesmo sendo ligada agora em sqllogin, e mesmo assim, ele continua dando esses paus de não encontrar campo coduser por exemplo, nunca vi nada igual


Responder

Gostei + 0

31/10/2006

Marco Salles

eu não entendi ???

Voce disse na sua replica :

na verdade não,


Na verdade não o que ???

esta sua afirmação é sobre :

na verdade quem fecha a query é o DataSetprovider [b:fe54e7c309]ou sobre[/b:fe54e7c309] Mas se voce colocar depois do Dm.CdsUsuario.Open; o comando Dm.SuaQuery.Active:=True; ela não ficara aberta ????



Responder

Gostei + 0

01/11/2006

Brunocantelli

na verdade não :
´Mas se voce colocar depois do Dm.CdsUsuario.Open;
o comando Dm.SuaQuery.Active:=True; ela não ficara aberta ???? ´

achei muito estranho, estou utilizando um outro objeto TQuery que não tem DatasetProvider ligado, usando o mesmo método que o que tem usa, mas ele também esta fechando sozinho, e o gozado, é que estou utilizando a palavra var na frente dos parâmetros para ele não tirar cópia e fazer no objeto mesmo :

procedure TUsuario.RetornaUsuarioSenha(var SqlAux: TSqlQuery;
Conexao: TSqlConnection);
begin
With SqlAux do
begin
Close;
SqlConnection:=conexao;
Sql.Clear;
Sql.Add(´SELECT * FROM USUARIO´);
Sql.Add(´WHERE LOGIN=:USUARIO´);
Params.ParamByName(´USUARIO´).AsString:=nome;
Open;
end;
end;

sinceramente, não entendo o que possa estar acontecendo !


Responder

Gostei + 0

01/11/2006

Marco Salles

´Mas se voce colocar depois do Dm.CdsUsuario.Open; o comando Dm.SuaQuery.Active:=True; ela não ficara aberta ???? ´


[b:86e935c052]Era para ficar aberto... Desde que a conexão esteja aberta[/b:86e935c052]

Voce tem certeza , que a sua conexão esta aberta ????

Existe a propriedade KeepConeection que se pode controlar o fechamento ou não da conexão com o banco...


Responder

Gostei + 0

01/11/2006

Brunocantelli

tenho certeza que ela esta aberta, afinal, é para isso que serve o var na frente de SqlAux, onde SqlAux é a query que eu estou passando como parâmetro, isso quer dizer , ele vai lá, pega essa query, limpa a propriedade Sql dela, adiciona umas linhas do sql e dá o método open, que é equivalente a active:=true. E pelo fato de ter o var na frente, ele não tira cópia da query e trabalha na cópia, e sim, ele trabalhar diretamente com a query.só que o mais estranho é que eu coloquei um método na que verifica se a query esta aberta e me dar um showmessage e ele me da o showmessage do else, dizendo que ela esta fechada. Já estou há 3 dias com este problema, e ja patinei 24 horas ao total e não consegui resolver, antes eu estava usando apenas uma query, que serviria para validar o usuário e ficar com essa linha enquando o sistema tivésse aberto para o usuário, mas como eu tinha um dataset provider ligado nele para usar um client dataset, e descobri que o datasetprovider abre e fecha sozinho a query, conforme necessidade, ai eu coloquei no dm mais uma query e criei um novo método , que é esse abaixo, só para ele trabalhar com essa nova query que não tem o datasetprovider associada a ela e não correr este risco de ficar fechando sozinho, o mais estranho é o seguinte, no evento beforeopen dessa query nova eu coloquei um showmessage ´ABRINDO SQL TESTE´ e no evento beforeclose eu coloquei um showmessage ´FECHANDO SQL TESTE´ e quando ele abre a query ele me dá o showmessage, quando ele esta fechando não recebo mensagem algum ! muito estranho essa parada ! se alguém ja passou por algo par
procedure TUsuario.RetornaUsuarioSenha(var SqlAux: TSqlQuery;
Conexao: TSqlConnection);
begin
With SqlAux do
begin
Close;
SqlConnection:=conexao;
Sql.Clear;
Sql.Add(´SELECT * FROM USUARIO´);
Sql.Add(´WHERE LOGIN=:USUARIO´);
Params.ParamByName(´USUARIO´).AsString:=nome;
Open;
end;
end;


Responder

Gostei + 0

01/11/2006

Brunocantelli

ecido, por favor, me ajude
Responder

Gostei + 0

01/11/2006

Brunocantelli

alias, deveria estar aberta, mas não esta !


Responder

Gostei + 0

01/11/2006

Marco Salles

alias, deveria estar aberta, mas não esta !


Voce esta se referindo a conexão ????


Responder

Gostei + 0

01/11/2006

Brunocantelli

não, estou me referindo a Query, deveria estar aberta, mas não está, estarei vendo se consigo colocar as fotos do meu problema em algum lugar, para vcs tentarem me ajudar.


Responder

Gostei + 0

01/11/2006

Marco Salles

não, estou me referindo a Query, deveria estar aberta, mas não está, estarei vendo se consigo colocar as fotos do meu problema em algum lugar, para vcs tentarem me ajudar.


mas me refiro também a conexão ela esta aberta ??? :?: :?:


Responder

Gostei + 0

01/11/2006

Brunocantelli

sim, a conexão fica sempre aberta, eu deixo ela com true em tempo de projeto, me da seu email que vou tentar anexar os snapshots que tirei explicando o problema, não sei anexar foto por aqui, acho que só da se ela ja estiver na web, certo ?


Responder

Gostei + 0

01/11/2006

Marco Salles

salhamoda@uol.com.br


Responder

Gostei + 0

01/11/2006

Marco Salles

sim, a conexão fica sempre aberta, eu deixo ela com true em tempo de projeto,

Mas isto não garante que ela permaneça aberta... Com oeu disse antes .. Existe a propriedade KeepConnection que pode fechar esta conexão , sem que voce perceba


Responder

Gostei + 0

01/11/2006

Brunocantelli

to te enviando o email com os snapshots


Responder

Gostei + 0

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

Aceitar