DataWindow: dw_where的 ue_where 事件
功能形成WHERE子句并更新语法框
string hzcol ywcol sValue sType // sWhere
//sWhere 现为实例变量在wroot_query中为局部变量
string sOper sLog sLeft_khsRight_kh tmpsValue
long left_khright_kh //左右括号数
integer i rownum delnum // typenum
dwItemStatus l_status
if ib_changed = true then
ib_changed = false
else
return
end if
rownum = dw_whereRowCount()
//去掉dw_where中MaxEditRow行以前所有中间为空或
//者输入不完整的行 并更新MaxEditRow
i =
delnum =
DO WHILE i <= MaxEditRow
l_status = dw_whereGetItemStatus(i Primary!)
if l_status <> New! then
hzcol = GetItemString(icolumn)
sValue = GetItemString(ivalue)
if (hzcol = or isnull(hzcol)) or (sValue = or isnull(sValue)) then
dw_whereDeleteRow(i)
delnum +=
MaxEditRow +=
Continue
end if
else
dw_whereDeleteRow(i)
delnum +=
MaxEditRow +=
Continue
end if
i +=
LOOP
For i = to DelNum
dw_whereInsertRow()
Next
//检查左右括号是否匹配 即其数量是否一样多
For i = to MaxEditRow
l_status = dw_whereGetItemStatus(i Primary!)
if l_status <> New! then
left_kh += inv_stringof_countoccurrences(GetItemString(iprecol)()
right_kh += inv_stringof_countoccurrences(GetItemString(ivalue)))
end if
Next
i = left_kh right_kh
if i <> then
if i > then
sValue = 查询条件中左括号比右括号多了 + String(i) + 个
else
sValue = 查询条件中左括号比右括号少了 + String(i) + 个
end if
if MessageBox(综合查询输入错误sValue + 请改正 + &
~r~n~r~n否则所有查询条件将被忽略None!OKCancel!)= then
return
else
dw_wheresetfocus()
return
end if
end if
//形成WHERE子句并更新语法框
sWhere =
For i = to MaxEditRow
hzcol = GetItemString(icolumn)
sOper = space() + GetItemString(ioperator) + space()
// 去掉空格键
sValue = Trim(GetItemString(ivalue))
sLeft_kh = GetItemString(iprecol) //保存左括号
if isNull(sLeft_kh) then sLeft_kh =
if Pos(sValue)) > then //保存右括号
sRight_kh = Right(sValue(Len(sValue) Pos(sValue)) + ))
else
sRight_kh =
end if
sValue = inv_stringof_globalreplace(sValue) //去掉sValue中的单引号
sValue = inv_stringof_globalreplace(sValue) //去掉sValue中的双引号
sValue = inv_stringof_globalreplace(sValue)) //去掉sValue中的右括号
sLog = GetItemString(ilogical)
if sLog = or isNull(sLog) then
sLog = and
dw_whereSetItem(ilogicaland)
end if
ywcol = wf_getYwName(hzcol) //表名列名
sType = lower(wf_getYwType(hzcol))
CHOOSE CASE sType
CASE charcharacterstringncharnvarcharvarchartime
if trim(sOper) = like or trim(sOper) = not like then
sWhere += ( + sLeft_kh + ywcol + sOper + % + sValue + %) + sRight_kh + sLog
else
sWhere += ( + sLeft_kh + ywcol + sOper + + sValue + ) + sRight_kh + sLog
end if
CASE numericdecimaldecimalndecdoubleintegerintsmallint&
numberlongrealuintulongunsignedintunsignedintegerunsignedlong
if trim(sOper) = like or trim(sOper) = not like then
if MessageBox(提示信息hzcol + 不是字符型不能使用<含有>或<不含有>操作符 + &
~r~n~r~n请改正; 否则所有查询条件将被忽略None!OKCancel!)= then
return
else
dw_wheresetfocus()
return
end if
end if
if isNumber(sValue) then
sWhere += ( + sLeft_kh + ywcol + sOper + sValue + ) + sRight_kh + sLog
else
if MessageBox(综合查询输入错误hzcol + 的值应为数字型请改正 + &
~r~n~r~n否则所有查询条件将被忽略None!OKCancel!)= then
Return
else
dw_wheresetfocus()
return
end if
end if
CASE datedatetimedatetimnsmalldatetimetimestamp
if trim(sOper) = like or trim(sOper) = not like then
if MessageBox(提示信息hzcol + 不是字符型不能使用<含有>或<不含有>操作符 + &
~r~n~r~n请改正; 否则所有查询条件将被忽略None!OKCancel!)= then
return
else
dw_wheresetfocus()
return
end if
end if
if sType = date then
if not isdate(sValue) then
if MessageBox(综合查询输入错误hzcol + 的值应为日期型请改正; + &
~r~n~r~n否则所有查询条件将被忽略None!OKCancel!)= then
Return
else
dw_wheresetfocus()
return
end if
end if
sValue = wf_dateconvert(sValue)
sWhere += ( + sLeft_kh + ywcol + sOper + + sValue + ) + sRight_kh + sLog
else
//datetime型的字段在sybase中转换为字符串的类型
sValue = wf_datetime(sValue)
if sValue = error then
if MessageBox(综合查询输入错误hzcol + 的值应为日期时间型请改正 + &
~r~n~r~n否则所有查询条件将被忽略None!OKCancel!)= then
Return
else
dw_wheresetfocus()
return
end if
end if
sWhere += ( + sLeft_kh + convert(varchar()+ywcol+) + sOper + +sValue+) + sRight_kh +
sLog
end if
CASE ELSE
beep()
MessageBox(综合查询sType + 这个数据类型未在本模块中定义)
Return
END CHOOSE
Next
//去掉最后一个逻辑符
Long pok pp
pp =
DO WHILE True
pok = pp
pp = Pos(sWhere ) pp + )
if pp = then Exit
LOOP
if pok > then sWhere = Trim(Left(sWhere pok))
return
//最后一个逻辑符去掉结束
//至此 用户的WHERE语句部分已经形成完毕于sWhere中
DataWindow: dw_where的 ue_mousemove 事件
功能控制鼠标的移动
string s_object
s_object = ThisGetObjectAtPointer()
if left(s_object) = value then
MainWindowSetMicroHelp(此时按鼠标右键可粘贴现有值)
else
MainWindowSetMicroHelp(准备好)
end if
DataWindow: dw_where的ue_retrieve事件
功能对数据窗口进行查询详细请见代码
// 如果数据窗口dw_result上并无ue_action_refresh事件
// 则用户必须重载本事件编写自己的脚本
// 如:
// dw_resultretrieve()
//
// 或者如果数据窗口dw_result有retrieve参数
// 则用户也必须重载本事件编写自己的脚本
// 如:
// string ls_id
// ls_id =
// dw_resultretrieve(ls_id)
dw_resulttriggerevent(ue_action_refresh)