2 回答
TA贡献1946条经验 获得超3个赞
它显示了罪魁祸首是什么。
尽管我的神经倾向于对该代码进行许多更正,但我只会进行足够的修改以使其在 VFP 和 C# 中都能正常工作:
function newId
parameter thisdbf
regional keynm, newkey, nOldSelect, lDone
keynm=padr(upper(thisdbf),50)
nOldSelect=select()
lDone=.f.
do while not lDone
select keyvalue from main!idkeys where keyname=keynm into array akey
if _tally=0
insert into main!idkeys (keyname) value (keynm)
loop
endif
newkey=akey+1
update main!idkeys set keyvalue=newkey where keyname=keynm and keyvalue=akey
if _tally=1
lDone=.t.
endif
enddo
Select (m.nOldSelect)
return newkey
改变的部分只与那个有关(if !empty(...)) block。
TA贡献1883条经验 获得超3个赞
问题是存储过程中的这个变量声明行:
regional keynm, newkey, cOldSelect, lDone
'regional' 关键字是旧的 FoxPro 2.6 for DOS\Windows 的保留。它仅用于由屏幕构建器工具生成的程序。显然,它仍然潜伏在 Visual FoxPro 中以支持将旧的 FoxPro 2.6 项目迁移到 Visual FoxPro 的功能,因为代码在 VFP 中运行良好。但是 OLEDB 驱动程序不支持它。
无论如何,您需要更改存储过程以使用:
local keynm, newkey, cOldSelect, lDone
... 并重新编译它,为此您将需要 Visual FoxPro。确保没有 OLEDB 或其他连接到它,然后在 Visual FoxPro 命令窗口中:
compile c:\path\to\mydatabase.dbc
- 2 回答
- 0 关注
- 284 浏览
添加回答
举报