XObjects com banco de dados

Bom dia senhores

No meu sistema eu tenho um XObjects com um histórico, que na primeira versão gravava em banco apenas o E3TimeStamp e um valor de nível.

Então, ao cadastrar uma nova elevatória, ele pegava os dados de cadastro, gravava em banco e adicionava esse XObject Teste no Objeto de Dados.

Esse XObjects é adicionado no Objeto de Dados dentro de dados e em RunTime esse Hist1 é ativado e cria uma nova tabela no banco de dados.

Antes de eu fazer uma atualização, o software cadastrava a elevatória e criava a tabela normal.

Contudo, ao adicionar algumas colunas no hist1 e no código abaixo, ele parou de adicionar a tabela no banco, apenas criar os arquivos.

'Criam os blocos de comunicações

if (Parent.Item(“Grupo1”).Item(“ckLeituraCriar”).Value = True) or (Parent.Item(“Grupo1”).Item(“ckLeituraCriar”).Value = True) then
set DadosCadPonto = Application.GetObject(“Dados.DadosCadPonto”)

Drive = Application.GetObject("Dados.DadosCadPonto.spDrive").Value

Set dvr = Application.GetObject("" & Drive)

Set pasta = dvr.AddObject("IOFolder", True, Application.GetObject("Dados.DadosCadPonto.spNome").Value)

if (Parent.Item("Grupo1").Item("ckEscritaCriar").Value = True) then
	if Application.GetObject("Dados.DadosCadPonto.spNomeBloco").Value <> "" then
		Set TagBloco = pasta.AddObject("IOBlock", True, Application.GetObject("Dados.DadosCadPonto.spNomeBloco").Value)
		
		TagBloco.ParamDevice = Application.GetObject("Dados.DadosCadPonto.spDispositivo").Value
		TagBloco.ParamItem = Application.GetObject("Dados.DadosCadPonto.spItem").Value
		TagBloco.B1   = Application.GetObject("Dados.DadosCadPonto.spN1").Value
		TagBloco.B2   = Application.GetObject("Dados.DadosCadPonto.spN2").Value
		TagBloco.B3   = Application.GetObject("Dados.DadosCadPonto.spN3").Value
		TagBloco.B4   = Application.GetObject("Dados.DadosCadPonto.spN4").Value
		TagBloco.Size = Parent.Item("Grupo2").Item("ListBox1").ListCount
		TagBloco.Scan = Application.GetObject("Dados.DadosCadPonto.spVarredura").Value
		TagBloco.AllowRead = Application.GetObject("Dados.DadosCadPonto.spLeitura").Value
		TagBloco.AllowWrite = Application.GetObject("Dados.DadosCadPonto.spEscrita").Value
		
		for i = 0 To Parent.Item("Grupo2").Item("ListBox1").ListCount - 1
			valor = Split(Parent.Item("Grupo2").Item("ListBox1").List(i), "-")
			
			set Tag = TagBloco.AddObject("IOBlockElement", True, valor(0))
				Tag.Index 		   = valor(1)
				Tag.EnableScaling  = valor(2)
				Tag.EULow 		   = valor(3)
				Tag.EUHigh 	   	   = valor(4)
				Tag.EU 		   	   = valor(5)
				Tag.DeviceLow 	   = valor(6)
				Tag.DeviceHigh     = valor(7)
		Next
	end if
end if

