w_extr_query.srw 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
  1. $PBExportHeader$w_extr_query.srw
  2. forward
  3. global type w_extr_query from window
  4. end type
  5. type cb_4 from commandbutton within w_extr_query
  6. end type
  7. type cb_3 from commandbutton within w_extr_query
  8. end type
  9. type cb_check from commandbutton within w_extr_query
  10. end type
  11. type cb_1 from commandbutton within w_extr_query
  12. end type
  13. type st_1 from statictext within w_extr_query
  14. end type
  15. type cbx_case_sensitive from checkbox within w_extr_query
  16. end type
  17. type cb_find from commandbutton within w_extr_query
  18. end type
  19. type dw_criteria from u_dw within w_extr_query
  20. end type
  21. end forward
  22. global type w_extr_query from window
  23. integer x = 553
  24. integer y = 248
  25. integer width = 2363
  26. integer height = 1256
  27. boolean titlebar = true
  28. boolean controlmenu = true
  29. windowtype windowtype = response!
  30. long backcolor = 134217739
  31. toolbaralignment toolbaralignment = alignatleft!
  32. cb_4 cb_4
  33. cb_3 cb_3
  34. cb_check cb_check
  35. cb_1 cb_1
  36. st_1 st_1
  37. cbx_case_sensitive cbx_case_sensitive
  38. cb_find cb_find
  39. dw_criteria dw_criteria
  40. end type
  41. global w_extr_query w_extr_query
  42. type variables
  43. Long i_lRow
  44. String i_aszTypes[]
  45. DataWindow i_dwToActOn
  46. datastore ls_ds
  47. s_extrtriequery_tran s_dbdw
  48. blob blob_dw
  49. STRING RT_STR=' '
  50. end variables
  51. forward prototypes
  52. private function string wf_escapechars (string a_szvalue)
  53. private subroutine wf_resetfind ()
  54. private function long wf_find (long a_lstartrow)
  55. end prototypes
  56. private function string wf_escapechars (string a_szvalue);//WF_ESCAPECHARS
  57. Char cChar
  58. Integer nLength, nPos
  59. nLength = Len( a_szValue)
  60. For nPos = nLength To 1 Step -1
  61. cChar = Mid( a_szValue, nPos, 1)
  62. Choose Case cChar
  63. Case "~t", "~r", "~n", '"', "'", "~~"
  64. a_szValue = Replace( a_szValue, nPos, 1, "~~" + cChar)
  65. End Choose
  66. Next
  67. Return Trim( a_szValue)
  68. end function
  69. private subroutine wf_resetfind ();i_lRow = 0
  70. cb_find.Text = "查询(&S)"
  71. end subroutine
  72. private function long wf_find (long a_lstartrow);//Long lNoOfCriteria, lRow, lColumnNo
  73. //Integer nPos
  74. //String szFind,szFind1, szColumn, szOperator, szValue, szExpression, szJoin, szFormat, szValue1, szValue2, szValue3
  75. //szfind1 = i_dwtoacton.describe("datawindow.table.select")
  76. //lNoOfCriteria = dw_criteria.RowCount()
  77. //
  78. //For lRow = 1 To lNoOfCriteria
  79. // lColumnNo = dw_criteria.GetItemNumber( lRow, "column_number")
  80. //
  81. // szColumn = i_dwToActOn.Describe( "#" + String( lColumnNo) + ".dbName")
  82. // szJoin = dw_criteria.GetItemString( lRow, "join_operator")
  83. // If IsNull( szJoin) Then szJoin = ""
  84. // szValue = wf_escapechars( dw_criteria.GetItemString( lRow, "value"))
  85. //If IsNull( dw_criteria.GetItemNumber( 1, "column_number")) Then
  86. // Return 1
  87. //End If
  88. //
  89. // Choose Case Left( i_aszTypes[ lColumnNo], 5)
  90. // Case "char("
  91. // If IsNull( szValue) Then
  92. // szExpression = szColumn
  93. // Else
  94. // szOperator = ( dw_criteria.GetItemString( lRow, "string_operators"))
  95. // If Right( szOperator, 4) = "LIKE" Then
  96. // If Pos( szValue, "%") = 0 Then
  97. // szValue = "%"+ szValue + "%"
  98. // End If
  99. // End If
  100. // szExpression = szOperator + " '" + szValue + "' "
  101. //
  102. // If cbx_case_sensitive.Checked Then
  103. // szExpression = szColumn + " " + szExpression
  104. // Else
  105. // szExpression = "( " + szColumn + ") " + ( szExpression)
  106. // End If
  107. // End If
  108. // Case "date", "time"
  109. // If IsNull( szValue) Then
  110. // szExpression = szColumn
  111. // Else
  112. // szOperator = ( dw_criteria.GetItemString( lRow, "datetime_operators"))
  113. // If Right( szOperator, 7) = "BETWEEN" Then
  114. // nPos = Pos( ( szValue), " AND ")
  115. // If nPos > 0 Then
  116. // szValue1 = Left( szValue, nPos - 1)
  117. // szValue2 = Mid( szValue, nPos + 5)
  118. // End If
  119. // Else
  120. // nPos = 0
  121. // End If
  122. //
  123. // If i_aszTypes[ lColumnNo] = "date" Then
  124. // szFormat = "yyyymmdd"
  125. // szValue = String( Date( szValue), szFormat)
  126. // szValue1 = String( Date( szValue1), szFormat)
  127. // szValue2 = String( Date( szValue2), szFormat)
  128. // ElseIf i_aszTypes[ lColumnNo] = "time" Then
  129. // szFormat = "hhmmss"
  130. // szValue = String( Time( szValue), szFormat)
  131. // szValue1 = String( Time( szValue1), szFormat)
  132. // szValue2 = String( Time( szValue2), szFormat)
  133. // End If
  134. //
  135. // If nPos = 0 Then
  136. // szExpression = "Long( String( " + szColumn + ", '" + szFormat + "')) " + szOperator + szValue
  137. // Else
  138. // szExpression = "Long( String( " + szColumn + ", '" + szFormat + "')) " + szOperator + &
  139. // " " + szValue1 + " AND " + szValue2
  140. // End If
  141. // End If
  142. // Case Else
  143. // If IsNull( szValue) Then
  144. // szExpression = szColumn
  145. // Else
  146. // szOperator = ( dw_criteria.GetItemString( lRow, "numeric_operators"))
  147. // If szOperator = "IN" Or szOperator = "NOT IN" Then
  148. // szExpression = szColumn + " " + szOperator + " (" + szValue + ") "
  149. // Else
  150. // szExpression = szColumn + " " + szOperator + " " + szValue + " "
  151. // End If
  152. // End If
  153. // End Choose
  154. //
  155. // szFind = szFind + " ( " + Trim( szExpression) + ") " + szJoin
  156. //
  157. //
  158. //Next
  159. //
  160. // szfind=szfind1+" where "+szfind
  161. // i_dwToActON.Modify("datawindow.table.select=~""+szfind+"~"")
  162. // i_dwToActon.retrieve()
  163. // i_dwtoacton.Modify("datawindow.table.select=~""+szfind1+"~"")
  164. //
  165. //
  166. //Return lRow
  167. return 0
  168. end function
  169. event open;environment exerun_env
  170. GetEnvironment(exerun_env )
  171. this.Move ( (PixelsToUnits(exerun_env.screenwidth, XPixelsToUnits!) - this.Width)/2,&
  172. (PixelsToUnits(exerun_env.screenheight, XPixelsToUnits!) - this.Height - 300 )/2)
  173. //
  174. Integer nColumnCount, nColumnIndex
  175. String szColumn
  176. Long lRow
  177. DataWindowChild dwcColumns
  178. string des_1,des_2
  179. s_dbdw= Message.PowerObjectParm
  180. //s_dbdw.ptn_ds.sharedata(dw_criteria)
  181. s_dbdw.ptn_ds.GetFullState(blob_dw)
  182. dw_criteria.setfullState(blob_dw)
  183. ls_ds=create datastore
  184. i_dwToActOn =s_dbdw.query_dw
  185. ls_ds.dataobject=s_dbdw.query_dw.dataobject
  186. i_lRow = 0
  187. IF i_dwToActOn.DATAOBJECT='' THEN RETURN
  188. nColumnCount = Integer( i_dwToActOn.Object.DataWindow.Column.Count)
  189. dw_criteria.GetChild( "column_number", dwcColumns)
  190. i_aszTypes[ nColumnCount] = ""
  191. For nColumnIndex = 1 To nColumnCount
  192. des_1= ls_ds.Describe( "#" + String(nColumnIndex) + ".Name")
  193. des_2= ls_ds.describe(des_1+ "_t.Text")
  194. szColumn = f_strip( ls_ds.Describe( ls_ds.Describe( "#" + String(nColumnIndex) + ".Name") + "_t.Text"))
  195. If szColumn <> "!" Then
  196. lRow = dwcColumns.InsertRow( 0)
  197. dwcColumns.SetItem( lRow, "column_name", szColumn)
  198. dwcColumns.SetItem( lRow, "column_number", nColumnIndex)
  199. i_aszTypes[ nColumnIndex] = ls_ds.Describe( "#" + String(nColumnIndex) + ".ColType")
  200. End If
  201. Next
  202. dw_criteria.TriggerEvent( "NewlastRow")
  203. CB_3.ENABLED= dw_criteria.rowCOUNT()=0
  204. //if dw_criteria.rowcount()=0 then dw_criteria.TriggerEvent( "NewRow")
  205. end event
  206. on w_extr_query.create
  207. this.cb_4=create cb_4
  208. this.cb_3=create cb_3
  209. this.cb_check=create cb_check
  210. this.cb_1=create cb_1
  211. this.st_1=create st_1
  212. this.cbx_case_sensitive=create cbx_case_sensitive
  213. this.cb_find=create cb_find
  214. this.dw_criteria=create dw_criteria
  215. this.Control[]={this.cb_4,&
  216. this.cb_3,&
  217. this.cb_check,&
  218. this.cb_1,&
  219. this.st_1,&
  220. this.cbx_case_sensitive,&
  221. this.cb_find,&
  222. this.dw_criteria}
  223. end on
  224. on w_extr_query.destroy
  225. destroy(this.cb_4)
  226. destroy(this.cb_3)
  227. destroy(this.cb_check)
  228. destroy(this.cb_1)
  229. destroy(this.st_1)
  230. destroy(this.cbx_case_sensitive)
  231. destroy(this.cb_find)
  232. destroy(this.dw_criteria)
  233. end on
  234. event close;CLOSEWITHRETURN(THIS,RT_STR)
  235. end event
  236. type cb_4 from commandbutton within w_extr_query
  237. integer x = 2107
  238. integer y = 16
  239. integer width = 219
  240. integer height = 96
  241. integer taborder = 60
  242. integer textsize = -9
  243. integer weight = 400
  244. fontcharset fontcharset = gb2312charset!
  245. fontpitch fontpitch = variable!
  246. string facename = "宋体"
  247. string text = "删除行"
  248. end type
  249. event clicked;IF dw_criteria.GETROW()<=0 THEN
  250. MESSAGEBOX('','请指定目标行!')
  251. RETURN
  252. END IF
  253. dw_criteria.deleterow(dw_criteria.GETROW())
  254. CB_3.ENABLED= dw_criteria.rowCOUNT()=0
  255. end event
  256. type cb_3 from commandbutton within w_extr_query
  257. integer x = 1723
  258. integer y = 16
  259. integer width = 325
  260. integer height = 96
  261. integer taborder = 10
  262. integer textsize = -9
  263. integer weight = 400
  264. fontcharset fontcharset = gb2312charset!
  265. fontpitch fontpitch = variable!
  266. string facename = "宋体"
  267. string text = "增加行"
  268. end type
  269. event clicked;//INT LS_ROW
  270. //LS_ROW=dw_criteria.INSERTrow(dw_criteria.GETROW())
  271. //dw_criteria.SETrow(LS_ROW)
  272. //dw_criteria.ScrollToRow(LS_ROW)
  273. dw_criteria.TriggerEvent( "NewlastRow")
  274. THIS.ENABLED=FALSE
  275. end event
  276. type cb_check from commandbutton within w_extr_query
  277. integer x = 32
  278. integer y = 1016
  279. integer width = 315
  280. integer height = 96
  281. integer taborder = 50
  282. integer textsize = -9
  283. integer weight = 400
  284. fontcharset fontcharset = gb2312charset!
  285. fontpitch fontpitch = variable!
  286. string facename = "宋体"
  287. string text = "语法检查"
  288. end type
  289. event clicked;Long lNoOfCriteria, lRow, lColumnNo,lLen
  290. Integer nPos,LEFT_ICLNO=0,RIGHT_ICLNO=0
  291. String szFind,szFind1, szColumn, szOperator, szValue, szExpression, szJoin, szFormat, szValue1, szValue2, szValue3
  292. szfind1 = Lower(i_dwtoacton.describe("datawindow.table.select"))
  293. lNoOfCriteria = dw_criteria.RowCount()
  294. STRING LS_not_operator='',LS_left_icl='',LS_RIGHT_icl=''
  295. For lRow = 1 To lNoOfCriteria
  296. If IsNull( dw_criteria.GetItemNumber( lrow, "column_number")) Then
  297. MESSAGEBOX('发现错误','发现空比较列!')
  298. RETURN
  299. End If
  300. IF dw_criteria.OBJECT.LEFT_ICL[lRow]='(' THEN LEFT_ICLNO=LEFT_ICLNO+1
  301. IF dw_criteria.OBJECT.RIGHT_ICL[lRow]=')' THEN RIGHT_ICLNO=RIGHT_ICLNO+1
  302. Next
  303. IF RIGHT_ICLNO<>LEFT_ICLNO THEN
  304. MESSAGEBOX('发现错误','左右括号不配对!')
  305. RETURN
  306. END IF
  307. For lRow = 1 To lNoOfCriteria
  308. lColumnNo = dw_criteria.GetItemNumber( lRow, "column_number")
  309. szColumn = ls_ds.Describe( "#" + String( lColumnNo) + ".dbName")
  310. szJoin = dw_criteria.GetItemString( lRow, "join_operator")
  311. If IsNull( szJoin) Then szJoin = ""
  312. szValue = wf_escapechars( dw_criteria.GetItemString( lRow, "value"))
  313. if isnull(szValue) then szValue=''
  314. szValue1 = string(dw_criteria.getitemdatetime(lrow,"datetime_value"),"yyyy-mm-dd")
  315. LS_not_operator=dw_criteria.GetItemString( lRow, "not_operator")
  316. LS_left_icl=dw_criteria.GetItemString( lRow, "left_icl")
  317. LS_RIGHT_icl=dw_criteria.GetItemString( lRow, "RIGHT_icl")
  318. If IsNull( dw_criteria.GetItemNumber( lrow, "column_number")) Then
  319. exit
  320. End If
  321. STRING GG
  322. GG=Left( i_aszTypes[ lColumnNo], 5)
  323. Choose Case Left( i_aszTypes[ lColumnNo], 5)
  324. Case "char("
  325. szOperator = ( dw_criteria.GetItemString( lRow, "string_operators"))
  326. If Right( szOperator, 4) = "LIKE" Then
  327. If Pos( szValue, "%") = 0 Then
  328. szValue = "%"+ szValue + "%"
  329. End If
  330. End If
  331. szExpression =szColumn +" "+ szOperator + " '" + szValue + "' "
  332. Case "datet"
  333. szOperator = ( dw_criteria.GetItemString( lRow, "datetime_operators"))
  334. szExpression =szColumn + szOperator + "'"+szValue1+"' "
  335. Case Else
  336. szOperator = ( dw_criteria.GetItemString( lRow, "numeric_operators"))
  337. If szOperator = "IN" Or szOperator = "NOT IN" Then
  338. szExpression = szColumn + " " + szOperator + " (" + szValue + ") "
  339. Else
  340. szExpression = szColumn + " " + szOperator + " " + szValue + " "
  341. End If
  342. End Choose
  343. szFind = szFind + ' '+LS_not_operator+' '+LS_left_icl+' '+ Trim( szExpression) +' '+LS_RIGHT_icl+' ' + szJoin
  344. setnull(szValue)
  345. setnull(szValue1)
  346. LS_not_operator=''
  347. LS_left_icl=''
  348. LS_RIGHT_icl=''
  349. Next
  350. IF ISNULL(szFind) THEN
  351. MESSAGEBOX('错误','语法错误!')
  352. RETURN
  353. END IF
  354. MESSAGEBOX('成功','通过语法检查!')
  355. end event
  356. type cb_1 from commandbutton within w_extr_query
  357. integer x = 1874
  358. integer y = 1016
  359. integer width = 329
  360. integer height = 96
  361. integer taborder = 40
  362. integer textsize = -9
  363. integer weight = 400
  364. fontcharset fontcharset = gb2312charset!
  365. fontpitch fontpitch = variable!
  366. string facename = "宋体"
  367. string text = "取消"
  368. boolean cancel = true
  369. end type
  370. event clicked;close(parent)
  371. end event
  372. type st_1 from statictext within w_extr_query
  373. integer x = 55
  374. integer y = 32
  375. integer width = 571
  376. integer height = 76
  377. integer textsize = -11
  378. integer weight = 700
  379. fontcharset fontcharset = gb2312charset!
  380. fontpitch fontpitch = variable!
  381. string facename = "宋体"
  382. long textcolor = 33554432
  383. long backcolor = 134217739
  384. boolean enabled = false
  385. string text = "查询条件编辑"
  386. boolean focusrectangle = false
  387. end type
  388. type cbx_case_sensitive from checkbox within w_extr_query
  389. boolean visible = false
  390. integer x = 366
  391. integer y = 1024
  392. integer width = 681
  393. integer height = 72
  394. integer textsize = -8
  395. integer weight = 400
  396. fontpitch fontpitch = variable!
  397. fontfamily fontfamily = swiss!
  398. string facename = "Arial"
  399. long textcolor = 33554432
  400. long backcolor = 134217739
  401. string text = "Case &Sensitive Search"
  402. end type
  403. event clicked;wf_ResetFind()
  404. end event
  405. type cb_find from commandbutton within w_extr_query
  406. event key pbm_keydown
  407. integer x = 1486
  408. integer y = 1016
  409. integer width = 329
  410. integer height = 96
  411. integer taborder = 30
  412. integer textsize = -9
  413. integer weight = 400
  414. fontcharset fontcharset = gb2312charset!
  415. fontpitch fontpitch = variable!
  416. string facename = "宋体"
  417. string text = "确定"
  418. end type
  419. event key;If key = KeyEnter! Then //
  420. THIS.POSTEVENT(CLICKED!)
  421. End If
  422. Return 0
  423. end event
  424. event clicked;Long lNoOfCriteria, lRow, lColumnNo,lLen
  425. Integer nPos,LEFT_ICLNO=0,RIGHT_ICLNO=0
  426. String szFind,szFind1, szColumn, szOperator, szValue, szExpression, szJoin, szFormat, szValue1, szValue2, szValue3
  427. //szfind1 = Lower(i_dwtoacton.describe("datawindow.table.select"))
  428. szfind1 = Lower(s_dbdw.query_oldselect) //新的
  429. lNoOfCriteria = dw_criteria.RowCount()
  430. STRING LS_not_operator='',LS_left_icl='',LS_RIGHT_icl=''
  431. For lRow = 1 To lNoOfCriteria
  432. If IsNull( dw_criteria.GetItemNumber( lrow, "column_number")) Then
  433. MESSAGEBOX('发现错误','发现空比较列!')
  434. RETURN
  435. End If
  436. IF dw_criteria.OBJECT.LEFT_ICL[lRow]='(' THEN LEFT_ICLNO=LEFT_ICLNO+1
  437. IF dw_criteria.OBJECT.RIGHT_ICL[lRow]=')' THEN RIGHT_ICLNO=RIGHT_ICLNO+1
  438. Next
  439. IF RIGHT_ICLNO<>LEFT_ICLNO THEN
  440. MESSAGEBOX('发现错误','左右括号不配对!')
  441. RETURN
  442. END IF
  443. For lRow = 1 To lNoOfCriteria
  444. lColumnNo = dw_criteria.GetItemNumber( lRow, "column_number")
  445. szColumn = ls_ds.Describe( "#" + String( lColumnNo) + ".dbName")
  446. szJoin = dw_criteria.GetItemString( lRow, "join_operator")
  447. If IsNull( szJoin) Then szJoin = ""
  448. szValue = wf_escapechars( dw_criteria.GetItemString( lRow, "value"))
  449. if isnull(szValue) then szValue=''
  450. szValue1 = string(dw_criteria.getitemdatetime(lrow,"datetime_value"),"yyyy-mm-dd")
  451. LS_not_operator=dw_criteria.GetItemString( lRow, "not_operator")
  452. LS_left_icl=dw_criteria.GetItemString( lRow, "left_icl")
  453. LS_RIGHT_icl=dw_criteria.GetItemString( lRow, "RIGHT_icl")
  454. If IsNull( dw_criteria.GetItemNumber( lrow, "column_number")) Then
  455. exit
  456. End If
  457. STRING GG
  458. GG=Left( i_aszTypes[ lColumnNo], 5)
  459. Choose Case Left( i_aszTypes[ lColumnNo], 5)
  460. Case "char("
  461. szOperator = ( dw_criteria.GetItemString( lRow, "string_operators"))
  462. If Right( szOperator, 4) = "LIKE" Then
  463. If Pos( szValue, "%") = 0 Then
  464. szValue = "%"+ szValue + "%"
  465. End If
  466. End If
  467. szExpression =szColumn +" "+ szOperator + " '" + szValue + "' "
  468. Case "datet"
  469. szOperator = ( dw_criteria.GetItemString( lRow, "datetime_operators"))
  470. szExpression =szColumn + szOperator + "'"+szValue1+"' "
  471. Case Else
  472. szOperator = ( dw_criteria.GetItemString( lRow, "numeric_operators"))
  473. If szOperator = "IN" Or szOperator = "NOT IN" Then
  474. szExpression = szColumn + " " + szOperator + " (" + szValue + ") "
  475. Else
  476. szExpression = szColumn + " " + szOperator + " " + szValue + " "
  477. End If
  478. End Choose
  479. szFind = szFind + ' '+LS_not_operator+' '+LS_left_icl+' '+ Trim( szExpression) +' '+LS_RIGHT_icl+' ' + szJoin
  480. setnull(szValue)
  481. setnull(szValue1)
  482. LS_not_operator=''
  483. LS_left_icl=''
  484. LS_RIGHT_icl=''
  485. Next
  486. if szfind='' or isnull(szfind) then
  487. szfind = szfind1
  488. else
  489. if Pos(szFind1," where ") <> 0 then
  490. szfind=szfind1+" AND ("+szfind+')'
  491. else
  492. szfind = szfind1+" where ("+szfind+')'
  493. end if
  494. end if
  495. SZFIND=trim(SZFIND)
  496. if UPPER(right(SZFIND,3))=' OR' THEN
  497. SZFIND=LEFT(SZFIND,LEN(SZFIND) - 3)
  498. ELSEIF UPPER(right(SZFIND,4))=' OR)' THEN
  499. SZFIND=LEFT(SZFIND,LEN(SZFIND) - 4) +')'
  500. ELSEIF UPPER(right(SZFIND,4))=' AND' THEN
  501. SZFIND=LEFT(SZFIND,LEN(SZFIND) - 4)
  502. ELSEIF UPPER(right(SZFIND,5))=' AND)' THEN
  503. SZFIND=LEFT(SZFIND,LEN(SZFIND) - 5) +')'
  504. END IF
  505. dw_criteria.GetfullState(blob_dw)
  506. s_dbdw.ptn_ds.setFullState(blob_dw)
  507. //messagebox('',SZFIND)
  508. //Closewithreturn(parent,szfind)
  509. rt_str=szfind
  510. close(parent)
  511. end event
  512. type dw_criteria from u_dw within w_extr_query
  513. event key pbm_dwnkey
  514. integer x = 27
  515. integer y = 128
  516. integer width = 2295
  517. integer height = 872
  518. integer taborder = 20
  519. string dataobject = "d_extr_find"
  520. boolean vscrollbar = true
  521. end type
  522. event key;If key = KeyEnter! Then //
  523. keybd_event ( 9, 0, 0 , 0 ) // 按下tab
  524. keybd_event ( 9, 0, 2, 0 ) // 释放tab
  525. Return 1
  526. End If
  527. end event
  528. event itemchanged;Long lRow, lTotalRows, lIndex, lReturn = 0
  529. String szValue
  530. string szcolumn,szvalues,szstyle,szdisp,szdata,szdacol,szdiscol
  531. long lcolumnno,l_count,l_curr
  532. datawindowchild dwc_query
  533. lRow = this.GetRow()
  534. lTotalRows = this.RowCount()
  535. szValue = this.GetText()
  536. this.accepttext()
  537. Choose Case this.GetcolumnName()
  538. Case "column_number"
  539. lIndex = Long( szValue)
  540. If lIndex > 0 Then
  541. If i_aszTypes[ lIndex] <> "" Then
  542. this.modify("value.values="+"'"+"~t"+"'")
  543. this.SetItem( lRow, "column_datatype", i_aszTypes[ lIndex])
  544. lColumnNo = dw_criteria.GetItemNumber( lRow, "column_number")
  545. szColumn = i_dwToActOn.Describe( "#" + String( lColumnNo) + ".Name")
  546. szvalues = i_dwToActOn.Describe(szColumn+".values")
  547. if szvalues = "?" then
  548. else
  549. this.modify("value.values="+"'"+szvalues+"'")
  550. end if
  551. if i_dwToActOn.Describe(szColumn+".Edit.Style") = "dddw" then
  552. szdacol = i_dwToActon.Describe(szColumn+".dddw.Datacolumn")
  553. szdiscol = i_dwToActOn.Describe(szColumn+".dddw.DisplayColumn")
  554. i_dwToActOn.GetChild(szColumn,dwc_query)
  555. l_count = dwc_query.rowcount()
  556. szvalues = ''
  557. for l_curr = 1 to l_count
  558. szdata = dwc_query.getitemstring(l_curr,szdacol)
  559. szdisp = dwc_query.getitemstring(l_curr,szdiscol)
  560. szvalues = szvalues + szdisp + "~t" +szdata + "/"
  561. next
  562. this.modify("value.values="+"'"+szvalues+"'")
  563. end if
  564. End If
  565. End If
  566. Case "value"
  567. If Trim( szValue) <> "" Then
  568. Choose Case Lower( this.GetItemString( lRow, "column_datatype"))
  569. Case "date"
  570. If Not IsDate( szValue) Then
  571. lReturn = 1
  572. End If
  573. Case "time"
  574. If Not IsTime( szValue) Then
  575. lReturn = 1
  576. End If
  577. Case "long", "ulong", "real"
  578. If Not IsNumber( szValue) Then
  579. lReturn = 1
  580. End If
  581. End Choose
  582. End If
  583. Case "join_operator"
  584. If lRow = lTotalRows And Not IsNull( this.GetItemNumber( lRow, "column_number")) Then
  585. this.TriggerEvent( "NewRow")
  586. ElseIf Trim( szValue) = "" And lTotalRows > 1 And lRow <> lTotalRows Then
  587. dw_criteria.SetRow( lRow + 1)
  588. dw_criteria.TriggerEvent( "DeleteRow")
  589. End If
  590. End Choose
  591. return lReturn
  592. end event
  593. event newfirstrow;call super::newfirstrow;if dw_criteria.getrow()>0 then
  594. //dw_criteria.object.rptid[dw_criteria.getrow()]=s_dbdw.rptid
  595. CB_3.ENABLED= dw_criteria.rowCOUNT()=0
  596. end if
  597. end event
  598. event newlastrow;call super::newlastrow;if dw_criteria.getrow()>0 then
  599. //dw_criteria.object.rptid[dw_criteria.getrow()]=s_dbdw.rptid
  600. //dw_criteria.object.modelcode[dw_criteria.getrow()]=s_dbdw.modelcode
  601. CB_3.ENABLED= dw_criteria.rowCOUNT()=0
  602. end if
  603. end event
  604. event newrow;call super::newrow;if dw_criteria.getrow()>0 then
  605. //dw_criteria.object.rptid[dw_criteria.getrow()]=s_dbdw.rptid
  606. CB_3.ENABLED= dw_criteria.rowCOUNT()=0
  607. end if
  608. end event