虚表 + 数据库 操作例程

光庆 3月前 1041

Code AardioLine:103复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
    • import godking.vlistEx;
    • import fonts.fontAwesome
    • import win.ui;
    • /*DSG{{*/
    • mainForm = win.form(text="客户信息管理";right=967;bottom=556;border="none")
    • mainForm.add(
    • addData={cls="plus";text='\uF067 新增';left=8;top=80;right=77;bottom=110;bgcolor=15780518;dl=1;dt=1;font=LOGFONT(h=-16;name='FontAwesome');notify=1;z=4};
    • bkplus={cls="bkplus";left=-3;top=-2;right=972;bottom=76;aw=1;bgcolor=32768;z=1};
    • delData={cls="plus";text='\uF068 删除';left=80;top=80;right=149;bottom=110;bgcolor=15780518;dl=1;dt=1;font=LOGFONT(h=-16;name='FontAwesome');notify=1;z=5};
    • edit={cls="edit";left=752;top=80;right=960;bottom=112;edge=1;z=8};
    • plus={cls="plus";left=12;top=8;right=81;bottom=66;background="\google-play-books.ico";dl=1;dt=1;z=2};
    • static={cls="static";text="客户信息管理";left=89;top=10;right=313;bottom=59;color=65535;dl=1;dt=1;font=LOGFONT(h=-35);transparent=1;z=3};
    • static2={cls="static";text="客户名称查询";left=630;top=84;right=739;bottom=109;align="right";color=16711680;dr=1;dt=1;font=LOGFONT(h=-16);transparent=1;z=6};
    • vlist={cls="vlistEx";left=6;top=116;right=965;bottom=554;ah=1;aw=1;dl=1;dt=1;edge=1;z=7}
    • )
    • /*}}*/
    • import win.ui.simpleWindow;
    • win.ui.simpleWindow(mainForm);
    • //表头设置
    • mainForm.vlist.headerFont = ::LOGFONT(name="黑体";h=17;color=0xFFFFFF );/*【属性】表头文本字体*/
    • mainForm.vlist.headerAlign = 1; //表头字体居中
    • mainForm.vlist.headerBkcolor = 0xFF901E; //表头背景颜色
    • mainForm.vlist.bkColor2 = 0x98FB98;
    • //连接数据库
    • import godking.conn
    • var db = godking.conn.openAccess("/Database.accdb"/*文件名*/,/*密码*/)
    • //初始显示数据
    • var sql = "select id,pname as 姓名,iif(sex,'男','女') as 性别,age as 年龄,addr as 地址 from [人员名单] order by id"
    • var t = db.getTable( sql,false/*数组*/,/*开始行*/,/*总行数*/,/*格式化参数*/ );
    • mainForm.vlist.setTable(t,/*列标题*/,/*列宽*/,1/*0左1中2右*/,/*字典转为数组*/,/*字符串转为Utf8*/,/*是否克隆新表*/)
    • //新增
    • mainForm.addData.oncommand = function(id,event){
    • var rs = db.rs("[人员名单]");
    • rs.AddNew();
    • rs.setValue("sex",1);
    • rs.UpDate();
    • var id = rs.getValue("ID");
    • rs.close()
    • mainForm.vlist.addRow({id=id,性别="男",年龄=0});
    • }
    • //删除(可同时删除多行)
    • mainForm.delData.oncommand = function(id,event){
    • var rows,ids = mainForm.vlist.getSelected(,1/*列号或字典key*/);
    • if #ids {
    • var idstr = ..string.join(ids,",")
    • var sql = "DELETE from [人员名单] WHERE id in ("++idstr++")";
    • if !db.exec(sql) {
    • ..win.msgbox("删除数据失败!");
    • } else {
    • for(i=#rows;1;-1){
    • mainForm.vlist.delRow(rows[i]);
    • }
    • }
    • }
    • }
    • //编辑
    • mainForm.vlist.onEditEnd = function(row/*行*/,col/*列*/,text/*内容*/,endType){
    • if row and col {
    • var id = owner.getCellText(row,1);
    • if id {
    • var field = ({"pname","sex","age","addr"})[col-1];
    • var value = text;
    • if col==2 or col==5 {
    • value ='"'++text++'"';
    • } elseif col==3 {
    • value = text==="男"?1:0;
    • } elseif col==4{
    • value = tonumber(text,10):0; //年龄不能太大哦
    • }
    • var sql = "UPDATE [人员名单] SET "++field++"="++value++" WHERE id="++id;
    • if !db.exec(sql) {
    • ..win.msgbox("数据更新失败");
    • return false;
    • }
    • }
    • }
    • }
    • // 查询
    • mainForm.edit.oncommand = function(id,event){
    • if mainForm.edit.text = "" {
    • mainForm.vlist.filter()
    • } else {
    • mainForm.vlist.filter(mainForm.edit.text,"姓名",true/*模糊*/);
    • mainForm.vlist.update()
    • }
    • }
    • //禁止编辑id列
    • mainForm.vlist.onEditBegin = {false,1};
    • mainForm.vlist.setColumnType(3/*列号*/,1/*_vlistEx_ColType_ComboBox*/,true/*是否显示箭头或图片*/,0xAAAAAA/*箭头颜色或图片*/ );
    • mainForm.vlist.getComboBox().items={"男","女"}
    • mainForm.show();
    • return win.loopMessage();

    exec函数的格式化参数用法:

    Code AardioLine:103复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
    • import godking.vlistEx;
    • import fonts.fontAwesome
    • import win.ui;
    • /*DSG{{*/
    • mainForm = win.form(text="客户信息管理";right=967;bottom=556;border="none")
    • mainForm.add(
    • addData={cls="plus";text='\uF067 新增';left=8;top=80;right=77;bottom=110;bgcolor=15780518;dl=1;dt=1;font=LOGFONT(h=-16;name='FontAwesome');notify=1;z=4};
    • bkplus={cls="bkplus";left=-3;top=-2;right=972;bottom=76;aw=1;bgcolor=32768;z=1};
    • delData={cls="plus";text='\uF068 删除';left=80;top=80;right=149;bottom=110;bgcolor=15780518;dl=1;dt=1;font=LOGFONT(h=-16;name='FontAwesome');notify=1;z=5};
    • edit={cls="edit";left=752;top=80;right=960;bottom=112;edge=1;z=8};
    • plus={cls="plus";left=12;top=8;right=81;bottom=66;background="\google-play-books.ico";dl=1;dt=1;z=2};
    • static={cls="static";text="客户信息管理";left=89;top=10;right=313;bottom=59;color=65535;dl=1;dt=1;font=LOGFONT(h=-35);transparent=1;z=3};
    • static2={cls="static";text="客户名称查询";left=630;top=84;right=739;bottom=109;align="right";color=16711680;dr=1;dt=1;font=LOGFONT(h=-16);transparent=1;z=6};
    • vlist={cls="vlistEx";left=6;top=116;right=965;bottom=554;ah=1;aw=1;dl=1;dt=1;edge=1;z=7}
    • )
    • /*}}*/
    • import win.ui.simpleWindow;
    • win.ui.simpleWindow(mainForm);
    • //表头设置
    • mainForm.vlist.headerFont = ::LOGFONT(name="黑体";h=17;color=0xFFFFFF );/*【属性】表头文本字体*/
    • mainForm.vlist.headerAlign = 1; //表头字体居中
    • mainForm.vlist.headerBkcolor = 0xFF901E; //表头背景颜色
    • mainForm.vlist.bkColor2 = 0x98FB98;
    • //连接数据库
    • import godking.conn
    • var db = godking.conn.openAccess("/Database.accdb"/*文件名*/,/*密码*/);
    • if !db error("数据库连接失败");
    • //初始显示数据
    • var sql = "select id,pname as 姓名,iif(sex,'男','女') as 性别,age as 年龄,addr as 地址 from [人员名单] order by id"
    • var t = db.getTable( sql,false/*数组*/,/*开始行*/,/*总行数*/,/*格式化参数*/ );
    • mainForm.vlist.setTable(t,/*列标题*/,/*列宽*/,1/*0左1中2右*/,/*字典转为数组*/,/*字符串转为Utf8*/,/*是否克隆新表*/);
    • //新增
    • mainForm.addData.oncommand = function(id,event){
    • var rs = db.rs("[人员名单]");
    • rs.AddNew();
    • rs.setValue("sex",1);
    • rs.UpDate();
    • var id = rs.getValue("ID");
    • rs.close()
    • mainForm.vlist.addRow({id=id,性别="男",年龄=0});
    • }
    • //删除(可同时删除多行)
    • mainForm.delData.oncommand = function(id,event){
    • var rows,ids = mainForm.vlist.getSelected(,1/*列号或字典key*/);
    • if #ids {
    • var sql = "DELETE from [人员名单] WHERE id in (?)";
    • if !db.exec(sql,ids) {
    • ..win.msgbox("删除数据失败!");
    • } else {
    • mainForm.vlist.delRow(rows);
    • }
    • }
    • }
    • //编辑
    • mainForm.vlist.onEditEnd = function(row/*行*/,col/*列*/,text/*内容*/,endType){
    • if row and col {
    • var id = tonumber(owner.getCellText(row,1));
    • if id {
    • var field = ({"pname","sex","age","addr"})[col-1];
    • var value = text;
    • if col==3 {
    • value = text==="男";
    • } elseif col==4{
    • value = tonumber(text,10):0;
    • if value<=0 or value>500 return false; //年龄不能太大或太小哦
    • text = tostring(value);
    • }
    • var sql = "UPDATE [人员名单] SET ??=? WHERE id=?";
    • if !db.exec(sql,field,value,id) {
    • ..win.msgbox("数据更新失败");
    • return false;
    • }
    • return text;
    • }
    • }
    • }
    • // 查询
    • mainForm.edit.oncommand = function(id,event){
    • if mainForm.edit.text = "" {
    • mainForm.vlist.filter();
    • } else {
    • mainForm.vlist.filter(mainForm.edit.text,"姓名",true/*模糊*/);
    • }
    • }
    • //禁止编辑id列
    • mainForm.vlist.onEditBegin = {false,1};
    • mainForm.vlist.setColumnType(3/*列号*/,1/*_vlistEx_ColType_ComboBox*/,true/*是否显示箭头或图片*/,0xAAAAAA/*箭头颜色或图片*/ );
    • mainForm.vlist.getComboBox().items={"男","女"};
    • mainForm.onClose = function(hwnd,message,wParam,lParam){
    • db.close();
    • }
    • mainForm.show();
    • return win.loopMessage();


    上传的附件:
    最新回复 (12)
    • niheibie 3月前
      0 引用 2
      支持!!!!!
    • zhhyit 3月前
      0 引用 3
      有求必应✧٩(ˊωˋ*)و✧🌹🌹🌹
    • amin 3月前
      0 引用 4
      厉害,大部分软件都可以应用啦。
    • zhhyit 3月前
      0 引用 5
      //连接数据库 import godking.conn var db = godking.conn.openAccess("/Database.accdb"/*文件名*/,/*密码*/) //这一段,在有的电脑里正常获取db,有些电脑直接报错null 是不是要安装什么驱动之类的,我看godking.conn有什么免驱和非免驱,是啥意思 import access;官方的这个有啥区别
    • zhhyit 3月前
      0 引用 6
      zhhyit //连接数据库 import godking.conn var db = godking.conn.openAccess("/Database.accdb"/*文件名*/,/* ...

      生成的EXE的程序文件,不具备跨电脑,会报db为空的错误,这个

    • zhhyit 3月前
      0 引用 7

      把Database.accdb的这种文件格式转成Database.mdb就可以了,我艹,这内部逻辑不太理解

    • 光庆 3月前
      0 引用 8
      zhhyit 把Database.accdb的这种文件格式转成Database.mdb就可以了,我艹,这内部逻辑不太理解

      这是系统不支持accdb格式吧。mdb一般是支持的,因为是老格式。装驱动试试。

    • zhhyit 3月前
      0 引用 9
      光庆 这是系统不支持accdb格式吧。mdb一般是支持的,因为是老格式。装驱动试试。

      好滴好滴

    • redchina 3月前
      0 引用 10

      想加个导入导出功能,代码报错不知如何查错

      上传的附件:
    • zhhyit 3月前
      0 引用 11
      Code AardioLine:10复制
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
      • mainForm.button.oncommand = function(id,event){
      • var id = 12;
      • var field = ({"pname","sex","age","addr"})[4];
      • var value = "修改此处"
      • var sql = "UPDATE [人员名单] SET "++field++"="++value++" WHERE id="++id;
      • if !db.exec(sql) {
      • ..win.msgbox("数据更新失败");
      • return false;
      • }
      • }

      光大,这段直接修改ID为12的addr的值,为啥执行之后,数据库没有改成功,提示更新失败,百思不得其解

    • zhhyit 3月前
      0 引用 12
      zhhyit mainForm.button.oncommand&nbsp;=&nbsp;function(id,event){ var&nbsp;id&nbsp;=&n ...
      应该是 SQL 语句字符串闹的鬼💀,我再瞅瞅👀
    • 光庆 3月前
      0 引用 13
      zhhyit 应该是 SQL 语句字符串闹的鬼💀,我再瞅瞅👀
      字符串前后要加引号
    返回