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

2022-10-27 10:28:56 浏览数 (2)

开发环境 后端: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却出现了:

下篇继续填坑

0 人点赞