前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VFPBS上传EXCEL并保存MSSQL到数据库中

VFPBS上传EXCEL并保存MSSQL到数据库中

作者头像
加菲猫的VFP
发布2022-10-27 10:28:56
1.7K0
发布2022-10-27 10:28:56
举报
文章被收录于专栏:加菲猫的VFP

开发环境 后端:VFP SP2 7423 +祺佑三层开发框架(猫框) 前端:VUE2.0+Element

思路

  1. 实现BS上传
  2. 就是利用猫框的importexcel类将EXCEL文件转换为临时表,
  3. 将临时表插入到DAL_CA中实现一键保存。

1. 首先来看一下MSSQL数据结构

2. 代码生成器生成DAL_CA类

3. 将生成的DAL_CA类保存到开发框架的DAL目录中

4. 编写业务逻辑controller类

代码语言:javascript
复制
Define Class ctl_skin_ht as session
*--上传导入文件
    Procedure upfile
        oResult=GetUpFile()      &&返回为集合对象
        *--原文件名
        cOldFilename=oResult.ofieldcoll.Item("file").filename  &&文件名 跟上传name(微信)对应 key (mui) 对应

        cExtName=Justext(cOldFilename)  &&扩展名
        IF !INLIST(UPPER(cExtName),"XLS","XLSX")
          ERROR "必须上传EXCEL文件"
        ENDIF 
        cFilename=Ttoc(Datetime(),1)+Right(Transform(Second()*1000),6)
        cFilename=cFilename+"."+cExtname


        cMydata=oResult.ofieldcoll.Item("file").fielddata &&文件内容

        cFilePath=getwwwrootpath("upfile")
        If !Directory(cFilePath)
            Md &cFilePath  &&目前只在调试服务器下执行成功,发布时要预先创建
        Endif

        If Strtofile(cMydata,cFilePath+cFilename)<=0
            Error "写入文件失败,目录是否存在且可读写"
        Endif
        *--导入EXCEL生成临时表
        xx=Newobject("importexcel","importexcel.prg")
        xx.cursorstruc="手机型号 c(240),编号 c(50)"
        xx.Alias="tmpxxx"

        If !xx.Import(Sys(5)+Sys(2003)+"\"+cFilePath+cFilename)
            Error xx.msg
        Endif
        *-- 临时表写入DAL类,实现一键保存
        oDAL=Newobject("Dal_skin","Dal_skin.prg")
        oDAL.Nodata=.T.
        If !oDAL.CursorFill(.T.)
            Aerror(laerror)
            Error laerror(2)
        Endif

        cTmpAlias=oDAL.Alias
        Insert Into &cTmpAlias(model,skincode,mainmodel,types,Type,Memo,price) Select * From tmpxxx

        If !oDAL.Save()
            Error oDal.msg
        Endif

        Return cursortojson(oDAL.alias)
    Endproc
ENDDEFINE 

5. 前端页面,也可以自己写上传的页面

放下一个上传组件

代码语言:javascript
复制
<el-upload         
         :on-success="handle_success"
          class="upload-demo"
          :action="upurl"            
          multiple
          :limit="1"
          >
          <el-button size="small" type="primary">点击上传</el-button>
          <div slot="tip" class="el-upload__tip">只能上传excel文件</div>
</el-upload>

JS代码

代码语言:javascript
复制
export default {
  components: {},
  data() {
    return {
     upurl:"ctl_skin_ht.fsp?proc=upfile"
    },
  methods: {
     handle_success(res){
       console.log(res);
       if(res.errno!=){
         this.$message.warning(res.errmsg);         
         return; 
       }
       this.$message.warning("上传成功");   
      },
  }
}

运行调试服务器,测试上传,完美成功。但是发布到IIS却出现了:

2. 代码生成器生成DAL_CA类

3. 将生成的DAL_CA类保存到开发框架的DAL目录中

类名同文件名

4. 编写业务逻辑controller类

代码语言:javascript
复制
Define Class ctl_skin_ht as session
*--上传导入文件
    Procedure upfile
        oResult=GetUpFile()      &&返回为集合对象
        *--原文件名
        cOldFilename=oResult.ofieldcoll.Item("file").filename  &&文件名 跟上传name(微信)对应 key (mui) 对应

        cExtName=Justext(cOldFilename)  &&扩展名
        IF !INLIST(UPPER(cExtName),"XLS","XLSX")
          ERROR "必须上传EXCEL文件"
        ENDIF 
        cFilename=Ttoc(Datetime(),1)+Right(Transform(Second()*1000),6)
        cFilename=cFilename+"."+cExtname


        cMydata=oResult.ofieldcoll.Item("file").fielddata &&文件内容

        cFilePath=getwwwrootpath("upfile")
        If !Directory(cFilePath)
            Md &cFilePath  &&目前只在调试服务器下执行成功,发布时要预先创建
        Endif

        If Strtofile(cMydata,cFilePath+cFilename)<=0
            Error "写入文件失败,目录是否存在且可读写"
        Endif
        *--导入EXCEL生成临时表
        xx=Newobject("importexcel","importexcel.prg")
        xx.cursorstruc="手机型号 c(240),编号 c(50)"
        xx.Alias="tmpxxx"

        If !xx.Import(Sys(5)+Sys(2003)+"\"+cFilePath+cFilename)
            Error xx.msg
        Endif
        *-- 临时表写入DAL类,实现一键保存
        oDAL=Newobject("Dal_skin","Dal_skin.prg")
        oDAL.Nodata=.T.
        If !oDAL.CursorFill(.T.)
            Aerror(laerror)
            Error laerror(2)
        Endif

        cTmpAlias=oDAL.Alias
        Insert Into &cTmpAlias(model,skincode,mainmodel,types,Type,Memo,price) Select * From tmpxxx

        If !oDAL.Save()
            Error oDal.msg
        Endif

        Return cursortojson(oDAL.alias)
    Endproc
ENDDEFINE 

5. 前端页面,也可以自己写上传的页面

放下一个上传组件

代码语言:javascript
复制
<el-upload         
         :on-success="handle_success"
          class="upload-demo"
          :action="upurl"            
          multiple
          :limit="1"
          >
          <el-button size="small" type="primary">点击上传</el-button>
          <div slot="tip" class="el-upload__tip">只能上传excel文件</div>
</el-upload>

JS代码

代码语言:javascript
复制
export default {
  components: {},
  data() {
    return {
     upurl:"ctl_skin_ht.fsp?proc=upfile"
    },
  methods: {
     handle_success(res){
       console.log(res);
       if(res.errno!=){
         this.$message.warning(res.errmsg);         
         return; 
       }
       this.$message.warning("上传成功");   
      },
  }
}

运行调试服务器,测试上传,完美成功。但是发布到IIS却出现了:

下篇继续填坑

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 加菲猫的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 首先来看一下MSSQL数据结构
  • 2. 代码生成器生成DAL_CA类
  • 3. 将生成的DAL_CA类保存到开发框架的DAL目录中
  • 4. 编写业务逻辑controller类
  • 5. 前端页面,也可以自己写上传的页面
  • 2. 代码生成器生成DAL_CA类
  • 3. 将生成的DAL_CA类保存到开发框架的DAL目录中
  • 4. 编写业务逻辑controller类
  • 5. 前端页面,也可以自己写上传的页面
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档