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: 2820
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP
Curtiu: 2 vezes

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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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