ITPub博客

首页 > Linux操作系统 > Linux操作系统 > FP项目技术收获总结

FP项目技术收获总结

原创 Linux操作系统 作者:ljm0211 时间:2012-07-02 10:49:47 0 删除 编辑
1、取得绝对行数的两种方法;
     a.grdDetail.AddItemRowIndex(grdDetail.FirstRow) + grdDetail.Row
     b.grdDetail.AddItemRowIndex(grdDetail.BookMark)
    其中b方法只有当grdDetail处于AddItem模式时,才起作用。而且当要取得最后一行处于编辑状态的行的绝对行数,应采用a方法,因为处于新增 状态的行的BookMark通过grdDetail.BookMark,grddetail.AddItemBookmark是取不到的,而它的绝对行数 可以取到。在Update前新增行的BookMark可以说是没有。当Update后新增行的BookMark产生,而它的绝对行数可以取到。

2、 在BeforeColUpdate事件中通常作一些数据格式的check动作;在AfterColUpdate事件中通常作一些根据某些已添加字段向另一 个字段插值的动作;在KeyPress事件中通常作一些输入限制的动作和自动向某个字段插入默认值的动作;在BeforeDelete事件中通常可以作给 用户发送友好的确认信息的动作;
    代码如下:
'********************************************************************
'* Module             : SCMMSFD:grdDetail_BeforeDelete()
'* Author             : HI1\Kevin L Li
'* Function           : send a friendly message to user
'* Date Created       : 2005-8-26
'* Date Modified      :
'* Maint. Log         :
'********************************************************************
'* Input              :
'* Output             :
'* Process Flow       :
'********************************************************************
Private Sub grdDetail_BeforeDelete(Cancel As Integer, DispPromptMsg As Integer)
    
     ''' declare variable
     Dim lngC        As Long
     Dim vBkMark     As Variant
    
     Cancel = 1
     If MsgBox("Are you sure to delete the lines!", vbOKCancel + vbInformation, "Information Message:") = vbCancel Then
         Exit Sub
     Else
         For lngC = (grdDetail.SelBookmarks.count - 1) To 0 Step -1
             vBkMark = grdDetail.SelBookmarks(lngC)
             grdDetail.RemoveItem (grdDetail.AddItemRowIndex(vBkMark))
         Next lngC
     End If
End Sub

3、在ssdbgrid中回车键vbReturn可以在KeyPress事件中捕获到,然后KeyAscii = 0,再SendKeys "{tab}"。
   代码如下:
        If KeyAscii = vbKeyReturn Then
               KeyAscii = 0
               SendKeys "{tab}"
        End If

4、check数据出错后,选中出错行,使用到grdDetail.SelBookmarks.Add grdDetail.AddItemBookmark(IntI),其中IntI是绝对行数。为便于理解附代码如下:

    For IntI = grdDetail.Rows - 1 To 0 Step -1
        If Trim(grdDetail.Columns("flag").CellText(IntI)) = "E" Then
            Exit For
        Else
            If Len(Trim(grdDetail.Columns("Part Number").CellText(IntI))) = 0 Then
                Screen.MousePointer = vbDefault
                MsgBox "the 'Part Number' column is not nullable!", vbInformation, "Information Message:"
                grdDetail.SelBookmarks.Add grdDetail.AddItemBookmark(IntI)
                Exit Sub
            ElseIf Len(Trim(grdDetail.Columns("Quantity").CellText(IntI))) = 0 Then
                Screen.MousePointer = vbDefault
                MsgBox "the 'Quantity' column is not nullable!", vbInformation, "Information Message:"
                grdDetail.SelBookmarks.Add grdDetail.AddItemBookmark(IntI)
                Exit Sub
            End If
           
        End If
    Next IntI

5、在BeforeColUpdate事件中check数据不符合格式提示出错后,将焦点定位到出错位置,先MsgBox,再Cancel= 1,最后Call SetGridFocus;
        Case "Quantity"
            If Len(Trim(grdDetail.Columns("Quantity").Text)) = 0 Then
                MsgBox "Quantity column is not nullable!", vbInformation, "Information Message:"
                Cancel = 1
                Call SetGridFocus(grdDetail, grdDetail.AddItemRowIndex(grdDetail.Bookmark) + 1, ColIndex + 1, 0)
                Exit Sub
            End If

'********************************************************************
'* Input              : grdObject->SSDBGrid,IntRow->Currrent Row ID,intCol->Next Column,intLockUnVis->Locked Number
'* Output             :
'* Process Flow       :
'********************************************************************
Private Sub SetGridFocus(grdObject As SSDBGrid, intRow As Long, intCol As Long, intLockUnVis As Long)
     grdObject.SetFocus
     SendKeys "^{HOME}{DOWN " & intRow & "}{RIGHT " & Abs(intCol - intLockUnVis) & "}", True
     grdObject.ActiveCell.SelStart = 0
     grdObject.ActiveCell.SelLength = Len(grdObject.ActiveCell.Text)
End Sub

6、SQL语句中WHERE条件的顺序
   在SQL语句中WHERE后的条件是从后向前执行的,所以为提高SQL语句的执行效率,应该把能过滤掉较多记录的条件写在后边,这样在执行前面的条件时需要操作的记录数就会少很多,效率自然会有所提高。

7、Error处理
   在相对复杂或有对数据库进行操作的函数里都应该有Error处理代码;在函数级Error处理代码中应该Call Err.Raise(Err.Number, "getFileFromRemote", Err.Description)将Error向上抛;在UI级Error处理中应该Call ShowError直接将错误信息发给用户;在函数中有对数据库进行操作的代码,在Error处理时都应该Set rsDB = Nothing来释放资源。

8、FP中FTP实现
   相关内容可参考FP FTP help.doc;

9、在一个Form中MsgBox尽量风格一致;
   如:MsgBox "the file can't be found!", vbInformation, "Information Message:"

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11411056/viewspace-734283/,如需转载,请注明出处,否则将追究法律责任。

下一篇: Dynamic Arrays
请登录后发表评论 登录
全部评论

注册时间:2009-05-14

  • 博文量
    272
  • 访问量
    436836