与标题一样,我在FOR循环中的第一个代码中存在错误:命令包含无法识别的短语。我在想方法字符串+变量是错误的。
ALTER TABLE table1 ADD COLUMN prod_n c(10)
ALTER TABLE table1 ADD COLUMN prm1 n(19,2)
ALTER TABLE table1 ADD COLUMN rbon1 n(19,2)
ALTER TABLE table1 ADD COLUMN total1 n(19,2)
有prm2 ......直到total5,其中数字代表月份。
FOR i=1 TO 5
REPLACE ALL prm+i WITH amount FOR LEFT(ALLTRIM(a),1)="P" AND
batch_mth = i
REPLACE ALL rbon+i WITH amount FOR LEFT(ALLTRIM(a),1)="R"
AND batch_mth = i
REPLACE ALL total+i WITH sum((prm+i)+(rbon+i)) FOR batch_mth = i
NEXT
ENDFOR
感谢您的帮助。
答案 0 :(得分:1)
你的意思是你有一个名为prm1,prm2,prm3 ... prm12的字段代表几个月你想要在循环中更新它们吗?如果是这样,你需要了解一个" fieldName"是一个名字"因此你需要使用"名称表达式"将它用作变量。那就是:
prm+i
不会工作但是:
( 'pro'+ ltrim(str(m.i)) )
那样。
例如,您的代码已修改:
For i=1 To 5
Replace All ('prm'+Ltrim(Str(m.i))) With amount For Left(Alltrim(a),1)="P" And batch_mth = m.i
Replace All ('rbon'+Ltrim(Str(m.i))) With amount For Left(Alltrim(a),1)="R" And batch_mth = m.i
* ????????? REPLACE ALL ('total'+Ltrim(Str(m.i))) WITH sum((prm+i)+(rbon+i)) FOR batch_mth = i
Endfor
但是,我必须承认,你的代码对我来说没有意义。也许如果你解释了你想要做的事情会更好,并用你期望的结果给出一些简单的数据(作为代码 - 你可以在foxite上使用FAQ 50来创建数据代码)。
答案 1 :(得分:1)
您在上面发布的代码存在许多问题。 Cetin已经提到过其中的一些,所以如果我复制其中的一些,我会道歉。
问题1 - 在 ALTER TABLE 命令中,我看不到您在哪里创建字段prm2,prm3,prm4,prm5,rbon2,rbon3等。
然而,如果你的代码的其他部分是正确的,你的FOR LOOP将尝试写入那些字段,因为FOR LOOP表达式 i 从1增加到5。
问题2 - 您无法将String连接到整数,以便创建一个字段名称,就像您尝试使用 prm + i 或 rbon + 1
Cetin的代码建议可行(只要您定义了#2,#3等字段)。但是在Foxpro和Visual Foxpro中,您通常可以通过各种方式执行任务。
就个人而言,为了便于阅读,我会像你一样接近你的FOR LOOP:
FOR i=1 TO 5
* --- Keep in mind that unless fields #2, #3, #4, & #5 are defined ---
* --- The following will Fail ---
cFld1 = "prm" + STR(i,1) && define the 1st field
cFld2 = "rbon" + STR(i,1) && define the 2nd field
cFld3 = "total" + STR(i,1) && define the 3rd field
REPLACE ALL &cFld1 WITH amount ;
FOR LEFT(ALLTRIM(a),1)="P" AND batch_mth = i
REPLACE ALL &cFld2 WITH amount ;
FOR LEFT(ALLTRIM(a),1)="R" AND batch_mth = i
REPLACE ALL &cFld3 WITH sum((prm+i)+(rbon+i)) ;
FOR batch_mth = i
NEXT
注意 - 如果您将学习使用VFP的调试工具,以便您可以在VFP开发模式下逐行检查代码执行,这可能会很好。您还可以使用它来检查变量值
断点很好,但您必须已经打开TRACE WINDOW才能让Break工作。
SET STEP ON 是我通常使用的Debug命令,因此程序执行将停止并自动打开TRACE WINDOW以查看代码执行和/或变量值。