FWTemporaryTable

Descrição

Classe para criação e manipulação de tabelas temporárias no BD


Pré-requisito

TOTVS|DBAccess 4.2 Server com build igual ou superior à 20141119 (Mar 12 2015).

Importante:

Devido as características do TempDB, uma tabela temporária só é visível para a thread que realizou a sua criação, não sendo possível compartilhar a mesma tabela entre vários processos.




New

Sintaxe

FWTemporaryTable():New( [<cAlias>], [<aFields>] )-> Objeto FWTemporaryTable


Descrição

Método para instanciar a classe


Parâmetros


Nome

Tipo

Descrição

Default

Obrigatório

Referência

cAlias

Caracter

Alias a ser utilizado pela tabela.

GetNextAlias



aFields

Array

Array com estrutura de campos:
[1] Nome
[2] Tipo
[3] Tamanho
[4] Decimal

{}



Create

Sintaxe

FWTemporaryTable():Create()


Descrição

Método responsável pela criação da tabela


Delete

Sintaxe

FWTemporaryTable():Delete()


Descrição

Método responsável por efetuar a exclusão da tabela, e fechar o alias


Retorno

Retorna um Logical conforme a deleção da tabela ter sido efetuada corretamente (a partir da LIB versão 20193101)

AddIndex

Sintaxe

FWTemporaryTable():AddIndex( <cIndexName>, <aFields> )


Descrição

Adiciona um índice na tabela. 


Parâmetros

Nome

Tipo

Descrição

Default

Obrigatório

Referência

cIndexName

Caracter

Nome do índice com no máximo 2 caracteres



aFields

Array

Array com os campos a serem utilizados no índice:
[1] Nome



GetRealName

Sintaxe

FWTemporaryTable():GetRealName() -> cRealName


Descrição

Retorna o nome com o qual a tabela foi criada no BD. 

GetTableNameForTCFunctions

Sintaxe

FWTemporaryTable():GetTableNameForTCFunctions() -> cTableName


Descrição

Retorna o nome da tabela para ser usado em funções do DBAccess, como
TCStruct, TCRefresh, FwBulk entre outras

(disponível a partir da LIB versão 20210517)

GetTableNameForQuery

Sintaxe

FWTemporaryTable():GetTableNameForQuery() -> cRealName


Descrição

Retorna o nome da tabela para ser usado no caso de querys, é o mesmo
método que o GetRealName, foi criado apenas para deixar mais
explicíto em seu nome qual o seu intuito

(disponível a partir da LIB versão 20210517)

GetAlias

Sintaxe

FWTemporaryTable():GetAlias( ) -> cAlias


Descrição

Retorna o alias utilizado pelo arquivo.

SetFields

Sintaxe

FWTemporaryTable():SetFields( <aFields> )


Descrição

Define os campos da estrutura.

Nome

Tipo

Descrição

Default

Obrigatório

Referência

aFieldsArray

Array com estrutura de campos:
[1] Nome
[2] Tipo
[3] Tamanho
[4] Decimal


X
Zap

Sintaxe

FWTemporaryTable():Zap()


Descrição

Limpa todos os registros da tabela temporária. Caso seja gerado algum erro no momento do zap o sistema é abortado.


Importante

Método disponível a partir da lib label 20220321

SetClobMemo

Sintaxe

FWTemporaryTable():SetClobMemo(lClob)


Descrição

Informa a classe como serão criados os campos memo, se informado como .T., os campos serão criados no padrão CLOB, caso contrário os campos serão criados no padrão BLOB, que é a maneira padrão que o Protheus trabalha.


Parâmetros

Nome

Tipo

Descrição

Obrigatório

lClob

Logical

Se verdadeiro, indica se a tabela vai trabalhar com campos CLOB, caso contrário, o campo será criado como BLOB



Importante

Método disponível a partir da lib label 20220613

Fonte de exemplo: ExFWTemporaryTable.prw
Exemplo
#include 'protheus.ch'
User Function ExFWTemporaryTable()
Local aFields := {}
Local oTempTable
Local nI
Local cAlias := "MEUALIAS"
Local cQuery
//-------------------
//Criação do objeto
//-------------------
oTempTable := FWTemporaryTable():New( cAlias )
//--------------------------
//Monta os campos da tabela
//--------------------------
aadd(aFields,{"DESCR","C",30,0})
aadd(aFields,{"CONTR","N",3,1})
aadd(aFields,{"ALIAS","C",3,0})
oTemptable:SetFields( aFields )
oTempTable:AddIndex("01", {"DESCR"} )
oTempTable:AddIndex("02", {"CONTR", "ALIAS"} )
//------------------
//Criação da tabela
//------------------
oTempTable:Create()

//------------------------------------
//Executa query para leitura da tabela
//------------------------------------
cQuery := "select * from "+ oTempTable:GetRealName()
MPSysOpenQuery( cQuery, 'QRYTMP' )
DbSelectArea('QRYTMP')
while !eof()
	for nI := 1 to fcount()
		varinfo(fieldname(nI),fieldget(ni))
	next
	dbskip()
Enddo
	
//---------------------------------
//Exclui a tabela 
//---------------------------------
oTempTable:Delete() 

return



1 comentário

  1. Como criar um índice com DESCEND? Mais novo primeiro.