阿甘老师好!
这是一个通讯录小程序,借用了别人的代码修改的,想实现如下功能:1、点击添加按钮,能把输入的姓名、电话、日期保存到数据库,2、选择listview的任一行,点击删除按钮,就能把这一行从数据库里删除,3、在姓名、电话、日期的任一个文本框里,输入相应的数据,点击模糊查询,就能实现从数据库里查询到相应数据,并整行显示到listview里。
现在出现的问题是,点击添加按钮,就报错:
文件:[string”import win.ui;…”1
错误行号:#151
错误:table filea has no column named date
SQL错误或数据库不存在(SQLITE_ERROR)。
我是个新手小白,找不到原因,现贴上全部代码,敬请阿甘老师指点,叩谢了!
import win.ui;
import sqlite;
import win.ui.statusbar;
/*DSG{{*/
var winform = win.form(text="通信录";right=488;bottom=543;bgcolor=15780518;parent=...)
winform.add(
btnDelete={cls="button";text="删除";left=330;top=43;right=400;bottom=67;dr=1;dt=1;z=2};
btn_adddb={cls="button";text="添加";left=330;top=11;right=400;bottom=35;dr=1;dt=1;tabstop=1;z=7};
button={cls="button";text="模糊查询";left=409;top=11;right=479;bottom=35;dr=1;dt=1;z=8};
button2={cls="button";text="帮助";left=409;top=43;right=479;bottom=67;dr=1;dt=1;z=9};
ed_date={cls="edit";left=76;top=78;right=320;bottom=103;edge=1;z=11};
ed_name={cls="edit";left=75;top=11;right=325;bottom=35;dl=1;dr=1;dt=1;edge=1;tabstop=1;z=3};
ed_tel={cls="edit";left=75;top=44;right=325;bottom=68;dl=1;dr=1;dt=1;edge=1;tabstop=1;z=4};
listview={cls="listview";left=4;top=126;right=489;bottom=520;bgcolor=16777215;db=1;dl=1;dr=1;dt=1;edge=1;fullRow=1;gridLines=1;msel=false;z=1};
static={cls="static";text="单位名称";left=9;top=14;right=68;bottom=31;dl=1;dt=1;font=LOGFONT(h=-14);transparent=1;z=5};
static2={cls="static";text="日期";left=11;top=79;right=59;bottom=106;transparent=1;z=10};
static4={cls="static";text="电话号码";left=9;top=48;right=68;bottom=64;dl=1;dt=1;font=LOGFONT(h=-14);transparent=1;z=6}
)
/*}}*/
winform.show()
//设置TAB顺序便于键盘录入。
win.ui.statusbar( winform ).addItem("总数:", 150/*宽度*/)
winform.ed_name.wndproc = function(hwnd,message,wparam,lparam){
if(message == 0x101/*_WM_KEYUP*/ && wparam == 0xD/*_VK_RETURN*/){
winform.ed_tel.setFocus()
}
}
winform.ed_date.wndproc = function(hwnd,message,wparam,lparam){
if(message == 0x101/*_WM_KEYUP*/ && wparam == 0xD/*_VK_RETURN*/){
winform.ed_date.setFocus()
}
}
winform.ed_tel.wndproc = function(hwnd,message,wparam,lparam){
if(message == 0x101/*_WM_KEYUP*/ && wparam == 0xD/*_VK_RETURN*/){
winform.btn_adddb.oncommand()
}
}
winform.listview.insertColumn("序号",80,1)
winform.listview.insertColumn("单位名称或联系人",100,2)
winform.listview.insertColumn("电话",100,3)
winform.listview.insertColumn("日期",-1,4)
var sqlConnection = sqlite("\db.db") //连接数据库,如果不存在库则创建库。
if(not sqlConnection.existsTable("filea")){ //如果不存在表,则创建数据表
sqlConnection.exec("CREATE TABLE filea(id INTEGER PRIMARY KEY AUTOINCREMENT,name,tel,date);")
}else {
var db=sqlConnection.getTable("SELECT * FROM filea");//查询全表数据
//将查询到的数据显示于listview
for(i=1;#db;1){winform.listview.addItem({tostring(db[ i ].id);db[ i ].name;db[ i ].tel;db[ i ].date});}
}
//修改表中数据
winform.listview.onnotify = function(id,code,ptr){
if(code==0xFFFFFF4B){// 滚动条
if(!winform.listview.editlable) return ;
edit = winform.listview.editlable;
rc=winform.listview.getItemRect(edit.listViewNotifyMessage.iItem,edit.listViewNotifyMessage.iSubItem,,2/*_LVIR_LABEL*/);
if(rc.top<rc.bottom-rc.top){//选中行向上滚动到了列标题及其以上的位置,不处理的话编辑框会覆盖掉列标题。
rc.top-=math.abs(rc.bottom);rc.bottom=rc.top;
}else {
rc.right += 5; rc.bottom += 5;
}
edit.setRect(rc);
winform.listview.redraw();//经测试,这行会引起滚动条位置变化时listview控件闪烁,如果在意这个问题,请主动给listview控件增加_WS_CLIPCHILDREN样式,可以省略掉这行。
}
if(code=0xFFFFFFFD/*_NM_DBLCLK*/ ){
var notifyMessage = winform.listview.getNotifyMessage(code,ptr);
if( ! notifyMessage.iItem && notifyMessage.iSubItem ) return ;
var edit = winform.listview.editlable
if( ! edit ){
winform.listview.addCtrl(
editlable = {
cls="edit";font = LOGFONT( h = 11 );left = 0;top = 0;
right = 50;bottom = 50;autoResize = false ;hide = 1;edge = 1;
wndproc = function( hwnd, message, wParam, lParam ){
if( ( message = 0x8/*_WM_KILLFOCUS*/)
|| message == 0x101/*_WM_KEYUP*/ && wParam == 0xD/*_VK_RETURN*/){
// 按下了回车键或失去焦点,更新listview数据
owner.parent.setItemText( owner.text, //格子内容
owner.listViewNotifyMessage.iItem, //行号
owner.listViewNotifyMessage.iSubItem );//列号
var focus=owner.listViewNotifyMessage.iItem
var id=winform.listview.getItemText(focus,1);//focus=第i行,第1列
var name=winform.listview.getItemText(focus,2);
var tel=winform.listview.getItemText(focus,3);
var date=winform.listview.getItemText(focus,4);
//更新语句sqlConnection.exec("UPDATE 表名 SET 更新字段 = '更新值' WHERE 条件字段 = 条件值';");
sqlConnection.exec("UPDATE filea SET name='"+name+"',tel='"+tel+"',date='"+date+"' WHERE id ='"+id+"'");
owner.show(false);
}
}
}
)
edit = winform.listview.editlable;
}
edit.listViewNotifyMessage = notifyMessage;
edit.text=winform.listview.getItemText(notifyMessage.iItem,notifyMessage.iSubItem);
var rc=winform.listview.getItemRect( notifyMessage.iItem,notifyMessage.iSubItem,,2/*_LVIR_LABEL*/ )
rc.right += 5; rc.bottom += 5;
edit.setRect(rc);
edit.show();
edit.setFocus();// 获取焦点
}
}
//查询
winform.button.oncommand = function(id,event){
winform.listview.clear()
var db=sqlConnection.getTable("select * from filea where name like '%%"+winform.ed_name.text+"%%'"+"and tel like '%%"+winform.ed_tel.text+"%%'"+"and date like '%%"+winform.ed_date.text+"%%'");
for(i=1;#db;1)winform.listview.addItem({tostring(db[ i ].id);db[ i ].name;db[ i ].tel;db[ i ].date});
winform.ed_name.text=""
winform.ed_tel.text=""
winform.ed_date.text=""
winform.statusbar.setText("总数:"+winform.listview.count,1)
winform.listview.setSelected(1)
winform.listview.setFocus()
}
//帮助
winform.button2.oncommand = function(id,event){
var str = /*
1、回车自动添加。
2、双击编辑复制。
3、模糊查询,查询空串则显示全部。
4、全部清除可删数据库。
*/
win.msgboxTimeout(str,"帮助",10000)
}
//删除所选数据
winform.btnDelete.oncommand = function(){
var id = winform.listview.getItemText(winform.listview.selIndex,1);
if(id!=""){
winform.listview.delItem(winform.listview.selIndex)
sqlConnection.exec("DELETE FROM filea WHERE id=='"+id+"'")
winform.statusbar.setText("总数:"+winform.listview.count,1)
winform.listview.setFocus()
}
}
//添加数据到db
winform.btn_adddb.oncommand = function(){
var name=winform.ed_name.text;
var tel=winform.ed_tel.text;
var date=winform.ed_date.text;
var tel_01;
var num=sqlConnection.getTable("select tel from filea where tel='"+tel+"'");
for(i=1;#num;1) tel_01=num[ i ].tel;
if(tel_01!=null)
win.msgbox("该号码已经存在","系统提示")
else {
if(name!=""? tel!=""?date!=""){
//注意135行和138行不能相反,只有产生新ID号后才能在列表框中添加。
sqlConnection.exec("insert into filea (name,tel,date) values('"+name+"','"+tel+"','"+date+"')")
var db=sqlConnection.getTable("SELECT * FROM filea");
winform.listview.addItem({tostring(db[#db].id);name;tel;date});
winform.statusbar.setText("总数:"+winform.listview.count,1)
}
}
winform.ed_name.text="";
winform.ed_tel.text="";
winform.ed_date.text="";
winform.ed_name.setFocus();
}
winform.listview.setFocus();
winform.statusbar.setText("总数:"+winform.listview.count,1)
win.loopMessage();