Retorna um bloco de código para um determinado campo da tabela corrente.

Sintaxe

FieldBlock( < cField > )

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

 

Retorno

Nome

Tipo

Descrição

bRet

bloco de código

Retorna o bloco de código para o campo especificado no alias atual.

Observações

Essa função é utilizada para retornar um bloco de código executável com o campo especificado.

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:

&( "{ | Valor | IIf( Valor == Nil, Campo, Campo := Valor ) }" )

Sendo:

Campo = Parâmetro da função FieldBlock
Valor = Valor executado no bloco de código

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 cTable1  := "MYTABLE"
  Local cRDD     := "TOPCONN"
  Local aStruct  := {}
  Local aBlocks  := {}
  Local aValues  := {}
  Local nI       := 0
  Local nJ       := 0
  Local nLen     := 0
  Local nRecs    := 0
  Local xValue
  
  // Cria a tabela
  DBCreate( cTable1, { { "CPOC", "C", 10, 0 }, ;
                       { "CPON", "N",  3, 0 }, ;
                       { "CPOD", "D",  8, 0 }, ;
                       { "CPOL", "L",  1, 0 }, ;
                       { "CPOM", "M", 20*1024, 0 } }, cRDD )
  
  // Abre a tabela 1 em modo exclusivo criando uma área de trabalho
  DBUseArea( .T., cRDD, cTable1, (cTable1), .F., .F. )
  
  // Pega a estrutura da tabela
  aStruct := DBStruct()
  nLen    := Len( aStruct )
  
  // Pega um codeblock para cada campo do tabela passando o nome do campo
  for nI := 1 to nLen
    AAdd( aBlocks, FieldBlock( aStruct[nI][1] ) )
  next nI
  
  // Define os valores dos registros que serão inseridos
  AAdd( aValues, { "AAA", 123, Date(), .T., Replicate( "A", 20*1024 ) } )
  AAdd( aValues, { "BBB", 321, Date() + 10, .F., Replicate( "B", 20*1024 ) } )
  nRecs := Len( aValues )
  
  // Insere os registros
  for nI := 1 to nRecs
    DBAppend( .F. )
    
    // Faz o Eval do bloco de código informando o valor
    // Isso irá fazer a atribuição do valor ao campo
    for nJ := 1 to nLen
      Eval( aBlocks[nJ], aValues[nI][nJ] )
    next nJ
    
    DBCommit()
  next nI
  
  // Vai para o primeiro registro
  DBGoTop()
  
  while !eof()
    // Exibe o conteúdo de cada campo do registro
    for nI := 1 to nLen
      conout( Eval( aBlocks[nI] ) )
    next nI
    
    DBSkip()
  enddo
  
  // Fecha a área de trabalho
  DBCloseArea()
  
  // Apaga a tabela no SGBD
  TCDelFile( cTable1 )
  
  // Desconecta
  TCUnlink( nHandle1 )
return

Veja também

  • Sem rótulos