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