PROGRESS编程入门:变量定义与注释详解

3星 · 超过75%的资源 需积分: 46 7 下载量 103 浏览量 更新于2024-07-26 1 收藏 471KB DOC 举报
在PROGRESS编程学习中,我们首先会接触到基础概念,如变量的定义和操作。PROGRESS是一种强大的4GL(第四代编程语言)数据库管理系统,它允许程序员以接近自然语言的方式编写应用。以下是关于PROGRESS编程的一些核心知识点: 1. 变量定义:在PROGRESS中,变量的定义至关重要。例如,`definevariablestr01ascharlabel "DemoString"initial"hello"`这一行展示了变量的基本结构。变量名(如`str01`)应遵循一定的命名规则,避免与系统关键字冲突,且首字符通常是字母或下划线。`char`表示字符类型,`label`用于提供变量的描述以便于理解和使用。`initial`关键字用于设置变量的初始值,如`"hello"`。 - `def`和`var`是PROGRESS中的简写形式,初学者可以先使用全写形式以确保理解,随着经验积累再逐步简化。 - `like`和`as`的区别在于,`as`后面直接指定变量类型,而`like`则用来将变量类型设定为另一个变量或字段的类型。 2. 数组变量:`defvardt01asdateextent5`中,`extent5`表示`dt01`是一个具有5个元素的日期数组,这种数据结构在处理大量数据时非常有用。 3. 变量格式:`format">>>9"`用于指定变量的显示格式,比如预留宽度,这对于输入验证和报表输出极为关键。通过设置特定的格式,如`"9999"`来确保年份始终为四位数字。 4. 注释:PROGRESS支持多级嵌套注释,使用`/* */`来添加文档和解释代码功能,如`/*---注释1 /*注释2*/ ---*/`。 5. 记录显示:在编程模式中,可以通过`foreach`循环遍历数据库记录,`displayTABLE_NAME`用于显示整个表或满足特定条件的记录,如`findfirstTABLE_NAME`用于查找第一条记录。此外,还可以选择性地显示特定字段,如`FOREACHpt_mstrWHEREpt_m`表明根据特定条件显示`pt_mstr`字段。 在实际编程过程中,理解这些基础概念并熟练运用它们是关键。通过实践编写简单的查询和操作,逐步提升对PROGRESS编程的理解和能力。随着项目规模的扩大,还会涉及到数据库连接、事务管理、流程控制等高级特性。学习PROGRESS时,记得注重实践,不断探索和解决问题,这样才能更好地掌握这一强大的数据库编程工具。

/* * @Author: LinLong * @LastEditors: LinLong * @Description: 上课进度上传 */ import { ref, onMounted, onUnmounted } from 'vue' import { getItem, setItem } from '@/hooks' import { uselearningProgress } from '@/stores' import { updatedLearningProgress } from '@/apiList/learningProgress' const learningProgressStore = uselearningProgress() //学习进度仓库 const currentProgressFile = ref(null) //当前学习进度文件 const heartbeatTime = 30 * 1000 //30秒 let timer = null //时间函数 export function useClassProgress(onBeforeRouteLeave) { //从仓库获取用户点击的课程->项目->任务->文件 learningProgressStore.$subscribe((mutation, state) => { const { currentProgress } = state // console.log('%c--currentProgress-->', 'background:#18C36E;color:#3F4040;', currentProgress) currentProgressFile.value = { classId: currentProgress.classId, courseId: currentProgress.courseId, courseId_text: currentProgress.courseId_text, projectId: currentProgress.pid == 0 ? currentProgress.id : currentProgress.pid, // projectId: currentProgress.id, taskId: currentProgress.pid == 0 ? null : currentProgress.id, pid_text: currentProgress.pid_text, name: currentProgress.name, file: currentProgress.url, userId: getItem('userInfo').id, } // console.log('%c-----state 学习进度------->', 'background:#18C36E;color:#3F4040;', currentProgress) }) //生命周期页面挂载完毕 onMounted(() => { //接收iframe 异步框架消息 window.addEventListener('message', (e) => { if (e.origin.includes('8013')) { const data = e.data setItem('postMessage', data) // console.log('%c-----监听postMessage子级------->', 'background:#18C36E;color:#3F4040;', JSON.parse(data)) } }) //浏览器tab标签切换或最小化事件设置暂停提交 上课记录 document.addEventListener('visibilitychange', () => { if (document.visibilityState === 'hidden') { timer ? clearTimeout(timer) : (timer = null) //清除定时器 } else if (document.visibilityState === 'visible') { timer ? clearTimeout(timer) : (timer = null) //先清除一次定时器 sendMessage() //继续发送学习进度 } }) //发送统计信息至后端 sendMessage() function sendMessage() { console.log('%c---对方水电费水电费水电费->', 'background:#18C36E;color:#3F4040;') timer ? clearTimeout(timer) : (timer = false) //先清除一次定时器 timer = setTimeout(() => { const sendData = { ...getItem('postMessage'), ...currentProgressFile.value, } // console.log('%c------准备发送的信息sendData------>', 'background:#18C36E;color:#3F4040;', sendData) updatedLearningProgress(sendData).then((res) => { if (res.success) sendMessage() }) }, heartbeatTime) //heartbeatTime } }) //生命周期页面销毁之前 onUnmounted(() => { clearTimeout(timer) // //路由离开 // onBeforeRouteLeave(() => { // clearTimeout(timer) // }) }) }

2023-04-20 上传