Skip to the content.

Exemplo de Manipulação de Instruções SQL

A classe SysLibSql tem como principal objetivo permitir a escrita de códigos mais curtos e legíveis ao manipular instruções SQL. Podemos considerar que manipular dados gravados no BD do ERP faz parte de praticamente qualquer customização, portanto, essa classe pode agilizar bastante o desenvolvimento.

user function SqlSample()

  local cMsg   := ""
  local cQuery := ""
  local oSql   := SysLibSql():new()

  cQuery := " SELECT E1_NUM [NUMBER], E1_VENCTO [DUE_DATE] "
  cQuery += " FROM %SE1.SQLNAME% "
  cQuery += " WHERE %SE1.XFILIAL% AND E1_VENCTO < '" + DtoS(dDataBase) + "' AND "
  cQuery += "       E1_SALDO > 0 AND %SE1.NOTDEL% "

  oSql:newAlias(cQuery)
  oSql:setDateFields({"DUE_DATE"})

  while oSql:notIsEof()

    cMsg += CRLF
    cMsg += oSql:getValue("NUMBER")
    cMsg += " - "
    cMsg += oSql:getValue("DtoC(DUE_DATE)")

    oSql:skip()
  endDo

  oSql:close()

  MsgInfo("Título(s) vencido(s): " + cMsg)

return

Caso queira fazer uma query simples em apenas uma tabela:

user function SqlSample2()

  local cMsg := ""
  local oSql := SysLibSql():new()

  oSql:newTable("SB1", "B1_COD, B1_DESC", "%SB1.XFILIAL% AND B1_TIPO = 'ME'")

  if !oSql:hasRecords()
    oSql:close()
    return Alert("Nenhum produto tipo ME")
  endIf

  while oSql:notIsEof()

    cMsg += CRLF
    cMsg += oSql:getValue("AllTrim(B1_COD)")
    cMsg += " - "
    cMsg += oSql:getValue("AllTrim(B1_DESC)")

    oSql:skip()
  endDo

  oSql:close()

  MsgInfo("Produtos tipo ME: " + cMsg)

return

Se precisar obter um campo de uma tabela:

user function SqlSample3()

  local oSql  := SysLibSql():new()
  local cName := oSql:getFieldValue("SA3", "A3_NOME", "%SA3.XFILIAL% AND A3_COD = 'V00001'")

  MsgInfo("O nome do vendedor é " + cName)

return

Também é possível incluir, alterar e remover registros através da SysLibSql:

user function SqlSample4()

  local oSql    := SysLibSql():new()
  local cAlias  := "SB1"
  local cFields := "B1_MSBLQL = '1', B1_ZZST = '0'"
  local cWhere  := "%SB1.XFILIAL% AND B1_COD = 'P00001'"

  if !oSql:exists(cAlias, cWhere)
    return MsgAlert("Produto não encontrado")
  endIf

  if oSql:update(cAlias, cFields, cWhere)
    MsgInfo("Produto bloqueado")
  else
    Alert(oSql:getLastError())
  endIf

return


Voltar