标题:增加表字段时提示无效的临时表操作
只看楼主
yuq
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2022-3-7
结帖率:72.73%
已结贴  问题点数:20 回复次数:10 
增加表字段时提示无效的临时表操作
文件.zip (19.95 KB)

代码运行时,读取各excle文件的列头,如果列头在hbwj表中不存在,就增加表字段。运行时,会提示无效的临时表操作。
搜索更多相关主题的帖子: 无效 操作 增加 字段 临时表 
2022-10-18 17:14
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
本机安装EXCEL2007,不能兼容EXCEL2003内容,无法测试

坚守VFP最后的阵地
2022-10-18 18:49
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
CREATE CURSOR t1(f1 i,f2 c(10))
ff = "f3"
ALTER table t1 ADD &ff c(20)
这样的操作是正常的,那么,你出错有可能是 lmmce 内容上面
2022-10-18 22:38
yuq
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2022-3-7
得分:0 
回复 3楼 mywisdom88
我查看了内容,内容是没问题的
2022-10-19 08:26
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
很早之前就已经有人发现这个 bug 了,例如:
Create Cursor test (f1 C(1), f2正常字段 C(1))
Alter table test add column f3 C(1)
不会有问题,而如果是
Create Cursor test (f1 C(1), f2超长字段名 C(1))
Alter table test add column f3 C(1)
就会报错

现在明白咋回事了吧


[此贴子已经被作者于2022-10-19 08:58编辑过]

2022-10-19 08:53
厨师王德榜
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:183
帖 子:942
专家分:4724
注 册:2013-2-16
得分:0 
回复 5楼 csyx
你提供这个信息很有用,是我的盲点.感谢 .
2022-10-19 10:20
yuq
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2022-3-7
得分:0 
回复 5楼 csyx
请问有解决方案吗?
2022-10-19 10:57
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
最简单的方法就是改掉 excel 文件的第一行,不让出现超过10个字符的字段名,否则你的代码要做很多修改

在有人报告此bug后,MS一直未做修复,现在就更不可能修复了
2022-10-19 12:41
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
或者创建一个函数,把 Alter Table xxx Add Column ... 语句换成调用此函数
2022-10-19 18:04
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:20 
程序代码:
*-- tcAls - 要修改结构的临时表别名
*-- tcDef - 要添加的字段定义: 字段名,类型,长度,小数位,允许空值(0 or 1)
Function FieldAdd(tcAls, tcDef)
    Local nOldArea, cTemp, ii, jj, kk
    Local cFldName, cFldType, cFldLen, cFldDec, lAllowNull
    Local array aOld[1], aNew[1]
    m.nOldArea = Select(0)
    
    m.cFldName = GetWordNum(m.tcDef, 1, ',')
    m.cFldType = GetWordNum(m.tcDef, 2, ',')
    m.cFldLen = Cast(GetWordNum(m.tcDef, 3, ',') as I)
    m.cFldDec = Cast(GetWordNum(m.tcDef, 4, ',') as I)
    m.lAllowNull = Cast(Cast(GetWordNum(m.tcDef, 5, ',') as I) as L)
    
    m.ii = AFields(m.aOld, m.tcAls)
    If Ascan(m.aOld, m.cFldName, 1, -1, 1, 1+2+4) > 0
        *-- 字段已经存在
    Else
        m.ii = m.ii + 1
        m.jj = Alen(m.aOld, 2)
        Dimension aOld[m.ii, m.jj]
        m.aOld[m.ii, 1] = m.cFldName
        m.aOld[m.ii, 2] = m.cFldType
        m.aOld[m.ii, 3] = m.cFldLen
        m.aOld[m.ii, 4] = m.cFldDec
        m.aOld[m.ii, 5] = m.lAllowNull
        Dimension aNew[m.ii,5]
        For m.kk = 1 to Alen(m.aNew, 2)
            For m.jj = 1 to m.ii
                m.aNew[m.jj, m.kk] = m.aOld[m.jj, m.kk]
            EndFor
        EndFor
        m.cTemp = Sys(2015)
        Create Cursor (m.cTemp) from array aNew
        Append From Dbf(m.tcAls)
        Use Dbf(m.cTemp) Again In Select(m.tcAls) Alias (m.tcAls)
        Use in Select(m.cTemp)
    EndIf

    Select (m.nOldArea)
EndFunc


把这个函数加到你的过程集里,或者单独放到一个prg里,并且 set proc to xxx.prg addi
最后把
alter table hbwj add &lmmoe c(254)
换成
FieldAdd('hbwj', lmmce+',C,254')

2022-10-19 18:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510362-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.105788 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved