虚表 + 数据库 操作例程

光庆 9天前 425

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函数的格式化参数用法:

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();


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

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

  • zhhyit 7天前
    0 引用 7

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

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

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

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

    好滴好滴

返回