Páginas filhas
  • FWTemporaryTable

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Aviso
titleEm construção

Atenção: Página em construção!!

 

 

 

 
Painel
bgColorWhite
titleFWTemporaryTable

Descrição

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


Nota
titlePré-requisito

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.




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

 

Descrição

Classe para criação e manipulação de tabelas temporárias no BD
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. 

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.

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

 
Painel

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
titleGetTableNameForQuery

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)

Painel
titleGetAliastitleInsertIntoSelect

Sintaxe

FWTemporaryTable():InsertIntoSelectGetAlias( <aFieldsTo>, <cTableFrom> , <aFieldsFrom> )) -> cAlias


Descrição

Retorna o alias utilizado pelo arquivo.

Painel
titleSetFields

Sintaxe

FWTemporaryTable():SetFields( <aFields> )


Descrição

Define os campos da estrutura.

 

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

aFieldsTo
aFieldsArray

Array

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

 

 

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


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
firstline1
titleExemplo
linenumberstrue
collapsetrue
#include 'protheus.ch'
User Function ExFWTemporaryTable()
Local aFields := {}
Local oTempTable
Local nI
Local cAlias := "MEUALIAS"
Local cQuery
//

 

Bloco de código
themeEclipse
titleExemplo
firstline1
linenumberstrue
User function teste_stepwiz()
Local oPanel
Local oNewPag
Local cNome   := ""
Local cFornec := ""
Local cCombo1 := ""
Local oStepWiz := nil
Local oDlg := nil
Local oPanelBkg
DEFINE DIALOG oDlg TITLE 'aaaaa' PIXEL 
oDlg:nWidth := 1100 
oDlg:nHeight := 800 
oPanelBkg:= tPanel():New(20,70,"",oDlg,,,,,,300,300)
oStepWiz:= FWWizardControl():New(oPanelBkg)//Instancia a classe FWWizard
oStepWiz:ActiveUISteps()

//----------------------
//Criação Paginado 1objeto
//----------------------
oNewPagoTempTable := oStepWiz:AddStep("1")
//Altera a descrição do step
oNewPag:SetStepDescription("Primeiro passo")
//Define o bloco de construção
oNewPag:SetConstruction({|Panel|cria_pg1(Panel, @cNome, @cFornec)})
//Define o bloco ao clicar no botão Próximo
oNewPag:SetNextAction({||valida_pg1(@cNome, @cFornec)})
//Define o bloco ao clicar no botão Cancelar
oNewPag:SetCancelAction({||Alert("Cancelou na pagina 1"), .T.})

//FWTemporaryTable():New( cAlias )
//--------------------------
// Pagina 2Monta os campos da tabela
//----------------------
oNewPag := oStepWiz:AddStep("2", {|Panel|cria_pg2(Panel, @cCombo1)})
oNewPag:SetStepDescription("Segundo passo")
oNewPag:SetNextAction({||valida_pg2(@cCombo1)})
//Define o bloco ao clicar no botão Voltar
oNewPag:SetCancelAction({||Alert("Cancelou na pagina 2"), .T.})
oNewPag:SetPrevAction({||Alert("Ops, voce não pode voltar a partir daqui"), .F.})
oNewPag:SetPrevTitle("Voltar(ou não)")

//----------------------
// Pagina 3
//----------------------
oNewPag := oStepWiz:AddStep("3", {|Panel|cria_pn3(Panel)})
oNewPag:SetStepDescription("Terceiro passo")
oNewPag:SetNextAction({||Alert("Fim"), .T.})
oNewPag:SetCancelAction({||Alert("Cancelou na pagina 3"), .T.})
oNewPag:SetCancelWhen({||.F.})
oStepWiz:Activate()
ACTIVATE DIALOG oDlg CENTER 
oStepWiz:Destroy()
Return

----
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"} )
//--------------------------
// ConstruçãoCriação da página 1tabela
//--------------------------
Static Function cria_pg1(oPanel, cNome, cFornec)
Local oTGet1
Local oTGet2
oSay1:= TSay():New(10,10,{||'Cliente'},oPanel,,,,,,.T.,,,200,20) 
cNome := Space(30)
oTGet1 := TGet():New( 20,10,{|u| if( PCount() > 0, cNome := u, cNome ) } ,oPanel,096,009,"@!",,0,,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F.,,cNome,,,, )
oSay2:= TSay():New(40,10,{||'Fornecedor'},oPanel,,,,,,.T.,,,200,20) 
cFornec := Space(30)
oTGet2 := TGet():New( 50,10,{|u| if( PCount() > 0, cFornec := u, cFornec ) },oPanel,096,009,"@!",,0,,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F.,,cFornec,,,, )
Return
 

//---
oTempTable:Create()

//-------------------------------------
//Executa Validaçãoquery dopara botãoleitura Próximo da página 1tabela
//----------------------------------------
Static Function valida_pg1(cNome, cFornec)
MsgInfo("Cliente: " + cNome + chr(13)+chr(10) + "Fornecedor: " + cFornec)
Return .T.

//--------------------------
// Construção da página 2
//--------------------------
Static Function cria_pg2(oPanel, cCombo1)
Local aItems := {'Item1','Item2','Item3'}
Local oCombo1
cCombo1:= aItems[1]    
oCombo1 := TComboBox():New(20,20,{|u|if(PCount()>0,cCombo1:=u,cCombo1)},aItems,100,20,oPanel,,{|| },,,,.T.,,,,,,,,,'cCombo1')
Return
 

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 Validação do botão Próximo da página 2a tabela 
//----------------------------------------
Static Function valida_pg2(cCombo1)
Local lRet := .F.
If cCombo1 == 'Item3'
	lRet := .T.
Else
	Alert("Você selecionou: " + cCombo1 + " para prossegir selecione Item3")
EndIf
Return lRet

//--------------------------
// Construção da página 3
//--------------------------
Static Function cria_pn3(oPanel)
Local oBtnPanel := TPanel():New(0,0,"",oPanel,,,,,,40,40)
oBtnPanel:Align := CONTROL_ALIGN_TOP
oTButton1 := TButton():New( 010, 010, "Botão 01",oBtnPanel,{||alert("Botão 01")}, 80,20,,,.F.,.T.,.F.,,.F.,,,.F. )
oTButton2 := TButton():New( 010, 0200, "Botão 02",oBtnPanel,{||alert("Botão 02")}, 80,20,,,.F.,.T.,.F.,,.F.,,,.F. )
Return
Painel
titleWizard gerado com o fonte de exemplo
Image Removed

oTempTable:Delete() 

return