Consulta sem E3Browser

Necessito consultar se uma informação passda pelo operador já foi inserida no Banco de dados, mas preciso que isso ocorra no evento de um botão, ou seja sem usar um E3Browser

Existem diversas maneiras, uma delas pode ser da seguinte forma:

Sub btn_Click()
	Dim objQuery
	Dim objRs
	Dim vValue
	
	' Se string, usar aspas simples.
	vValue = "'ValorDoReg'"
	
	Set objQuery = Screen.AddObject("E3Query", True)
	objQuery.DataSource = "NomeDoBancoDeDados"
	objQuery.SQL = "SELECT [NomeDaColuna] " & _
				   "FROM [NomeDaTabela] " & _
				   "WHERE [NomeDaColuna] LIKE " & vValue
	
	Set objRs = objQuery.GetADORecordset()
	
	If (objRs.RecordCount > 0) Then
		MsgBox "Informação já inserida", vbInformation
	Else
		MsgBox "Informação NÃO inserida", vbExclamation
	End If
	
	Screen.DeleteObject( objQuery.PathName )
End Sub
1 Like

@leandrobpedro, obrigado pelo retorno. Inseri o scrip conforme abaix, não apresenta erro, mas embora eu tenha a informação no banco ele não localiza permitindo inserir o dado duplicado.

Sub CommandButton4_Click()
Dim objQuery
Dim objRs
Dim vValue
Dim idValor

' Se string, usar aspas simples.
idValor = Screen.Item("tx_ID_Trilho").Value
vValue = "'tx_ID_Trilho'"	

Set objQuery = Screen.AddObject("E3Query", True)

objQuery.DataSource = "Historico"
objQuery.SQL = "SELECT IDTrilho " & _
			   "FROM Hist_Segmento " & _
			   "WHERE IDTrilho LIKE " & vValue				   				   		   			  
			   				   
Set objRs = objQuery.GetADORecordset()


If (objRs.RecordCount > 0) Then
	MsgBox "Informação já inserida", vbInformation
Else
	Application.GetObject("Dados.Dados_Processo.ID_Trilho").Value = idValor
	MsgBox "Id Registrado com Sucesso", vbExclamation		
End If
Screen.DeleteObject( objQuery.PathName )

Suponho que você esteja verificando se o valor de "Dados.Dados_Processo.ID_Trilho" já esteja inserido no banco na coluna IDTrilho, correto?

Qual o datatype desta coluna? int, varchar, …?

@leandrobpedro, Correto! Pelo SQL Manager a variável é: nvarchar(20)

Sub CommandButton4_Click()
	Dim objQuery
	Dim objRs
	Dim sIdTrilho

	sIdTrilho = Screen.Item("tx_ID_Trilho").Value

	Set objQuery = Screen.AddObject("E3Query", True)

	objQuery.DataSource = "Historico"
	objQuery.SQL = "SELECT IDTrilho " & _
				   "FROM Hist_Segmento " & _
				   "WHERE IDTrilho LIKE '" & sIdTrilho & "'"		   				   		   			  
				   				   
	Set objRs = objQuery.GetADORecordset()

	If (objRs.RecordCount > 0) Then
		MsgBox "Informação já inserida", vbInformation
	Else
		Application.GetObject("Dados.Dados_Processo.ID_Trilho").Value = sIdTrilho
		MsgBox "Id Registrado com Sucesso", vbExclamation		
	End If
	
	Screen.DeleteObject( objQuery.PathName )
End Sub

@leandrobpedro, com esse script todas as consultas estão retornando como dado existente.

@leandrobpedro, encotrei um tópico que deu uma luz…
A única coisa é que tive que inserir uma consulta na tela.
Verificando a existência de um registro no banco de dados. (elipse.com.br)

Tente colocar o foco no botão antes de fazer a consulta:

Sub CommandButton4_Click()
	Dim objQuery
	Dim objRs
	Dim sIdTrilho

	Me.SetFocus()

	sIdTrilho = Screen.Item("tx_ID_Trilho").Value

	Set objQuery = Screen.AddObject("E3Query", True)

	objQuery.DataSource = "Historico"
	objQuery.SQL = "SELECT IDTrilho " & _
				   "FROM Hist_Segmento " & _
				   "WHERE IDTrilho LIKE '" & sIdTrilho & "'"		   				   		   			  
				   				   
	Set objRs = objQuery.GetADORecordset()

	If (objRs.RecordCount > 0) Then
		MsgBox "Informação já inserida", vbInformation
	Else
		Application.GetObject("Dados.Dados_Processo.ID_Trilho").Value = sIdTrilho
		MsgBox "Id Registrado com Sucesso", vbExclamation		
	End If
	
	Screen.DeleteObject( objQuery.PathName )
End Sub
1 Like

@leandrobpedro, Obrigado pela ajuda! Deu certo aqui…