REPLACE X WITH Y - ANORMALIDADE?

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

tchadrack
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 15 Mar 2016 15:42
Localização: São Paulo

REPLACE X WITH Y - ANORMALIDADE?

Mensagem por tchadrack »

ao fazer o debug em meu sistema, notei que a linha

REPLACE periodo WITH periodox (a variável periodox contém 1 único caractere e é inserida no banco através deste comando)


ESTÁ ACONTECENDO que logo após passar por este comando REPLACE, o conteúdo da variável periodox fica vazio, ou seja "" seu conteúdo desaparece.


ISSO É NORMAL NO CLIPPER? (Não tenho costume de programar no clipper mas preciso fazer a manutençao do sistema)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

REPLACE X WITH Y - ANORMALIDADE?

Mensagem por Jairo Maia »

Olá tchadrack,
tchadrack escreveu:ISSO É NORMAL NO CLIPPER?
Não! Em hipótese nenhuma.

Se não existe no banco de dados uma variável chamada periodox, seu conteúdo é mantido após o Replace. Porém, se existe a variável com mesmo nome no banco de dados isso acontece porque ela assume o conteúdo do campo.

Poste um exemplo de como você está fazendo para que possamos opinar.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

REPLACE X WITH Y - ANORMALIDADE?

Mensagem por JoséQuintas »

Deixa eu ver se entendi: o replace está certo, e o conteúdo da variável estava certo.
Depois fica errado.

Por acaso não existe essa variável fora do módulo?

Código: Selecionar todos

PRIVATE periodox := " "
   ? periodox // aqui retorna branco
   Subrotina1()
   SubRotina2( periodox )
   ? periodox // aqui retorna branco
   RETURN

FUNCTION SubRotina1()

   PRIVATE periodox := "A"

   ? periodox // aqui retorna "A"

   RETURN NIL

FUNCTION SubRotina2( Periodox )

   periodox := "X"
   ? periodox // aqui retorna "X"
   RETURN NIL
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
tchadrack
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 15 Mar 2016 15:42
Localização: São Paulo

REPLACE X WITH Y - ANORMALIDADE?

Mensagem por tchadrack »

O banco (f1) tem a coluna periodo mas não periodox

Código: Selecionar todos

   Select f1
                     aa:= f1->descr
                     aai:= aa + "0"
					 
					 
                     If (reglock(0))
					
						**** aqui, periodox é igual a "M"
			Replace periodo With periodox 
                                                **** aqui, periodox é igual a "", mas deveria ser "M", senão dá problema um pouco mais a frente no código..
                       
                        Replace arquivo With aa
                        Replace arqind With aai
														
                        Unlock
                     Else
                        mensagem(1)
                        Exit
                     EndIf
tchadrack
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 15 Mar 2016 15:42
Localização: São Paulo

REPLACE X WITH Y - ANORMALIDADE?

Mensagem por tchadrack »

Pelo que entendi então isso não é normal, vocês tem alguma idéia do que poderia estar acontecendo?
tchadrack
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 15 Mar 2016 15:42
Localização: São Paulo

REPLACE X WITH Y - ANORMALIDADE?

Mensagem por tchadrack »

Eu estava aqui fuçando no sistema, e compilei com o hbmk2. Ao fazer o debug nesse trecho do programa a variável não é mais alterada, e o bug desapareceu.

A instrução replace x with y não altera mais a variável.

Ou seja, acho que o problema era do compilador que eu estava utilizando, vou fazer um checkup na minha instalação do Harbour.

Agradeço a ajuda, :xau
Responder