if (Parent.Item("Grupo1").Item("ckLeituraCriar").Value = True) then
	if Application.GetObject("Dados.DadosCadPonto.spNomeBloco2").Value <> "" then
		Set TagBloco2 = pasta.AddObject("IOBlock", True, Application.GetObject("Dados.DadosCadPonto.spNomeBloco2").Value)
		
		TagBloco2.ParamDevice = Application.GetObject("Dados.DadosCadPonto.spDispositivo2").Value
		TagBloco2.ParamItem = Application.GetObject("Dados.DadosCadPonto.spItem2").Value
		TagBloco2.B1 = Application.GetObject("Dados.DadosCadPonto.spN5").Value
		TagBloco2.B2 = Application.GetObject("Dados.DadosCadPonto.spN6").Value
		TagBloco2.B3 = Application.GetObject("Dados.DadosCadPonto.spN7").Value
		TagBloco2.B4 = Application.GetObject("Dados.DadosCadPonto.spN8").Value
		TagBloco2.Size = Parent.Item("Grupo2").Item("ListBox2").ListCount
		TagBloco2.Scan = Application.GetObject("Dados.DadosCadPonto.spVarredura2").Value
		TagBloco2.AllowRead = Application.GetObject("Dados.DadosCadPonto.spLeitura2").Value
		TagBloco2.AllowWrite = Application.GetObject("Dados.DadosCadPonto.spEscrita2").Value
		
		for i = 0 To Parent.Item("Grupo2").Item("ListBox2").ListCount - 1
			valor = Split(Parent.Item("Grupo2").Item("ListBox2").List(i), "-")
			
			set Tag2 = TagBloco2.AddObject("IOBlockElement", True, valor(0))
				Tag2.Index 		   = valor(1)
				Tag2.EnableScaling = valor(2)
				Tag2.EULow 		   = valor(3)
				Tag2.EUHigh 	   = valor(4)
				Tag2.EU 		   = valor(5)
				Tag2.DeviceLow 	   = valor(6)
				Tag2.DeviceHigh    = valor(7)
		Next
	end if
end if

dvr.Save

end if

'Criam os objetos de dados
if Parent.Item(“Grupo3”).Item(“ListBox1”).ListCount <> 0 then
set Dados = Application.GetObject(“Dados”)

set DtFolder = Dados.AddObject("DataFolder", False, Application.GetObject("Dados.DadosCadPonto.spNome").Value)
	
With DtFolder
	.IsAlarmArea = True
	.AlarmVerify = True
	.Activate()
End With

for i = 0 To Parent.Item("Grupo3").Item("ListBox1").ListCount - 1
	valor = Split(Parent.Item("Grupo3").Item("ListBox1").List(i), "-")
	
	set InternalTag = DtFolder.AddObject("InternalTag", True, valor(0))
		InternalTag.Links.CreateLink "Value", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW." & valor(6), 0
	
	if(valor(3) = "Analógico")then	
		set AlarmSource = DtFolder.AddObject("AnalogAlarmSource", True, "AlarmeAnalogico" & valor(0))
			AlarmSource.Source 		  		   = "Dados." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & "." & valor(4) & ".Value"
			AlarmSource.LevelReturnMessageText = valor(7)
			AlarmSource.AlarmVerify   		   = valor(2)
			
			if (valor(16) = 1) then
				AlarmSource.LoLo		  		   = valor(16)
				AlarmSource.LoLoLimit 	  		   = valor(28)
				AlarmSource.LoLoMessageText 	   = valor(24)
				
				if (valor(20) = "Alta")then
					AlarmSource.LoLoSeverity 		  = 0
				elseif (valor(20) = "Média")then
					AlarmSource.LoLoSeverity 		  = 1
				else
					AlarmSource.LoLoSeverity 		  = 2
				end if
			end if
			
			if (valor(15) = 1) then
				AlarmSource.Lo 			  		   = valor(15)
				AlarmSource.LoLimit 	  		   = valor(27)
				AlarmSource.LoMessageText 		   = valor(23)
				
				if (valor(19) = "Alta")then
					AlarmSource.LoSeverity 		  = 0
				elseif (valor(19) = "Média")then
					AlarmSource.LoSeverity 		  = 1
				else
					AlarmSource.LoSeverity 		  = 2
				end if
			end if
			
			if (valor(13) = 1) then
				AlarmSource.Hi 			  		   = valor(13)
				AlarmSource.HiLimit 	  		   = valor(25)
				AlarmSource.HiMessageText 		   = valor(21)
				
				if (valor(17) = "Alta")then
					AlarmSource.HiSeverity 		  = 0
				elseif (valor(17) = "Média")then
					AlarmSource.HiSeverity 		  = 1
				else
					AlarmSource.HiSeverity 		  = 2
				end if
			end if
			
			if (valor(14) = 1) then
				AlarmSource.HiHi		  		   = valor(14)
				AlarmSource.HiHiLimit 	  		   = valor(26)
				AlarmSource.HiHiMessageText 	   = valor(22)
				
				if (valor(18) = "Alta")then
					AlarmSource.HiHiSeverity 		  = 0
				elseif (valor(18) = "Média")then
					AlarmSource.HiHiSeverity 		  = 1
				else
					AlarmSource.HiHiSeverity 		  = 2
				end if
			end if
	else
		set AlarmDigital = DtFolder.AddObject("DigitalAlarmSource", True, "AlarmeDigital" & valor(0))
			AlarmDigital.Source 		  		  = "Dados." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & "." & valor(4) & ".Value"
			AlarmDigital.DigitalReturnMessageText = valor(12)
			AlarmDigital.AlarmVerify   		   	  = valor(2)
			
			if (valor(10) = "True") then
				AlarmDigital.Digital = True
			else
				AlarmDigital.Digital = False
			end if
			
			AlarmDigital.DigitalMessageText 	  = valor(11)
			if (valor(9) = "Alta")then
				AlarmDigital.DigitalSeverity 		  = 0
			elseif (valor(9) = "Média")then
				AlarmDigital.DigitalSeverity 		  = 1
			else
				AlarmDigital.DigitalSeverity 		  = 2
			end if
			AlarmDigital.DigitalAckRequired 	  = valor(8)
	end if
