各位大师,在一个窗体中,我现在要判断:
如果"保存"命令是由"新增"命令激活的,则执行"自动编号"的代码,将其写在"客户ID"中并保存;
如果"保存"命令是由"修改"命令激活的,则"客户ID"记录锁定,为原记录,进行保存;
如何写这段代码!!!或者还有其他的判断方式?
我的代码如下:
Private Sub cmdSave_Click()
    Me.Caption = "订单-新增"
    Call StateR
        
        'If Me.NewRecord = False Then 
        '我试着用这句来判断,但不成功
        'Me.SOrderID.Locked = True
        'End If
        
        '以下为自动编号的代码,不知是否有问题
        Dim strMax As String
        If IsNull(DLookup("[sorderid]", "tblsorder")) Then
        strMax = 0
        Else
        strMax = DMax("[SOrderID]", "tblsorder", "Right([SOrderID],3)")
        End If
        Me![SOrderID] = "CG-" & Format(Right(strMax, 3) + 1, "000")
        
        '这句也不成功
        'If Me.NewRecord = False Then
        'Me.SOrderID.Locked = True
        'End If
   End Sub我将订单窗口设为用命令控制,一共有"新增"/"修改"/"取消"/"删除"/"保存",还有一个"退出"命令,其中:新增=cmdAdd / "修改"=cmdEdit /"取消"=cmdCancel /"删除"=cmdDelete/ 保存"=cmdSave/"退出"=cmdExit,只有"新增"各"修改"命令才会调出"保存",能否帮我改改以上代码,谢谢!!

解决方案 »

  1.   

    我以上代码在按"新增"命令时,填上一些数据按"保存"命令后,字段"SOrderID"编号会自动增加;但如果在按"修改"命令,在原有数据上修改一些数据,按"保存"命令后,则字段"SOrderID"编号也会递增,如原订单的编号为"CG-009",则会将其改为"CG-056"(如我最大编号是"CG-055"的话),而在数据库中编号为"CG-009"则会成为空码.
      

  2.   

    定义一个窗体级(模块级)变量,然后在相应的程序段内给它敷不同的数值,需要时根据这个变量的值进行判断即可,大致这样:dim i as longPrivate Sub cmdSave_Click()
        if i=i then
          '执行"自动编号"的代码,将其写在"客户ID"中并保存
        ElseIf i = 2 Then
          '"客户ID"记录锁定,为原记录,进行保存
        End If
    End SubPrivate Sub cmdadd_Click()
        i=1
        '下面写你的代码
    End SubPrivate Sub cmdedit_Click()
        i=2
        '下面写你的代码
    End Sub希望我没理解错你的问题,你的术语令我感到很迷惑
      

  3.   

    通过判断按钮的caption值,如果caption="新增"则执行自动编号 如果caption为修改则执行update
      

  4.   

    对,定义个全局变量,
    Private blNew As BoolenPrivate Sub NewButton_Click(sender,e)
         blNew = True
    End SubPrivate Sub SaveButton_Click(sender,e)
         If blNew then
            '执行"自动编号"的代码,将其写在"客户ID"中并保存
        Else
            '"客户ID"记录锁定,为原记录,进行保存
        End if
    End Sub
      

  5.   

    还需要一个,少了。save里
    Private Sub SaveButton_Click(sender,e)
         If blNew then
            '执行"自动编号"的代码,将其写在"客户ID"中并保存
        Else
            '"客户ID"记录锁定,为原记录,进行保存
        End if
        blNew = False '还原以备下次判断
    End SubPrivate Form_Load()
        blNew = False '初始化,避免初始化前就是True,虽然vb默认是False,但是有个初始化习惯好
    End Sub
      

  6.   

    把保存作成一个过程。
    sub SaveData(SaveType as integer)
    select case savetype
    case 0       '新增
    case 1       '修改
    end select
    …………
    enc sub然后用SAVETYPE参数来确定到底是新增还是修改。
      

  7.   

    怎样将它定义在"窗体过程外"
    比如楼上"rainstormmaster"他帮我写的代码里面"dim i as long"是不是一个全局变量,他应该写在哪里呢
      

  8.   

    对,那个dim i as long 就是
      

  9.   

    一个作用域的问题
    ===========================
    全局变量与局部变量全局变量 
    用Public声明的变量就是全局变量,程序中的任何窗体和模块都能访问到它。声明全局变量要小心,任何模块或窗体中对它的修改都会影响其它模块或窗体中该变量的值。局部变量 
    在模块和窗体中用Dim或Static等声明的变量只在本模块或窗体中起作用,这样的变量叫局部变量。如杲全局变量和局部变量同名,则在局部变量所在模块或窗体内部,该变量为局部变量。离开该窗体或模块,该变量仍为全局变量。
      

  10.   

    各位大师,谢谢指导,我已按照楼上"rainstormmaster"思路解决了问题,但其全局变量"dim i as long"要不要初始化,怎样初始化呢?!
    急!
      

  11.   

    还有一小问题:如果在"新增"命令后,不填任何数据,操作"放弃"命令,则会将你的数据删除,从你的第一条删起,现将其代码摘录如下,高手请来帮我改改!一改好就送分哇!一身冷汗,如果做进程序,真要命!!!!Private Sub comCancel_Click()
        '放弃
        Me.Undo
        If Me.Recordset.EOF And Me.Recordset.BOF Then
            Call comExit_Click
            Exit Sub
        Else
            If Me.Caption = "出库-新增" Then
                Me.Recordset.Delete
                If Me.Recordset.EOF And Me.Recordset.BOF Then
                    Call comExit_Click
                    Me.Caption = "出库"
                    Exit Sub
                End If
                Me.Recordset.MoveNext
                If Me.Recordset.EOF Then
                    Me.Recordset.MovePrevious
                End If
            Else
                If IsNull(Me.Recordset.Fields(0)) Then
                    Me.Recordset.MoveNext
                    Me.Recordset.MovePrevious
                End If
            End If
        End If
        Call StateR
        Me.Caption = "出库"
    End Sub