Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Painel
bgColorWhite
titleFWTemporaryTable

Descrição

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

 

Compatível Países:

Todos

Sistemas Operacionais:

Todos

Compatível às Bases de Dados:

Todos

Nível de Acesso:

Nível 1 (Acesso Clientes)

Idiomas:

Português, Inglês, Espanhol

Versão/Release

12.1.5


Nota
titlePré-requisito

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

 

Aviso
titleImportante:

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.




Painel
titleNew

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

{}

 

 



Painel
titleCreate

Sintaxe

FWTemporaryTable():Create()

 


Descrição

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

 


Painel
titleDelete

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)

Painel
titleAddIndex

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

 


 


Painel
titleGetRealName

Sintaxe

FWTemporaryTable():GetRealName() -> cRealName

 


Descrição

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

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)

 

Painel
titleInsertSelectGetTableNameForTCFunctions

Sintaxe

FWTemporaryTable():InsertSelectGetTableNameForTCFunctions( <cTableFrom> , <aFieldsFrom> ) -> cTableName

 


Descrição

Efetua carga de todos os campos baseada em um select de outra tabela, utilizando o padrão INSERT INTO SELECT.
Este método deve ser utilizado quando todos os campos da estrutura da tabela serão preenchidos.

Nome

Tipo

Descrição

Default

Obrigatório

Referência

cTableFrom

Caracter

Tabela da qual os valores serão carregados.

 

X

 

 

aFieldsFrom

Array

Array contendo o nome dos campos da tabela indicada, que deverão ser trazidos para carga

 

X

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)

 

Painel
titleInsertIntoSelectGetTableNameForQuery

Sintaxe

FWTemporaryTable():InsertIntoSelectGetTableNameForQuery( <aFieldsTo>, <cTableFrom> , <aFieldsFrom> ) ) -> cRealName


Descrição

Efetua carga de todos os campos baseada em um select de outra tabela, utilizando o padrão INSERT INTO SELECT.
Este método deve ser utilizado quando somente alguns campos da estrutura da tabela serão preenchidos.

Nome

Tipo

Descrição

Default

Obrigatório

Referência

aFieldsToArrayArray contendo o nome dos campos da tabela que deverão ser preenchidos X 
cTableFrom

Caracter

Tabela da qual os valores serão carregados.

 

X

 

aFieldsFrom

Array

Array contendo o nome dos campos da tabela indicada, que deverão ser trazidos para carga

 

X

Painel
titleGetAlias

Sintaxe

FWTemporaryTable():GetAlias( ) -> cAlias 


Descrição

Retorna o alias utilizado pelo arquivo.

Painel
titleSetFields

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 
 


X
Painel
titleZap

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.


Aviso
titleImportante

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

Painel
titleSetClobMemo

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



Aviso
titleImportante

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

Fonte de exemplo: ExFWTemporaryTable.prw
Bloco de código
languagecpp
themeEclipse
languagefirstlinecpp1
titleExemplo
firstline1
linenumberstrue
collapsetrue
#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("indice101", {"DESCR"} )
oTempTable:AddIndex("indice202", {"CONTR", "ALIAS"} )
//------------------
//Criação da tabela
//------------------
oTempTable:Create()

conout("Executando a cópia dos registros da tabela: " + RetSqlName("CT0") )
//--------------------------------------------------------------------------
//Caso o INSERT INTO SELECT preencha todos os campos, este será um método facilitador
//Caso contrário deverá ser chamado o InsertIntoSelect():
 // oTempTable:InsertIntoSelect( {"DESCR", "CONTR" } , RetSqlName("CT0") , { "CT0_DESC", "CT0_CONTR" } )
//--------------------------------------------------------------------------
oTempTable:InsertSelect( RetSqlName("CT0") , { "CT0_DESC", "CT0_CONTR", "CT0_ALIAS" } )

//------------------------------------
//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