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