Amiguinho,
Voce precisa ter certeza que o nome do campo esta sendo criado corretamente.
...
bdN:="N" + trim(str(m)) // bdN assume N1,N2,...,N25
select bde // Seleciona o Banco depositário dos resultados
dbappend()
bde->&bdN:=1 // bde->(macro)bdN :=1
// se verdade :bde->n1:=1, bde-n2:=1, .... ,bde-n25:=1
// >>> Esta é a linha que o erro é apontado (linha xxxxx)
...
Quando voce não define a largura em uma função
str() ela pode assumir outra largura e o retorno não será o que voce deseja. Neste momento pode ser criado um nome de campo que não exista, exemplo
N0003,
N025, etc.
Portanto faça assim:
...
bdN:="N" + trim(str(m)) // bdN assume N1,N2,...,N25
select bde // Seleciona o Banco depositário dos resultados
dbappend()
? bdN // ******* PROVA DOS NOVE ******* //
bde->&bdN:=1 // bde->(macro)bdN :=1
// se verdade :bde->n1:=1, bde-n2:=1, .... ,bde-n25:=1
// >>> Esta é a linha que o erro é apontado (linha xxxxx)
...
Portanto apesar do
alxsts ter proposto o uso de
FieldPut(), esta função se sairia bem se realmente os campos forem criados na sequencia.
O uso de macro permite que o campo seja repassado mesmo que receba uma sequencia fora de ordem, exemplo: N1, N2, N15, N3, N18, N4, etc.
O uso de
FieldPut() é certeiro, mas exige que a tabela esteja estruturada na sequencia. O uso de macro é demorado e sua precisão não depende da ordem dos campos. Mas exige verificação se o mesmo realmente esta sendo bem montado.
Dica: a função
trim() é uma enganação. Use
AllTrim() quando for fazer montagens, ou um
rTrim() e
lTrim().
bdN:="N" + alltrim(str(m)) // bdN assume N1,N2,...,N25
Se voce padronizar os campos com um tamanho padrão ao invés de N1,N2,...,N11,N12 que visualmente mudam de tamanho, voce pode criá-los como N01,N02,...,N11,N12, onde todos os campos terão o mesmo tamanho no nome.
Neste caso voce passa a usar
strZero() que preenche com zeros à esquerda conforme o tamanho que voce quizer:
bdN:="N" + alltrim(strZero( m, 2 )) // bdN assume N1,N2,...,N25
Desta forma os numero de 1 a 9 aparecerão como 01, 02, ..., 09.