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.