【发布时间】:2019-01-18 21:42:19
【问题描述】:
我不确定这篇文章的标题,如果你能想到更好的标题,请随时编辑我的文章。
我有一些看起来像这样的视觉 foxpro:
* Get the vendor code for case management hours
Select op_value ;
FROM dbfs\am_opts ;
WHERE op_code = "CMGT_VENDOR" ;
INTO CURSOR cmgt_vndr
lcCMGTVendor = padr(cmgt_vndr.op_value, 4)
* Determine if we need to include CMGT hours
llIncludeCMGT = .f.
Select sub_code ;
FROM tempsrv ;
WHERE Is_It_Case_Service(sub_code) ;
AND selected ;
INTO CURSOR c_dummy1
*
If _tally
> 0 or pcService = "ALL"
llIncludeCMGT = .t.
Endif
*
If m.llIncludeCMGT
* Pick only certain Vendors?
If m.pcVendor=="ALL"
* No, then leave the CMGT flag as DO Include.
Else
* Yes, only get CMGT if the "Default CMGT Vendor"
* is one of the selected vendors.
Select 'TempVnd'
Locate FOR provkey=m.lcCMGTVendor .AND. Selected
m.llIncludeCMGT = FOUND()
*
*
Endif
*
Endif
*
*
* Merge in CMGT hours if necessary
If llIncludeCMGT
Wait WINDOW NOWAIT ;
'Gathering Case-Management entries'
*
* 10/25/2001 JDB Take into account f_rpt.sub_code
*
Select 0
Use 'dbfs\f_Rpt' AGAIN ALIAS 'SQL_F_Rpt' NOUPDATE
*
* Build basic WHERE-clause, and name basic tables.
m.SQL_FROM = "SQL_F_Rpt"
m.SQL_WHERE = "SQL_F_Rpt.End_Dt BETWEEN m.pdBegin_Date AND m.pdEnd_Date" ;
+ " AND !(IS_IT_WAIVER(SQL_F_Rpt.Payor, .F.))"
*
* Do they only want certain Fund-Sources?
If m.pcPayor=="ALL"
* No, ignore the Payor-field
Else
* Yes, only get matching/selected payors.
m.SQL_FROM = m.SQL_FROM + ", TempPay"
m.SQL_WHERE = m.SQL_WHERE ;
+ " AND SQL_F_Rpt.Payor=TempPay.Payor_CD" ;
+ " AND TempPay.Selected"
*
Endif
*
* Pick only certain Service-Codes?
If m.pcService=="ALL"
* No, ignore the SubCode-field
Else
* Yes, only get matching/selected Services.
m.SQL_FROM = m.SQL_FROM + ", TempSrv"
m.SQL_WHERE = m.SQL_WHERE ;
+ " AND IIF(EMPTY(SQL_F_Rpt.Sub_Code), 'CMGT', SQL_F_Rpt.Sub_Code)=TempSrv.Sub_Code" ;
+ " AND TempSrv.Selected"
*
Endif
*
*
Select * from pass2 union all ;
select lcCMGTVendor as provkey, ;
iif(empty(SQL_F_Rpt.sub_code), "CMGT", SQL_F_Rpt.sub_code) as sub_code, ;
SQL_F_Rpt.keyfld, ;
00000.00 as tot_auth, ;
(SQL_F_Rpt.unit * SQL_F_Rpt.cost) as tot_deliv, ;
SQL_F_Rpt.start_dt as plandt ;
from &SQL_FROM ;
where &SQL_WHERE ;
into cursor pass3
我不知道lcCMGTVendor 是如何合并到最终的 foxpro 查询中的。它不在任何地方的SQL_WHERE 子句中。代码中的其他任何地方都没有引用它,只是这部分。
有人可以帮我弄清楚我缺少什么,以便弄清楚它在底部的 Foxpro 查询中的情况吗?
在我目前的理解中,我们采用任何 provkey 值并将其应用于每一行,这似乎是错误的。
【问题讨论】:
-
关于第6行是lcCMGTVendor = padr(cmgt_vndr.op_value, 4)
-
以便将值应用于底部的每条记录?
-
是的。您是 FoxPro 的初学者吗?你应该从更简单的开始。
-
我是foxpro的初学者。我正在将 foxpro 翻译成 T-SQL,以完成分配给我的任务。谢谢
-
恕我直言,即使对于经验丰富的 foxpro 和 MS SQL Server 开发人员来说,将 Foxpro 代码转换为 T-SQL 也不是一件容易的事。如果您想将其转换为另一种语言,例如 C#、Go、Python ……但尝试转换为 T-SQL、pgSQL ……没有意义。
标签: sql-server tsql visual-foxpro