Page tree
Skip to end of metadata
Go to start of metadata

Informa se um objeto existe no SGBD conectado.

Sintaxe

TCObject( < cObject >, [ @cType ] )

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

cObject

caractere

Indica o nome do objeto que será procurado.

X


cType

caractere

Indica o tipo do objeto procurado.


X

Retorno

Nome

Tipo

Descrição

lRet

lógico

Retorna verdadeiro (.T.) se o objeto existir no SGBD em que está conectado; caso contrário, falso (.F.).

Observações

  • É necessário conexão com o DBAccess para uso desta função.
  • Caso a função não esteja na DBAPI (biblioteca client do DBAccess), o programa será encerrado com ocorrência de erro recuperável "TC_Object NOT FOUND - Check DBAPI and DBAccess version".
  • Caso haja erro de conexão com o DBAccess, o programa será encerrado com ocorrência de erro recuperável "TC_Object - NO CONNECTION".
  • Não é necessário ter um alias aberto para o uso da função.
  • Se for informado, o parâmetro cType conterá o nome do tipo do objeto que é informado pelo SGBD.

Considerações sobre os diversos SGBDs

Informix

  • No Informix existe o conceito de sobrecarga de functions e procedures, desde que tenham quantidades e tipos de parâmetros diferentes. Como o único parâmetro informado é o nome do objeto, a função pode retornar um falso positivo, pois não irá levar em conta os parâmetros.
  • Os nomes dos objetos devem ser únicos para cada database, não possuindo o conceito de namespace que existe no Oracle, por exemplo.

PotsgreSQL

  • O SGBD possui o conceito de mais de um schema para um mesmo database, que também é chamado de namespace, e os nomes dos objetos devem ser diferentes dentro de cada schema.
  • Os nomes das triggers devem ser únicos para uma mesma tabela, podendo existir nomes repetidos em tabelas diferentes, logo, as triggers não estão sendo listadas para a função.
  • Functions e procedures não possuem diferenciação, devendo ter nomes diferentes.

MySQL

  • Schema e database são sinônimos, e os nomes dos objetos devem ser diferentes dentro de cada schema.

DB2

  • O SGBD possui o conceito de mais de um schema para um mesmo database, e os nomes dos objetos devem ser diferentes dentro de cada schema.

Oracle

  • O SGBD possui o conceito de mais de um namespace para um mesmo database, e os nomes dos objetos devem ser diferentes dentro de cada namespace.
  • Índices são criados em um namespace diferente do namespace de tabelas, views, functions e procedures, e de triggers.
  • Por causa desse comportamento de namespaces, a diferenciação de objetos é feita pelo nome do owner, que também é um schema, e que não deve ter nomes repetidos de objetos.

MS SQL Server

  • O SGBD possui o conceito de mais de um schema para um mesmo database, e os nomes dos objetos devem ser diferentes dentro de cada schema.

Exemplos

user function test1()
  Local nHandle := -1
  Local cType := ""
  Local lRet := ""
  
  // Conecta no SGBD
  nHandle := TCLink( "MSSQL/DSN1", "127.0.0.1", 7890 )
  
  conout( TCObject( "TOPFIELD" ) ) // Exibe: .F.

  lRet := TCObject( "TOPFIELD", @cType )
  conout( lRet ) // Exibe: .F.
  conout( cType ) // Exibe um string vazia
  
  conout( TCObject( "TOP_FIELD" ) ) // Exibe: .T.
  
  lRet := TCObject( "TOP_FIELD", @cType )
  conout( lRet ) // Exibe: .T.
  conout( cType ) // Exibe o nome do tipo tabela que é utilizado pelo SGBD
  
  // Desconecta do SGBD
  TCUnlink( nHandle )
return

Abrangência

TCObject está disponível a partir da build 7.00.170117A do AppServer com data de geração superior a 23/03/2017 e a partir da build 20170202 do DBAccess com data de geração superior a 23/03/2017.

O parâmetro cType está disponível a partir da build 7.00.170117A do AppServer com data de geração superior a 31/03/2017 e a partir da build 20170202 do DBAccess com data de geração superior a 31/03/2017.

A DBAPI que será utilizada com o AppServer deve ser compatível com o DBAccess que será utilizado.

Veja também

  • No labels