Problemas com const numa funcao, porque nao vem o vlr certo?

Delphi

15/07/2005

Olá, tenho a seguinte função:
function Localiza(Tabela, Condicao, SQLPers, IndexCampo: string; const ShowSQLPers: boolean = True): Boolean;
begin
 DM.QrLocalizar.close;
 TabelaLocalizar := Tabela;
 CondicaoLocalizar := Condicao;
 SQLPersonal := SQLPers;
 CampoIndex := IndexCampo;
 ShowSQLPersonal := ShowSQLPers;
 FrmLocalizar := TFrmLocalizar.Create(Application);
 if ((FrmLocalizar.ShowModal = mrOk) and (DM.QrLocalizar.RecordCount > 0)) then
  Result := True
 else
  Result := False;
end;


Bem, minha intenção é não querer passar o parâmetro [b:5c402a7f57]ShowSQLPers[/b:5c402a7f57], msa se passar pegar o valor dele, pois bem, por isso usei o const, mas ele SEMPRE está vindo como False, ou seja, se eu nao informar ele na chamada da funcao, deveria vir True, não é?

segue como eu chamo a funcao:
Localiza(´CAIXA´, ´´, ´´, ´HISTORICO´);



Onde está o erro na função?

Desde já agradeço


Titanius

Titanius

Curtidas 0

Respostas

Paulo_amorim

Paulo_amorim

15/07/2005

Olá

O que permite vc não passar o parâmetro não é o ´const´, mas sim o ´= True´... esse const só serve pra vc não poder alterar o valor dele na função.

Fiz um teste simples fazendo sua função somente retornar o que foi passado no parâmetro ShowSQLPers:
function TForm1.Localiza(Tabela, Condicao, SQLPers, IndexCampo: string; const ShowSQLPers: boolean): Boolean;
begin
     Result := ShowSQLPers;
end;

Pra mim funcionou de acordo... como você sabe que ele está passando errado?
Será qe vc não está alterando o valor de ShowSQLPersonal depois, no outro form?

Até+


GOSTEI 0
Titanius

Titanius

15/07/2005

Eu usei pela propria funcao acima... mas se eu nao colocar o [b:ce72cf83e7]const ShowSQLPers: boolean = True[/b:ce72cf83e7], o q ele ira me trazer?

o que eu quero eh o seguinte: nao quero informar este parametro sempre, msa se eu informar ele devera pegar o valor informado.. e se eu nao informar, queria que tivesse um valor como padrao..


nao sei se eh o jeito certo, teria outro modo?



[]s


GOSTEI 0
Massuda

Massuda

15/07/2005

...nao quero informar este parametro sempre, msa se eu informar ele devera pegar o valor informado.. e se eu nao informar, queria que tivesse um valor como padrao..
Deveria funcionar do jeito que você está fazendo. Como você está vendo que não funciona? Já experimentou colocar um breakpoint na linha que cria o TfrmLocaliza e ver os valores de ShowSQLPersonal e ShowSQLPers? No caso, ShowSQLPersonal parece ser uma variável global, pode estar sendo alterada em qualquer outro ponto do seu programa (por exemplo, pelo constructor/OnCreate/OnShow do TfrmLocaliza).


GOSTEI 0
Titanius

Titanius

15/07/2005

justamente coloquei um breakpoint na linha
ShowSQLPersonal := ShowSQLPers;


e esta variavel nao eh alterada no form localizar, somente alterada pela funcao Localiza.

muito estranho.. :(


GOSTEI 0
Marco Salles

Marco Salles

15/07/2005

Bem, minha intenção é não querer passar o parâmetro ShowSQLPers, msa se passar pegar o valor dele, pois bem, por isso usei o const, mas ele SEMPRE está vindo como False, ou seja, se eu nao informar ele na chamada da funcao, deveria vir True, não é?


so uma perguntinha para ver se eu esto entendendo direito ...

Quando voce fala que esta vindo como false , voce esta se referindo ao valor da variável  ShowSQLPersonal ou ao valor de retorno da Função Localizar :?:  :?:  :?: 



GOSTEI 0
POSTAR