Retorna um bloco de código para um campo de uma área de trabalho aberta.
Sintaxe
FieldWBlock( < cField >, < nWokArea > )
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Referência |
|---|---|---|---|---|
cField | caractere | Indica o nome do campo que será retornado o bloco de código. | X |
|
nWokArea | numérico | Indica o número da área de trabalho que será retornado o bloco de código. | X |
|
Retorno
Nome | Tipo | Descrição |
|---|---|---|
bRet | bloco de código | Retorna o bloco de código para o campo da área de trabalho informada. |
Observações
Essa função é utilizada para retornar um bloco de código executável com o campo de uma área de trabalho especificada.
Quando o bloco de código resultante é executado sem parâmetro, recupera o valor armazenado no campo. Mas, quando executado com um valor, define esse valor no determinado campo.
Portanto, o bloco de código retornado é similar a:
cAlias = Alias( Area )
&( "{ | Valor | IIf( Valor == Nil, cAlias->Campo, cAlias->Campo := Valor ) }" )
Sendo:
Area = Parâmetro nWokArea da função FieldWBlock
cAlias = Alias correspondente ao número informado em Area
Campo = Parâmetro cField da função FieldWBlock
Valor = Valor executado no bloco de código
Se o número da área de trabalho informada for inválido ou a área de trabalho não estiver aberta, o programa será encerrado com ocorrência de erro recuperável "Work area does not exist" e retornará Nil.
Caso haja erro na criação do bloco de código, o programa será encerrado com ocorrência de erro recuperável "CodeBlock definition error" e retornará Nil.
Caso o nome informado não exista no alias aberto, o bloco de código será criado, mas ocorrerá erro na execução do mesmo.
Exemplos
O exemplo abaixo utiliza a RDD "TOPCONN", mas a função pode ser utilizada com qualquer uma das RDDs válidas.
user function test1()
Local nHandle1 := TCLink( "MSSQL/DSN1", "127.0.0.1", 7890 )
Local aNames := { "MYTABLE1", "MYTABLE2" }
Local cRDD := "TOPCONN"
Local aNums := {}
Local aStruct := {}
Local aBlocks := {}
Local aValues := {}
Local nNames := 0
Local nLen := 0
Local nRecs := 0
Local nI := 0
Local nJ := 0
Local nK := 0
nNames := Len( aNames )
for nI := 1 to nNames
// Abre a tabela em modo exclusivo criando uma área de trabalho
DBUseArea( .T., cRDD, aNames[nI], (aNames[nI]), .F., .F. )
// Pega o número da área de trabalho aberta
AAdd( aNums, Select() )
// Pega os nomes dos campos da tabela
AAdd( aStruct, {} )
AEval( DBStruct(), { | x | AAdd( aStruct[nI], x[1] ) } )
// Pega os blocos de código de cada campo da tabela
AAdd( aBlocks, {} )
nLen := Len( aStruct[nI] )
for nJ := 1 to nLen
AAdd( aBlocks[nI], FieldWBlock( aStruct[nI][nJ], aNums[nI] ) )
next nJ
next nI
for nI := 1 to nNames
// Define os valores dos registros que serão inseridos
ASize( aValues, 0 )
if nI == 1
AAdd( aValues, { "AAA", 123 } )
AAdd( aValues, { "BBB", 321 } )
else
AAdd( aValues, { Date() + 1, .T. } )
AAdd( aValues, { Date() + 2, .F. } )
endif
nRecs := Len( aValues )
// Insere os registros
for nJ := 1 to nRecs
(aNames[nI])->( DBAppend( .F. ) )
// Faz o Eval do bloco de código informando o valor
// Isso irá fazer a atribuição do valor ao campo
for nK := 1 to nLen
Eval( aBlocks[nI][nK], aValues[nI][nJ][nK] )
next nK
(aNames[nI])->( DBCommit() )
next nJ
// Vai para o primeiro registro
(aNames[nI])->( DBGoTop() )
while !(aNames[nI])->( eof() )
// Exibe o conteúdo de cada campo do registro
for nJ := 1 to nLen
conout( Eval( aBlocks[nI][nJ] ) )
next nI
(aNames[nI])->( DBSkip() )
enddo
// Fecha a área de trabalho
(aNames[nI])->( DBCloseArea() )
// Apaga a tabela no SGBD
TCDelFile( aNames[nI] )
next nI
// Desconecta
TCUnlink( nHandle1 )
return