UPDATE SQL Através de Identificador em Combobox

Pessoal fiz um código em SQL para UPDATE em tabelas, porém a ideia será selecionar a tabela através de uma Combobox, um botão pega o valor da Combobox e passa para o parâmetro do banco SQL e realiza o UPDATE de acordo com a tabela selecionada na Combobox, porém ainda não está executando corretamente.

UPDATE <%Tabela%> SET ReceitaA = <%ReceitaA%>, ReceitaB = <%ReceitaB%> WHERE E3TimeStamp BETWEEN #<%DataInicial%># AND #<%DataFinal%>#

Em algumas pesquisas, encontrei que o UPDATE não aceita Identificadores para o nome da tabela, caso não aceite, alguém tem uma ideia de como contornar isto?

Boa tarde, você pode Habilitar a edição direta SQL na consulta e enviar toda a instrução SQL

Para inserir este código aí, você precisa habilitar senão não consegue nem escrever ele.
A dúvida é outra, o comando UPDATE pelo que entendi não aceita parâmetros da tabela, já adiantei fazendo uma PROCEDURE, porém passando os parâmetros na Query funciona, mas escrevendo através de um comando Click não funciona.

Qual a versão do Elipse?

Sua abordagem de filtro/seleção de tabela por variáveis do elipse deveria funcionar.

Sub UpdateTable_Click()

	SetFocus()
	
	Dim tableName
    tableName = Screen.Item("cboTableName").Value

    If tableName = "" Then
        Msgbox "Por favor, selecione uma tabela.", vbExclamation, "Erro"
        Exit Sub
    End If
    
    Dim query
    Set query = Application.GetObject("Dados.UpdateTable")    ' Caminho para sua consulta

    query.SetVariableValue "Tabela", tableName
    ' TO-DO: demais campos...

    query.Execute()  ' IMPORTANTE: método para executar comando SQL sem retorno
  	
End Sub

Porém, a ideia do @AfonsoCalado seria editar diretamente a String da consulta:

Sub UpdateTable()

    Dim tableName
    tableName = Screen.Item("cboTableName").Value

    If tableName = "" Then
        Msgbox "Por favor, selecione uma tabela.", vbExclamation, "Erro"
        Exit Sub
    End If

    Dim recipeA, recipeB
    recipeA = Screen.Item("txtReceitaA").Value
    recipeB = Screen.Item("txtReceitaB").Value

    ' TO-DO: Validação de receitas

    Dim dtIni, dtEnd
    ' TO-DO: Formatar das corretamente para o SQL se necessário
    dtIni = Screen.Item("txtDataInicial").Value
    dtEnd = Screen.Item("txtDataFinal").Value

    ' TO-DO: Validação de datas

    Dim strQuery
    strQuery = "UPDATE " & tableName & _
              " SET ReceitaA = " & recipeA & ", ReceitaB = " & recipeB & _
              " WHERE E3TimeStamp BETWEEN #" & dtIni & "# AND #" & dtEnd & "#"

    Dim query
    Set query = Application.GetObject("Dados.UpdateTable")    ' Caminho para sua consulta
    query.SQL = strQuery

    query.Execute ' <<< IMPORTANTE

End Sub

:link: E3Query - Execute()

A versão é um pouco antiga 4.7.300

Não testei seu código ainda mas testarei, mas atual esta desta forma
image

Tenhos os parametros da Query de uma Procedure
image

Quando executo através do Visualizar é realizado o UPDATE no Banco de Dados.

Na tela onde tenho o botão UPDATE


Tenho o seguinte código
Sub Bt_Update_Click()
Dim RecA, RecB, Table
Dim DataIni, DataFim

' ==== LEITURA DOS CAMPOS ====
DataIni = Screen.Item("Sp_DataIn").Value
DataFim = Screen.Item("Sp_DataFim").Value
RecA = Screen.Item("Sp_ReceitaA").Value
RecB = Screen.Item("Sp_ReceitaB").Value
Table = Screen.Item("Sp_Cam").Value    
  
' ==== VALIDAÇÕES BÁSICAS (para evitar erros na procedure) ====
If Table = "" Then
    MsgBox "Por favor, selecione uma tabela."
    Exit Sub
End If
If DataIni > DataFim Then
    MsgBox "A data inicial não pode ser maior que a data final."
    Exit Sub
End If
If Len(RecA) > 20 Or Len(RecB) > 20 Then
    MsgBox "Os valores de ReceitaA e ReceitaB não podem exceder 20 caracteres."
    Exit Sub
End If

' ==== EXECUÇÃO ====
Set Escrita = Screen.Item("E3Browser1").Item("Update")
Escrita.SetVariableValue "Tabela", Table
Escrita.SetVariableValue "ReceitaA", RecA
Escrita.SetVariableValue "ReceitaB", RecB
Escrita.SetVariableValue "DataInicial", DataIni
Escrita.SetVariableValue "DataFinal", DataFim
Escrita.Execute True
Set Escrita = Nothing
Screen.Item("E3Browser1").Requery    
MsgBox "Atualização executada"
Exit Sub

End Sub

Aqui quando é executado, é informado a mensagem de atualização executada, porém não altera nada no banco de dados.

Para o botão

Execute a consulta pelo botão e verifique, no Elipse Event Log Viewer, os eventos filtrados por Module == ("ADO");

766 2026-03-03 11:29:57.699 0x1EC8 0x342C SQLDBCONNECTION (‘DESKTOP-DBPRR6T\SQLEXPRESS/Marfrig’) ErrorLocal = ExecuteSql Function Error, sql string = EXEC AtualizarReceitas @Tabela = “Camara 5B”, @ReceitaA = “Reforço”, @ReceitaB = “Reforço”, @DataInicial = ‘2025-12-18 07:00:00.000’, @DataFinal = ‘2025-12-18 10:58:00.000’ SELECT E3TimeStamp, ReceitaA, ReceitaB FROM Camara 5B WHERE E3TimeStamp BETWEEN ‘2025-12-18 07:00:00.000’ AND ‘2025-12-18 10:58:00.000’ ORDER BY E3TimeStamp ASC Error #0x80040E14 Description:Incorrect syntax near ‘5’. (Source: Microsoft OLE DB Provider for SQL Server) (SQL State: 42000) (NativeError: 102) 14

Aparentemente o erro está no nome da tabela com o uso de espaço:

FROM Camara 5B
--         ^ 

Se de fato há espaço no nome da tabela usa-se colchetes, e.g.: [Camara 5B].

Além disso, seria importante validar essa query, a fim de entender por que a string está sendo construida com aspas duplas, quando o correto seria aspas simples:

@Tabela = '[Camara 5B]'

:man_facepalming::man_facepalming::man_facepalming::man_facepalming::man_facepalming::man_facepalming:

Rapaz foi descuido, agora que percebi, tenho um código para mover o valor certo “Camara_5B”, porém peguei o Value do Combobox
Na combobox, executo um Select Case, para ir passando o valor correto e não aparecer para o operador o nome com o underline.
Vacilo meu aqui, ainda não testei, mas é isto mesmo.