home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic 4 Unleashed / Visual_Basic_4_Unleashed_SAMS_Publishing_1995.iso / source / chap35 / frmaccnt.frm (.txt) < prev    next >
Visual Basic Form  |  1995-09-10  |  14KB  |  377 lines

  1. VERSION 4.00
  2. Begin VB.Form frmAccounts 
  3.    Appearance      =   0  'Flat
  4.    BackColor       =   &H00C0C0C0&
  5.    Caption         =   "Customer Accounts"
  6.    ClientHeight    =   6255
  7.    ClientLeft      =   795
  8.    ClientTop       =   525
  9.    ClientWidth     =   9270
  10.    BeginProperty Font 
  11.       name            =   "MS Sans Serif"
  12.       charset         =   1
  13.       weight          =   700
  14.       size            =   8.25
  15.       underline       =   0   'False
  16.       italic          =   0   'False
  17.       strikethrough   =   0   'False
  18.    EndProperty
  19.    ForeColor       =   &H80000008&
  20.    Height          =   6660
  21.    Left            =   735
  22.    LinkTopic       =   "Form3"
  23.    ScaleHeight     =   6255
  24.    ScaleWidth      =   9270
  25.    Top             =   180
  26.    Width           =   9390
  27.    Begin VB.TextBox CustomerNumberField 
  28.       Height          =   375
  29.       Left            =   6360
  30.       TabIndex        =   5
  31.       Top             =   5320
  32.       Width           =   1095
  33.    End
  34.    Begin VB.CommandButton btnCloseBilling 
  35.       Caption         =   "&Close"
  36.       Height          =   495
  37.       Left            =   7680
  38.       TabIndex        =   3
  39.       Top             =   5280
  40.       Width           =   1455
  41.    End
  42.    Begin VB.Data ORDERS 
  43.       Appearance      =   0  'Flat
  44.       Caption         =   "ORDERS"
  45.       Connect         =   ""
  46.       DatabaseName    =   "C:\VBPROJ\SAMS\VB4DB.MDB"
  47.       Exclusive       =   0   'False
  48.       Height          =   270
  49.       Left            =   840
  50.       Options         =   0
  51.       ReadOnly        =   0   'False
  52.       RecordsetType   =   1  'Dynaset
  53.       RecordSource    =   "ORDERS"
  54.       Top             =   5880
  55.       Visible         =   0   'False
  56.       Width           =   2055
  57.    End
  58.    Begin VB.CommandButton Command2 
  59.       Appearance      =   0  'Flat
  60.       BackColor       =   &H80000005&
  61.       Caption         =   "Print &Statements"
  62.       Height          =   495
  63.       Left            =   2520
  64.       TabIndex        =   0
  65.       Top             =   5280
  66.       Width           =   1575
  67.    End
  68.    Begin VB.Data CUSTMAIN 
  69.       Appearance      =   0  'Flat
  70.       Caption         =   "CUSTMAIN"
  71.       Connect         =   ""
  72.       DatabaseName    =   "C:\VBPROJ\SAMS\VB4DB.MDB"
  73.       Exclusive       =   0   'False
  74.       Height          =   270
  75.       Left            =   3360
  76.       Options         =   0
  77.       ReadOnly        =   0   'False
  78.       RecordsetType   =   1  'Dynaset
  79.       RecordSource    =   "CUSTMAIN"
  80.       Top             =   5880
  81.       Visible         =   0   'False
  82.       Width           =   2655
  83.    End
  84.    Begin Crystal.CrystalReport rptBilling 
  85.       Left            =   120
  86.       Top             =   5640
  87.       _extentx        =   741
  88.       _extenty        =   741
  89.       _stockprops     =   0
  90.       reportfilename  =   ""
  91.       destination     =   0
  92.       windowleft      =   100
  93.       windowtop       =   100
  94.       windowwidth     =   490
  95.       windowheight    =   300
  96.       windowtitle     =   ""
  97.       windowborderstyle=   2
  98.       windowcontrolbox=   -1  'True
  99.       windowmaxbutton =   -1  'True
  100.       windowminbutton =   -1  'True
  101.       copiestoprinter =   1
  102.       printfilename   =   ""
  103.       printfiletype   =   0
  104.       selectionformula=   ""
  105.       groupselectionformula=   ""
  106.       connect         =   ""
  107.       username        =   ""
  108.       reportsource    =   0
  109.       boundreportheading=   ""
  110.       boundreportfooter=   0   'False
  111.    End
  112.    Begin MSDBGrid.DBGrid CustMainGrid 
  113.       Bindings        =   "FRMACCNT.frx":0000
  114.       Height          =   4935
  115.       Left            =   6960
  116.       OleObjectBlob   =   "FRMACCNT.frx":0011
  117.       TabIndex        =   4
  118.       Top             =   240
  119.       Width           =   2295
  120.    End
  121.    Begin MSDBGrid.DBGrid OrdersGrid 
  122.       Bindings        =   "FRMACCNT.frx":1C62
  123.       Height          =   4935
  124.       Left            =   120
  125.       OleObjectBlob   =   "FRMACCNT.frx":1C71
  126.       TabIndex        =   2
  127.       Top             =   240
  128.       Width           =   6735
  129.    End
  130.    Begin VB.Label Label1 
  131.       Alignment       =   1  'Right Justify
  132.       Appearance      =   0  'Flat
  133.       BackColor       =   &H00C0C0C0&
  134.       Caption         =   "Find Customer #: "
  135.       ForeColor       =   &H80000008&
  136.       Height          =   255
  137.       Left            =   4680
  138.       TabIndex        =   1
  139.       Top             =   5400
  140.       Width           =   1695
  141.    End
  142. Attribute VB_Name = "frmAccounts"
  143. Attribute VB_Creatable = False
  144. Attribute VB_Exposed = False
  145. Dim CurrentCustomerNumber As Double
  146. Private Sub btnCloseBilling_Click()
  147.     Unload frmAccounts
  148. End Sub
  149. Private Sub CalculateCurrentBalance(CustomerNumber As Double)
  150.     Dim RecSet As Snapshot
  151.     Dim buffer As String
  152.     Dim charge
  153.     Dim credit
  154.     buffer = "Select Sum(Charge),Sum(Credit) From Orders Where CustomerNum = " & Str(CustomerNumber) & ";"
  155.     Set RecSet = CustDB.CreateSnapshot(buffer)
  156.     If (IsNull(RecSet.Fields(0))) = True Then
  157.         charge = 0
  158.     Else
  159.         charge = RecSet.Fields(0)
  160.     End If
  161.     If (IsNull(RecSet.Fields(1))) = True Then
  162.         credit = 0
  163.     Else
  164.         credit = RecSet.Fields(1)
  165.     End If
  166.     CurrentBalance = charge - credit
  167. End Sub
  168. Private Sub Command2_Click()
  169.     Dim BillingTbl As Table
  170.     Dim RecSet As Snapshot
  171.     Dim print_statements
  172.     Set BillingTbl = CustDB.OpenTable("BILLING")
  173.     On Error GoTo billerr
  174.     ' Retrieve all records from CUSTMAIN where the current balance is greater
  175.     ' than 0.
  176.     Set RecSet = CustDB.CreateSnapshot("Select * From CUSTMAIN Where Current_Balance > 0.0;")
  177.     If Not RecSet.RecordCount > 0 Then
  178.         MsgBox ("All accounts are up to date.  There are no outstanding balances to print statements for.")
  179.         Exit Sub
  180.     End If
  181.     RecSet.MoveLast
  182.     print_statements = MsgBox("This will print ALL (up to " & RecSet.RecordCount & ") of the statements.  Proceed? ", vbYesNo, " Print Statements ")
  183.     If print_statements <> 6 Then 'Anything but YES will exit the subroutine
  184.         Exit Sub
  185.     End If
  186.     RecSet.MoveFirst
  187.     While (RecSet.EOF = False)
  188.         Screen.MousePointer = 11
  189.         ' Remove any records existing in BILLING
  190.         CustDB.Execute ("Delete * From BILLING")
  191.         BillingTbl.AddNew
  192.         BillingTbl.Fields("CustomerNumber") = RecSet.Fields("CustomerNum")
  193.       
  194.         BillingTbl.Fields("CompanyName") = RecSet.Fields("Company")
  195.         BillingTbl.Fields("LastName") = RecSet.Fields("Last_Name")
  196.         BillingTbl.Fields("FirstName") = RecSet.Fields("First_Name")
  197.         BillingTbl.Fields("Address") = RecSet.Fields("Address")
  198.         BillingTbl.Fields("City") = RecSet.Fields("City")
  199.         BillingTbl.Fields("State") = RecSet.Fields("State")
  200.         BillingTbl.Fields("Zip") = RecSet.Fields("Zip")
  201.         BillingTbl.Fields("Apt") = RecSet.Fields("Suite_Apt")
  202.         BillingTbl.Fields("POBox") = RecSet.Fields("PO_Box")
  203.         BillingTbl.Fields("StatementDate") = Date
  204.         BillingTbl.Update
  205.         rptBilling.ReportFileName = App_location + "statemnt.rpt"
  206.         rptBilling.Destination = 0    ' 1=Output to Printer, 0=Screen
  207.         rptBilling.Action = 1
  208.        RecSet.MoveNext
  209.        Screen.MousePointer = 0
  210.     Wend
  211.     Exit Sub
  212. billerr:
  213.     MsgBox (Err.Description)
  214. End Sub
  215. Private Sub btnCustMain_Click()
  216.     If orders.Recordset.RecordCount = 0 Then
  217.     MsgBox ("no records to insert into.")
  218.     Exit Sub
  219.     End If
  220.     OrdersGrid.Visible = False
  221.     orders.Refresh
  222.     DoEvents
  223.     orders.Recordset.MoveLast
  224.     DoEvents
  225.     OrdersGrid.Refresh
  226.     DoEvents
  227.     OrdersGrid.Visible = True
  228.     OrdersGrid.SetFocus
  229.     SendKeys "{Down}"
  230. End Sub
  231. Private Sub CustMainGrid_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
  232.     Dim OrdersTbl As Table
  233.     ' Synchronize the Orders grid with the CustMain grid
  234.     If orders.Recordset.RecordCount <> 0 Then
  235.         If custmain.Recordset.RecordCount = 0 Then
  236.             custmain.Refresh
  237.         End If
  238.         If (orders.Recordset.Fields("CustomerNum") <> custmain.Recordset.Fields("CustomerNum")) Then
  239.         ' Only synchronize if records exist in ORDERS for this customer
  240.             Set OrdersTbl = CustDB.OpenTable("Orders")
  241.             OrdersTbl.Index = "CustomerNum"
  242.             OrdersTbl.Seek "=", custmain.Recordset.Fields("CustomerNum")
  243.             If (OrdersTbl.NoMatch = False) Then
  244.                 buffer = "CustomerNum = " & custmain.Recordset.Fields("CustomerNum")
  245.                 orders.Recordset.FindFirst buffer
  246.             End If
  247.         End If
  248.     End If
  249. End Sub
  250. Private Sub CustomerNumberField_KeyPress(KeyAscii As Integer)
  251. ' While not a Windows standard, the client
  252. ' prefers to use the enter key to move from field to field.
  253. ' This subroutine should trap the keypress and
  254. ' and process all "ENTER" keys as "TAB"
  255.     If KeyAscii = 13 Then
  256.         SendKeys "{tab}"
  257.         KeyAscii = 0
  258.     End If
  259. End Sub
  260. Private Sub CustomerNumberField_LostFocus()
  261.     Dim buffer As String
  262.     If (IsNull(CustomerNumberField) = False And Len(CustomerNumberField) >= 1) Then
  263.         buffer = "CustomerNum = " & CustomerNumberField
  264.         custmain.Recordset.FindFirst buffer
  265.     End If
  266.     CustomerNumberField.Text = ""
  267. End Sub
  268. Private Sub Form_Activate()
  269.     Dim message
  270.     Dim retvalue
  271.     ' Reset to the default  pointer when returning to this form.
  272.     MousePointer = 0
  273.     orders.RecordSource = "Select * from ORDERS Order By CustomerNum, Date DESC;"
  274.     custmain.RecordSource = "Select * from CUSTMAIN order by CustomerNum;"
  275.     ' Late breaking customer request: I need to know the date before
  276.     ' I start making changes to my accounts.
  277.     message = "Today's date is " & Format$(Now, "mmmm dd, yyyy")
  278.     retvalue = MsgBox(message, MB_ICONINFORMATION, "")
  279.     custmain.Refresh
  280.     orders.Refresh
  281.     OrdersGrid.SetFocus
  282.     FirstTimeFocus = True
  283.     CurrentCustomerNumber = -1
  284. End Sub
  285. Private Sub Form_Load()
  286.     'Center the form
  287.     Left = (Screen.Width - Width) / 2
  288.     Top = (Screen.Height - Height) / 2
  289.     orders.DatabaseName = Database_name
  290.     custmain.DatabaseName = Database_name
  291. End Sub
  292. Private Sub OrdersGrid_AfterDelete()
  293.     Dim CustMainTbl As Table
  294.     Dim response As Integer
  295.     If (orders.Recordset.RecordCount = 0) Then
  296.         orders.Recordset.AddNew
  297.         orders.Recordset.Fields("CustomerNum") = Customer_number
  298.         OrdersGrid.SetFocus
  299.     End If
  300.     Set CustMainTbl = CustDB.OpenTable("CustMain")
  301.     CustMainTbl.Index = "PrimaryKey"
  302.     CustMainTbl.Seek "=", CurrentCustomerNumber
  303.     If (CustMainTbl.NoMatch = False) Then
  304.         CustMainTbl.Edit
  305.         CustMainTbl.Fields("Current_Balance") = CurrentBalance
  306.         CustMainTbl.Update
  307.     End If
  308.     CalculateCurrentBalance (Val(Customer_number))
  309.     orders.Recordset.MoveFirst
  310.     orders.Refresh
  311.     custmain.Refresh
  312.     CustMainGrid.Refresh
  313.     OrdersGrid.SetFocus
  314.     Exit Sub
  315. DeleteError:
  316.     response = MsgBox("Error Deleting record: " & Err.Description, vbExclamation, "Delete Record")
  317.     OrdersGrid.SetFocus
  318.     Exit Sub
  319. End Sub
  320. Private Sub OrdersGrid_BeforeDelete(Cancel As Integer)
  321.     Dim response As Integer
  322.     response = MsgBox("REALLY delete the current order?", 4, "Delete Record")
  323.     If (response = IDNO) Then
  324.         OrdersGrid.SetFocus
  325.         Exit Sub
  326.     End If
  327. End Sub
  328. Private Sub OrdersGrid_GotFocus()
  329.     Dim Tbl As Table
  330.     If (orders.Recordset.RecordCount = 0) Then
  331.         ' The following DoEvents is necessary.
  332.         DoEvents
  333.         orders.Recordset.AddNew
  334.         orders.Recordset.Fields("CustomerNum") = Customer_number
  335.     End If
  336.     ' If this is the first time the grid has the focus, populate the billing
  337.     ' fields from an existing record or enter a new record in CustBillAddr.
  338.     If (FirstTimeFocus = True) Then
  339.         Set Tbl = CustDB.OpenTable("CustBillAddr")
  340.         Tbl.Index = "PrimaryKey"
  341.         Tbl.Seek "=", Customer_number
  342.         If (Tbl.NoMatch = True) Then
  343.             Tbl.AddNew
  344.             Tbl.Fields("CustomerNum") = Customer_number
  345.             Tbl.Update
  346.         End If
  347.     End If
  348. End Sub
  349. Private Sub OrdersGrid_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
  350.     Dim buffer As String
  351.     Dim CustMainTbl As Table
  352.     ' This routine is called after the user has already moved to a different
  353.     ' row.  The value of 'CurrentCustomerNumber' still contains the customer
  354.     ' number of the previous record.
  355.     CalculateCurrentBalance (CurrentCustomerNumber)
  356.     ' Update the current balance in CUSTMAIN
  357.     Set CustMainTbl = CustDB.OpenTable("CustMain")
  358.     CustMainTbl.Index = "PrimaryKey"
  359.     CustMainTbl.Seek "=", CurrentCustomerNumber
  360.     If (CustMainTbl.NoMatch = False) Then
  361.         CustMainTbl.Edit
  362.         CustMainTbl.Fields("Current_Balance") = CurrentBalance
  363.         CustMainTbl.Update
  364.         custmain.Refresh
  365.     End If
  366.     ' Synchronize the CustMain grid with the Orders grid
  367.     If orders.Recordset.RecordCount <> 0 Then
  368.         If (IsNull(orders.Recordset.Fields("CustomerNum")) = False) Then
  369.             CurrentCustomerNumber = orders.Recordset.Fields("CustomerNum")
  370.             buffer = "CustomerNum = " & orders.Recordset.Fields("CustomerNum")
  371.             custmain.Recordset.FindFirst buffer
  372.             CustMainGrid.Refresh
  373.         End If
  374.     End If
  375.     NewRecord = False
  376. End Sub
  377.