| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 580 人关注过本帖
标题:增加表字段时提示无效的临时表操作
只看楼主 加入收藏
yuq
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2022-3-7
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:10 
增加表字段时提示无效的临时表操作
文件.zip (19.95 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册

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

坚守VFP最后的阵地
2022-10-18 18:49
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册: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
等 级:新手上路
帖 子:44
专家分:0
注 册:2022-3-7
收藏
得分:0 
回复 3楼 mywisdom88
我查看了内容,内容是没问题的
2022-10-19 08:26
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:641
专家分:2476
注 册: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: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:987
专家分:4946
注 册:2013-2-16
收藏
得分:0 
回复 5楼 csyx
你提供这个信息很有用,是我的盲点.感谢 .
2022-10-19 10:20
yuq
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2022-3-7
收藏
得分:0 
回复 5楼 csyx
请问有解决方案吗?
2022-10-19 10:57
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:641
专家分:2476
注 册:2018-3-13
收藏
得分:0 
最简单的方法就是改掉 excel 文件的第一行,不让出现超过10个字符的字段名,否则你的代码要做很多修改

在有人报告此bug后,MS一直未做修复,现在就更不可能修复了

这家伙很懒,啥也没留下
2022-10-19 12:41
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:641
专家分:2476
注 册:2018-3-13
收藏
得分:0 
或者创建一个函数,把 Alter Table xxx Add Column ... 语句换成调用此函数

这家伙很懒,啥也没留下
2022-10-19 18:04
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:641
专家分:2476
注 册: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
快速回复:增加表字段时提示无效的临时表操作
数据加载中...
 
   



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

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