Next

set Hist = DtFolder.AddObject("Teste", False, "Teste")
	Hist.nome = Application.GetObject("Dados.DadosCadPonto.spNome").Value
	Hist.Links.CreateLink "nivel", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[NIVEL_%].Value", 0
	Hist.Links.CreateLink "VR", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[CORRENTE].Value", 0
	Hist.Links.CreateLink "VS", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[CORRENTE].Value", 0
	Hist.Links.CreateLink "VT", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[CORRENTE].Value", 0
	Hist.Links.CreateLink "Fator", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[CORRENTE].Value", 0
	Hist.Links.CreateLink "IM", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[CORRENTE].Value", 0
	Hist.Links.CreateLink "Horim1", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[HORIMETRO].Value", 0
	Hist.Links.CreateLink "Horim2", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[HORIMETRO].Value", 0
	Hist.Links.CreateLink "TOT_MB01", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[N_PARTIDAS].Value", 0
	Hist.Links.CreateLink "TOT_MB02", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[N_PARTIDAS].Value", 0
	Hist.Links.CreateLink "CO1", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.STATUS_BITS.Bit09", 0
	Hist.Links.CreateLink "Estado1", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[ESTADO_INV].Value", 0
	Hist.Links.CreateLink "Estado2", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[ESTADO_INV].Value", 0
	Hist.Links.CreateLink "Cod_rastro1", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[CODIGO_BOMBA].Value", 0
	Hist.Links.CreateLink "Cod_rastro2", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[CODIGO_BOMBA].Value", 0
	Hist.Links.CreateLink "FALHA_INV1", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[FALHA_ATUAL].Value", 0
	Hist.Links.CreateLink "FALHA_INV2", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[FALHA_ATUAL].Value", 0
	Hist.Activate
	
Dados.Save

set Teste = Application.GetObject("Dados." & Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".Teste")

end if

O que pode ser?

Oi Wagner, bom dia!

Para encontrar o problema de forma mais rápida, seria interessante me enviar por e-mail o log do E3 do período do teste e aplicação, meu e-mail é marco@elipse.com.br.

Após analise, voltaria a postar a informação no fórum para compartilhamento na comunidade.

Qualquer dúvida estou à disposição.

Atenciosamente,
Marco Antonio

1 Like

@marco, bom dia!

Estou te enviando o log.

Obrigado.

1 Like

Oi Wagner, boa tarde!

Observando as mensagens de erro no log (imagens abaixo), me parece que o script não está configurando a propriedade TableName do histórico, por isso, a tabela não está sendo criada e consequentemente, não estão disponíveis para acesso.

Olhando seu script, acredito que ele pode ser melhorado, mas para isso, tenho que entender melhor a forma de uso, para sugerir mudanças que podem lhe proporcionar melhor desempenho.

Qualquer dúvida estou à disposição.

Atenciosamente,
Marco Antonio

1 Like

Boa tarde.

Funcionou perfeitamente!

Quanto ao script, eu aceito sugestões de melhorias.

Confesso que eu fiz rapidamente para testar algumas funcionalidades (RunTime)… aí não deu tempo para melhorar o código.

Agradeço a ajuda!!