以下动动态创建数据窗口函数出错,请高手指教
//功能:根据传入的数据库名和表名创建显示表内容的数据窗口
//参数:adb_name数据库名
// atb_name数据库中的表名
string ls_sql , ls_style ,ls_syntax ,ls_errmsg ,ls_errors
ls_sql="select * from "+adb_name+".."+atb_name+" ; "
//动态创建数据窗口
dw_1.setredraw(false)
dw_1.reset()
ls_style="style(type=Grid)"
sqlca.autocommit=TRUE
ls_syntax=SQLCA.SyntaxFromSql(ls_sql,ls_style,ls_errmsg); //为动态创建数据窗口设置语法
sqlca.autocommit=FALSE
messagebox("数据窗口设置语法","语法:"+ls_syntax)
if len(ls_errmsg)>0 then
messagebox("创建数据窗口语法失败","表名:"+atb_name)
else
int i
i=dw_1.Create(ls_syntax , ls_errors) ; //此句出错 返回值为-1
messagebox("创建数据窗口失败","返回:"+string(i))
if len(ls_errors)>0 then
messagebox("创建数据窗口失败","错误:"+ls_errors)
end if
end if
messagebox("创建数据窗口语法","语法:"+ls_sql)
//检索数据
dw_1.settransobject(sqlca);
dw_1.retrieve();
dw_1.setredraw(true)
messagebox("数据窗口","行数:"+string(dw_1.retrieve()))
------解决方案--------------------
没看出什么问题。我是这么写的:
- C/C++ code
//====================================================================// 事件: .gf_create_ds()//--------------------------------// 描述: 全局函数,用SQL 语句构造 datastore//--------------------------------// 参数:// reference transaction at_trans // reference string as_sql // reference datastore ad_datastore //--------------------------------// 返回: boolean//--------------------------------// 作者: Wangenu 日期: 2009年12月17日//--------------------------------// Copyright(c) 2009 Wangenu(TM).//--------------------------------// 修改历史:////====================================================================if not isvalid(ad_datastore) then ad_datastore = create datastorestring ls_errsyntaxfromSQLstring ls_errcreatestring ls_newsyntax at_trans.autocommit = truels_newsyntax = at_trans.syntaxfromsql(as_sql ,'style(type=grid)',ls_errsyntaxfromSQL)if len(ls_errsyntaxfromSQL) > 0 then messagebox('生成临时表句法错误','提示:~n~n'+ls_errsyntaxfromSQL,stopsign!) return falseelse ad_datastore.create(ls_newsyntax,ls_errcreate) if len(ls_errcreate) > 0 then messagebox('生成临时表错误','提示:~n~n'+ls_errsyntaxfromSQL,stopsign!) return false end if ad_datastore.settransobject(at_trans) ad_datastore.retrieve() end ifat_trans.autocommit = falsereturn true
------解决方案--------------------
你在create之前,clipboard(ls_syntax),然后在开发环境下,随便建立一个dw并保存,然后edit source该dw,全选,然后粘贴粘贴板中的数据,再保存,看看保存的是第几行
------解决方案--------------------
你在create之前,clipboard(ls_syntax),然后在开发环境下,随便建立一个dw并保存,然后edit source该dw,全选,然后粘贴粘贴板中的数据,再保存,看看报错的是第几行
------解决方案--------------------
从代码本身看不出来有什么问题,楼主确认SQL没问题么?确认事务对象连接正确么?
------解决方案--------------------