AUTHORS.FRM
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:56k
源码类别:

Windows编程

开发平台:

Visual C++

  1. VERSION 2.00
  2. Begin Form fAuthors 
  3.    BackColor       =   &H00C0C0C0&
  4.    Caption         =   "Authors"
  5.    ForeColor       =   &H00C0C0C0&
  6.    Height          =   5655
  7.    Icon            =   AUTHORS.FRX:0000
  8.    Left            =   270
  9.    LinkTopic       =   "Form1"
  10.    MDIChild        =   -1  'True
  11.    ScaleHeight     =   4965
  12.    ScaleWidth      =   9135
  13.    Top             =   1695
  14.    Width           =   9255
  15.    Begin SSFrame frmTitles 
  16.       Caption         =   "Titles"
  17.       FontBold        =   0   'False
  18.       FontItalic      =   0   'False
  19.       FontName        =   "MS Sans Serif"
  20.       FontSize        =   8.25
  21.       FontStrikethru  =   0   'False
  22.       FontUnderline   =   0   'False
  23.       ForeColor       =   &H00000000&
  24.       Height          =   2535
  25.       Left            =   75
  26.       TabIndex        =   41
  27.       Top             =   2325
  28.       Visible         =   0   'False
  29.       Width           =   8970
  30.       Begin SSPanel panGrid 
  31.          AutoSize        =   3  'AutoSize Child To Panel
  32.          BackColor       =   &H00C0C0C0&
  33.          BevelInner      =   1  'Inset
  34.          BevelOuter      =   0  'None
  35.          BorderWidth     =   0
  36.          ForeColor       =   &H00000000&
  37.          Height          =   2055
  38.          Left            =   120
  39.          TabIndex        =   42
  40.          Top             =   330
  41.          Width           =   8730
  42.          Begin Grid grdTitles 
  43.             Cols            =   9
  44.             FixedCols       =   0
  45.             FontBold        =   0   'False
  46.             FontItalic      =   0   'False
  47.             FontName        =   "MS Sans Serif"
  48.             FontSize        =   8.25
  49.             FontStrikethru  =   0   'False
  50.             FontUnderline   =   0   'False
  51.             Height          =   2025
  52.             Left            =   15
  53.             Rows            =   10
  54.             TabIndex        =   43
  55.             Top             =   15
  56.             Width           =   8700
  57.          End
  58.       End
  59.    End
  60.    Begin SSRibbon cmdDown 
  61.       AutoSize        =   0  'None
  62.       BackColor       =   &H00C0C0C0&
  63.       BevelWidth      =   1
  64.       Height          =   420
  65.       Left            =   8670
  66.       PictureUp       =   AUTHORS.FRX:0302
  67.       Top             =   75
  68.       Width           =   420
  69.    End
  70.    Begin SSPanel Panel3D9 
  71.       AutoSize        =   3  'AutoSize Child To Panel
  72.       BackColor       =   &H00C0C0C0&
  73.       BevelInner      =   1  'Inset
  74.       BevelOuter      =   0  'None
  75.       BorderWidth     =   0
  76.       ForeColor       =   &H00000000&
  77.       Height          =   375
  78.       Left            =   75
  79.       TabIndex        =   38
  80.       Top             =   1530
  81.       Width           =   2625
  82.       Begin SSCommand cmdMoreRows 
  83.          BevelWidth      =   1
  84.          Caption         =   "&More rows"
  85.          Enabled         =   0   'False
  86.          FontBold        =   0   'False
  87.          FontItalic      =   0   'False
  88.          FontName        =   "MS Sans Serif"
  89.          FontSize        =   8.25
  90.          FontStrikethru  =   0   'False
  91.          FontUnderline   =   0   'False
  92.          ForeColor       =   &H00000000&
  93.          Height          =   345
  94.          Left            =   15
  95.          TabIndex        =   39
  96.          Top             =   15
  97.          Width           =   2595
  98.       End
  99.    End
  100.    Begin SSPanel Panel3D1 
  101.       Alignment       =   8  'Center - BOTTOM
  102.       BackColor       =   &H00C0C0C0&
  103.       BevelInner      =   1  'Inset
  104.       BevelOuter      =   0  'None
  105.       BorderWidth     =   0
  106.       ForeColor       =   &H00000000&
  107.       Height          =   2190
  108.       Left            =   2775
  109.       TabIndex        =   29
  110.       Top             =   75
  111.       Width           =   5850
  112.       Begin SSPanel panAuthors 
  113.          AutoSize        =   3  'AutoSize Child To Panel
  114.          BackColor       =   &H00C0C0C0&
  115.          BevelInner      =   1  'Inset
  116.          BevelOuter      =   0  'None
  117.          BorderWidth     =   0
  118.          ForeColor       =   &H00000000&
  119.          Height          =   315
  120.          Index           =   1
  121.          Left            =   105
  122.          TabIndex        =   37
  123.          Top             =   315
  124.          Width           =   1140
  125.          Begin TextBox txtAuthors 
  126.             FontBold        =   0   'False
  127.             FontItalic      =   0   'False
  128.             FontName        =   "MS Sans Serif"
  129.             FontSize        =   8.25
  130.             FontStrikethru  =   0   'False
  131.             FontUnderline   =   0   'False
  132.             Height          =   285
  133.             Index           =   1
  134.             Left            =   15
  135.             TabIndex        =   1
  136.             Top             =   15
  137.             Width           =   1110
  138.          End
  139.       End
  140.       Begin SSPanel Panel3D8 
  141.          AutoSize        =   3  'AutoSize Child To Panel
  142.          BackColor       =   &H00C0C0C0&
  143.          BevelInner      =   1  'Inset
  144.          BevelOuter      =   0  'None
  145.          BorderWidth     =   0
  146.          ForeColor       =   &H00000000&
  147.          Height          =   315
  148.          Left            =   3450
  149.          TabIndex        =   36
  150.          Top             =   1020
  151.          Width           =   1695
  152.          Begin TextBox txtAuthors 
  153.             FontBold        =   0   'False
  154.             FontItalic      =   0   'False
  155.             FontName        =   "MS Sans Serif"
  156.             FontSize        =   8.25
  157.             FontStrikethru  =   0   'False
  158.             FontUnderline   =   0   'False
  159.             Height          =   285
  160.             Index           =   6
  161.             Left            =   15
  162.             TabIndex        =   6
  163.             Top             =   15
  164.             Width           =   1665
  165.          End
  166.       End
  167.       Begin SSPanel Panel3D2 
  168.          AutoSize        =   3  'AutoSize Child To Panel
  169.          BackColor       =   &H00C0C0C0&
  170.          BevelInner      =   1  'Inset
  171.          BevelOuter      =   0  'None
  172.          BorderWidth     =   0
  173.          ForeColor       =   &H00000000&
  174.          Height          =   315
  175.          Left            =   5190
  176.          TabIndex        =   35
  177.          Top             =   1020
  178.          Width           =   570
  179.          Begin TextBox txtAuthors 
  180.             FontBold        =   0   'False
  181.             FontItalic      =   0   'False
  182.             FontName        =   "MS Sans Serif"
  183.             FontSize        =   8.25
  184.             FontStrikethru  =   0   'False
  185.             FontUnderline   =   0   'False
  186.             Height          =   285
  187.             Index           =   7
  188.             Left            =   15
  189.             TabIndex        =   7
  190.             Top             =   15
  191.             Width           =   540
  192.          End
  193.       End
  194.       Begin SSPanel Panel3D3 
  195.          AutoSize        =   3  'AutoSize Child To Panel
  196.          BackColor       =   &H00C0C0C0&
  197.          BevelInner      =   1  'Inset
  198.          BevelOuter      =   0  'None
  199.          BorderWidth     =   0
  200.          ForeColor       =   &H00000000&
  201.          Height          =   315
  202.          Left            =   2235
  203.          TabIndex        =   34
  204.          Top             =   1020
  205.          Width           =   1170
  206.          Begin TextBox txtAuthors 
  207.             FontBold        =   0   'False
  208.             FontItalic      =   0   'False
  209.             FontName        =   "MS Sans Serif"
  210.             FontSize        =   8.25
  211.             FontStrikethru  =   0   'False
  212.             FontUnderline   =   0   'False
  213.             Height          =   285
  214.             Index           =   5
  215.             Left            =   15
  216.             TabIndex        =   5
  217.             Top             =   15
  218.             Width           =   1140
  219.          End
  220.       End
  221.       Begin SSPanel Panel3D4 
  222.          AutoSize        =   3  'AutoSize Child To Panel
  223.          BackColor       =   &H00C0C0C0&
  224.          BevelInner      =   1  'Inset
  225.          BevelOuter      =   0  'None
  226.          BorderWidth     =   0
  227.          ForeColor       =   &H00000000&
  228.          Height          =   315
  229.          Left            =   90
  230.          TabIndex        =   33
  231.          Top             =   1020
  232.          Width           =   2100
  233.          Begin TextBox txtAuthors 
  234.             FontBold        =   0   'False
  235.             FontItalic      =   0   'False
  236.             FontName        =   "MS Sans Serif"
  237.             FontSize        =   8.25
  238.             FontStrikethru  =   0   'False
  239.             FontUnderline   =   0   'False
  240.             Height          =   285
  241.             Index           =   4
  242.             Left            =   15
  243.             TabIndex        =   4
  244.             Top             =   15
  245.             Width           =   2070
  246.          End
  247.       End
  248.       Begin SSPanel Panel3D5 
  249.          AutoSize        =   3  'AutoSize Child To Panel
  250.          BackColor       =   &H00C0C0C0&
  251.          BevelInner      =   1  'Inset
  252.          BevelOuter      =   0  'None
  253.          BorderWidth     =   0
  254.          ForeColor       =   &H00000000&
  255.          Height          =   315
  256.          Left            =   3180
  257.          TabIndex        =   32
  258.          Top             =   315
  259.          Width           =   2580
  260.          Begin TextBox txtAuthors 
  261.             FontBold        =   0   'False
  262.             FontItalic      =   0   'False
  263.             FontName        =   "MS Sans Serif"
  264.             FontSize        =   8.25
  265.             FontStrikethru  =   0   'False
  266.             FontUnderline   =   0   'False
  267.             Height          =   285
  268.             Index           =   3
  269.             Left            =   15
  270.             TabIndex        =   3
  271.             Top             =   15
  272.             Width           =   2550
  273.          End
  274.       End
  275.       Begin SSPanel Panel3D6 
  276.          AutoSize        =   3  'AutoSize Child To Panel
  277.          BackColor       =   &H00C0C0C0&
  278.          BevelInner      =   1  'Inset
  279.          BevelOuter      =   0  'None
  280.          BorderWidth     =   0
  281.          ForeColor       =   &H00000000&
  282.          Height          =   315
  283.          Left            =   1290
  284.          TabIndex        =   31
  285.          Top             =   315
  286.          Width           =   1845
  287.          Begin TextBox txtAuthors 
  288.             FontBold        =   0   'False
  289.             FontItalic      =   0   'False
  290.             FontName        =   "MS Sans Serif"
  291.             FontSize        =   8.25
  292.             FontStrikethru  =   0   'False
  293.             FontUnderline   =   0   'False
  294.             Height          =   285
  295.             Index           =   2
  296.             Left            =   15
  297.             TabIndex        =   2
  298.             Top             =   15
  299.             Width           =   1815
  300.          End
  301.       End
  302.       Begin SSPanel Panel3D7 
  303.          AutoSize        =   3  'AutoSize Child To Panel
  304.          BackColor       =   &H00C0C0C0&
  305.          BevelInner      =   1  'Inset
  306.          BevelOuter      =   0  'None
  307.          BorderWidth     =   0
  308.          ForeColor       =   &H00000000&
  309.          Height          =   315
  310.          Left            =   105
  311.          TabIndex        =   30
  312.          Top             =   1695
  313.          Width           =   1635
  314.          Begin TextBox txtAuthors 
  315.             FontBold        =   0   'False
  316.             FontItalic      =   0   'False
  317.             FontName        =   "MS Sans Serif"
  318.             FontSize        =   8.25
  319.             FontStrikethru  =   0   'False
  320.             FontUnderline   =   0   'False
  321.             Height          =   285
  322.             Index           =   8
  323.             Left            =   15
  324.             TabIndex        =   8
  325.             Top             =   15
  326.             Width           =   1605
  327.          End
  328.       End
  329.       Begin SSCheck chkContract 
  330.          Caption         =   "Contract"
  331.          FontBold        =   0   'False
  332.          FontItalic      =   0   'False
  333.          FontName        =   "MS Sans Serif"
  334.          FontSize        =   8.25
  335.          FontStrikethru  =   0   'False
  336.          FontUnderline   =   0   'False
  337.          ForeColor       =   &H00000000&
  338.          Height          =   240
  339.          Left            =   2235
  340.          TabIndex        =   9
  341.          Top             =   1725
  342.          Width           =   930
  343.       End
  344.       Begin Label lblAuthors 
  345.          BackColor       =   &H00C0C0C0&
  346.          Caption         =   "Id"
  347.          FontBold        =   0   'False
  348.          FontItalic      =   0   'False
  349.          FontName        =   "MS Sans Serif"
  350.          FontSize        =   8.25
  351.          FontStrikethru  =   0   'False
  352.          FontUnderline   =   0   'False
  353.          Height          =   195
  354.          Index           =   1
  355.          Left            =   120
  356.          TabIndex        =   10
  357.          Top             =   120
  358.          Width           =   150
  359.       End
  360.       Begin Label lblAuthors 
  361.          BackColor       =   &H00C0C0C0&
  362.          Caption         =   "First"
  363.          FontBold        =   0   'False
  364.          FontItalic      =   0   'False
  365.          FontName        =   "MS Sans Serif"
  366.          FontSize        =   8.25
  367.          FontStrikethru  =   0   'False
  368.          FontUnderline   =   0   'False
  369.          Height          =   195
  370.          Index           =   2
  371.          Left            =   1320
  372.          TabIndex        =   11
  373.          Top             =   120
  374.          Width           =   285
  375.       End
  376.       Begin Label lblAuthors 
  377.          BackColor       =   &H00C0C0C0&
  378.          Caption         =   "Last"
  379.          FontBold        =   0   'False
  380.          FontItalic      =   0   'False
  381.          FontName        =   "MS Sans Serif"
  382.          FontSize        =   8.25
  383.          FontStrikethru  =   0   'False
  384.          FontUnderline   =   0   'False
  385.          Height          =   195
  386.          Index           =   3
  387.          Left            =   3195
  388.          TabIndex        =   12
  389.          Top             =   120
  390.          Width           =   300
  391.       End
  392.       Begin Label lblAuthors 
  393.          BackColor       =   &H00C0C0C0&
  394.          Caption         =   "Address"
  395.          FontBold        =   0   'False
  396.          FontItalic      =   0   'False
  397.          FontName        =   "MS Sans Serif"
  398.          FontSize        =   8.25
  399.          FontStrikethru  =   0   'False
  400.          FontUnderline   =   0   'False
  401.          Height          =   195
  402.          Index           =   4
  403.          Left            =   120
  404.          TabIndex        =   13
  405.          Top             =   825
  406.          Width           =   570
  407.       End
  408.       Begin Label lblAuthors 
  409.          BackColor       =   &H00C0C0C0&
  410.          Caption         =   "Zip Code"
  411.          FontBold        =   0   'False
  412.          FontItalic      =   0   'False
  413.          FontName        =   "MS Sans Serif"
  414.          FontSize        =   8.25
  415.          FontStrikethru  =   0   'False
  416.          FontUnderline   =   0   'False
  417.          Height          =   195
  418.          Index           =   5
  419.          Left            =   2295
  420.          TabIndex        =   14
  421.          Top             =   825
  422.          Width           =   645
  423.       End
  424.       Begin Label lblAuthors 
  425.          BackColor       =   &H00C0C0C0&
  426.          Caption         =   "City"
  427.          FontBold        =   0   'False
  428.          FontItalic      =   0   'False
  429.          FontName        =   "MS Sans Serif"
  430.          FontSize        =   8.25
  431.          FontStrikethru  =   0   'False
  432.          FontUnderline   =   0   'False
  433.          Height          =   195
  434.          Index           =   6
  435.          Left            =   3480
  436.          TabIndex        =   15
  437.          Top             =   825
  438.          Width           =   270
  439.       End
  440.       Begin Label lblAuthors 
  441.          BackColor       =   &H00C0C0C0&
  442.          Caption         =   "State"
  443.          FontBold        =   0   'False
  444.          FontItalic      =   0   'False
  445.          FontName        =   "MS Sans Serif"
  446.          FontSize        =   8.25
  447.          FontStrikethru  =   0   'False
  448.          FontUnderline   =   0   'False
  449.          Height          =   195
  450.          Index           =   7
  451.          Left            =   5205
  452.          TabIndex        =   16
  453.          Top             =   825
  454.          Width           =   375
  455.       End
  456.       Begin Label lblAuthors 
  457.          BackColor       =   &H00C0C0C0&
  458.          Caption         =   "Phone"
  459.          FontBold        =   0   'False
  460.          FontItalic      =   0   'False
  461.          FontName        =   "MS Sans Serif"
  462.          FontSize        =   8.25
  463.          FontStrikethru  =   0   'False
  464.          FontUnderline   =   0   'False
  465.          Height          =   195
  466.          Index           =   8
  467.          Left            =   120
  468.          TabIndex        =   17
  469.          Top             =   1500
  470.          Width           =   465
  471.       End
  472.    End
  473.    Begin SSPanel panItemsRemoved 
  474.       Alignment       =   8  'Center - BOTTOM
  475.       BackColor       =   &H00C0C0C0&
  476.       BevelInner      =   1  'Inset
  477.       BevelOuter      =   0  'None
  478.       BorderWidth     =   0
  479.       FontBold        =   0   'False
  480.       FontItalic      =   0   'False
  481.       FontName        =   "MS Sans Serif"
  482.       FontSize        =   8.25
  483.       FontStrikethru  =   0   'False
  484.       FontUnderline   =   0   'False
  485.       ForeColor       =   &H00000000&
  486.       Height          =   300
  487.       Left            =   75
  488.       TabIndex        =   28
  489.       Top             =   75
  490.       Width           =   2625
  491.    End
  492.    Begin SSPanel panItemsRead 
  493.       Alignment       =   8  'Center - BOTTOM
  494.       BackColor       =   &H00C0C0C0&
  495.       BevelInner      =   1  'Inset
  496.       BevelOuter      =   0  'None
  497.       BorderWidth     =   0
  498.       FontBold        =   0   'False
  499.       FontItalic      =   0   'False
  500.       FontName        =   "MS Sans Serif"
  501.       FontSize        =   8.25
  502.       FontStrikethru  =   0   'False
  503.       FontUnderline   =   0   'False
  504.       ForeColor       =   &H00000000&
  505.       Height          =   300
  506.       Left            =   75
  507.       TabIndex        =   27
  508.       Top             =   1965
  509.       Width           =   2625
  510.    End
  511.    Begin SSPanel panAuthors 
  512.       AutoSize        =   3  'AutoSize Child To Panel
  513.       BackColor       =   &H00C0C0C0&
  514.       BevelInner      =   1  'Inset
  515.       BevelOuter      =   0  'None
  516.       BorderWidth     =   0
  517.       ForeColor       =   &H00000000&
  518.       Height          =   1035
  519.       Index           =   0
  520.       Left            =   75
  521.       TabIndex        =   26
  522.       Top             =   450
  523.       Width           =   2625
  524.       Begin ListBox lstPrim 
  525.          FontBold        =   0   'False
  526.          FontItalic      =   0   'False
  527.          FontName        =   "MS Sans Serif"
  528.          FontSize        =   8.25
  529.          FontStrikethru  =   0   'False
  530.          FontUnderline   =   0   'False
  531.          Height          =   1005
  532.          Left            =   15
  533.          TabIndex        =   0
  534.          Top             =   15
  535.          Width           =   2595
  536.       End
  537.    End
  538.    Begin Frame Frame1 
  539.       BackColor       =   &H00C0C0C0&
  540.       Caption         =   "Invisibles"
  541.       FontBold        =   0   'False
  542.       FontItalic      =   0   'False
  543.       FontName        =   "MS Sans Serif"
  544.       FontSize        =   8.25
  545.       FontStrikethru  =   0   'False
  546.       FontUnderline   =   0   'False
  547.       Height          =   825
  548.       Left            =   9300
  549.       TabIndex        =   18
  550.       Top             =   555
  551.       Visible         =   0   'False
  552.       Width           =   5700
  553.       Begin SSCommand cmdSubGridDetail 
  554.          Caption         =   "SubGridDetail"
  555.          Font3D          =   1  'Raised w/light shading
  556.          FontBold        =   0   'False
  557.          FontItalic      =   0   'False
  558.          FontName        =   "MS Sans Serif"
  559.          FontSize        =   8.25
  560.          FontStrikethru  =   0   'False
  561.          FontUnderline   =   0   'False
  562.          ForeColor       =   &H00000000&
  563.          Height          =   495
  564.          Left            =   3570
  565.          TabIndex        =   40
  566.          Top             =   240
  567.          Visible         =   0   'False
  568.          Width           =   1215
  569.       End
  570.       Begin SSCommand MainButton 
  571.          BevelWidth      =   1
  572.          Font3D          =   1  'Raised w/light shading
  573.          ForeColor       =   &H00000000&
  574.          Height          =   345
  575.          Index           =   7
  576.          Left            =   2850
  577.          Picture         =   AUTHORS.FRX:049C
  578.          TabIndex        =   25
  579.          Top             =   300
  580.          Width           =   345
  581.       End
  582.       Begin SSCommand MainButton 
  583.          BevelWidth      =   1
  584.          Font3D          =   1  'Raised w/light shading
  585.          ForeColor       =   &H00000000&
  586.          Height          =   345
  587.          Index           =   6
  588.          Left            =   2325
  589.          Picture         =   AUTHORS.FRX:0636
  590.          TabIndex        =   24
  591.          Top             =   300
  592.          Width           =   345
  593.       End
  594.       Begin SSCommand MainButton 
  595.          BevelWidth      =   1
  596.          Font3D          =   1  'Raised w/light shading
  597.          ForeColor       =   &H00000000&
  598.          Height          =   345
  599.          Index           =   5
  600.          Left            =   1935
  601.          Picture         =   AUTHORS.FRX:07A0
  602.          TabIndex        =   23
  603.          Top             =   300
  604.          Width           =   345
  605.       End
  606.       Begin SSCommand MainButton 
  607.          BevelWidth      =   1
  608.          Font3D          =   1  'Raised w/light shading
  609.          ForeColor       =   &H00000000&
  610.          Height          =   345
  611.          Index           =   4
  612.          Left            =   1410
  613.          Picture         =   AUTHORS.FRX:093A
  614.          TabIndex        =   22
  615.          Top             =   300
  616.          Width           =   345
  617.       End
  618.       Begin SSCommand MainButton 
  619.          BevelWidth      =   1
  620.          Font3D          =   1  'Raised w/light shading
  621.          ForeColor       =   &H00000000&
  622.          Height          =   345
  623.          Index           =   3
  624.          Left            =   885
  625.          Picture         =   AUTHORS.FRX:0AA4
  626.          TabIndex        =   21
  627.          Top             =   300
  628.          Width           =   345
  629.       End
  630.       Begin SSCommand MainButton 
  631.          BevelWidth      =   1
  632.          Enabled         =   0   'False
  633.          Font3D          =   1  'Raised w/light shading
  634.          ForeColor       =   &H00000000&
  635.          Height          =   345
  636.          Index           =   2
  637.          Left            =   495
  638.          Picture         =   AUTHORS.FRX:0C0E
  639.          TabIndex        =   20
  640.          Top             =   300
  641.          Width           =   345
  642.       End
  643.       Begin SSCommand MainButton 
  644.          BevelWidth      =   1
  645.          Font3D          =   1  'Raised w/light shading
  646.          ForeColor       =   &H00000000&
  647.          Height          =   345
  648.          Index           =   1
  649.          Left            =   105
  650.          Picture         =   AUTHORS.FRX:0D78
  651.          TabIndex        =   19
  652.          Top             =   300
  653.          Width           =   345
  654.       End
  655.    End
  656.    Begin Menu menFile 
  657.       Caption         =   "&File"
  658.       Begin Menu altClose 
  659.          Caption         =   "&Close Form"
  660.       End
  661.       Begin Menu altDummy1 
  662.          Caption         =   "-"
  663.       End
  664.       Begin Menu altExit 
  665.          Caption         =   "&Exit"
  666.       End
  667.    End
  668.    Begin Menu menEdit 
  669.       Caption         =   "&Edit"
  670.       Begin Menu altNew 
  671.          Caption         =   "&New"
  672.          Shortcut        =   ^N
  673.       End
  674.       Begin Menu altSave 
  675.          Caption         =   "&Save"
  676.          Shortcut        =   ^S
  677.       End
  678.       Begin Menu altDelete 
  679.          Caption         =   "&Delete"
  680.       End
  681.       Begin Menu altClear 
  682.          Caption         =   "Clear &Form"
  683.          Shortcut        =   ^C
  684.       End
  685.       Begin Menu altRefresh 
  686.          Caption         =   "&Refresh"
  687.          Shortcut        =   ^R
  688.       End
  689.       Begin Menu altQuery 
  690.          Caption         =   "&Query"
  691.          Shortcut        =   ^Q
  692.       End
  693.       Begin Menu altCancel 
  694.          Caption         =   "&Cancel"
  695.       End
  696.       Begin Menu altDummy2 
  697.          Caption         =   "-"
  698.       End
  699.       Begin Menu altCopy 
  700.          Caption         =   "Copy &to new"
  701.       End
  702.       Begin Menu altRelease 
  703.          Caption         =   "&Release"
  704.       End
  705.    End
  706.    Begin Menu menForms 
  707.       Caption         =   "Fo&rms"
  708.       Begin Menu altAuthors 
  709.          Caption         =   "&Authors"
  710.          Shortcut        =   ^A
  711.       End
  712.    End
  713.    Begin Menu menWindow 
  714.       Caption         =   "&Window"
  715.       WindowList      =   -1  'True
  716.       Begin Menu altCascade 
  717.          Caption         =   "&Cascade"
  718.       End
  719.       Begin Menu altTile 
  720.          Caption         =   "&Tile"
  721.       End
  722.       Begin Menu altArrangeIcons 
  723.          Caption         =   "&Arrange Icons"
  724.       End
  725.       Begin Menu altDummy4 
  726.          Caption         =   "-"
  727.       End
  728.       Begin Menu altNormalSize 
  729.          Caption         =   "&Normal Size"
  730.       End
  731.    End
  732.    Begin Menu menSettings 
  733.       Caption         =   "&Options"
  734.       Begin Menu altShowSQL 
  735.          Caption         =   "&Show SQL"
  736.       End
  737.    End
  738.    Begin Menu menHelp 
  739.       Caption         =   "&Help"
  740.       Begin Menu altContents 
  741.          Caption         =   "&Contents"
  742.       End
  743.       Begin Menu altDummy3 
  744.          Caption         =   "-"
  745.       End
  746.       Begin Menu altAbout 
  747.          Caption         =   "&About..."
  748.       End
  749.    End
  750. End
  751. '
  752. ' The AUTHORS form
  753. ' =================
  754. ' Used for maintenance of information on authors
  755. ' including selecting, inserting, updating and deleting
  756. ' authors
  757. '
  758. ' Constant definitions:
  759. ' --------------------
  760. ' The nominal Width and Height of the form are saved
  761. ' as constants to allow the form to be properly opened
  762. ' as a MDI Child and to regain its normal size when
  763. ' that option is chosen in the menu system (Window -
  764. ' Normal Size):
  765. Const DEFWIDTH% = 9255
  766. Const DEFMINHEIGHT% = 3060 - 280
  767. Const DEFMAXHEIGHT% = 5650 - 280
  768. ' The value of the constant CHUNKSIZE% determins the number of
  769. ' rows that will be read from the result set
  770. ' per chunk and added to the listbox.
  771. ' The value of the constant LSTPRIMMAX% is the max number of
  772. ' rows that will be held in the listbox lstPrim. When the
  773. ' number has been exeeded the application will start to remove
  774. ' the top row for each new row added to the listbox.
  775. '
  776. ' NOTE! Both of these constants are indeed changeble to match
  777. ' your specific needs and thoughts.
  778. Const CHUNKSIZE% = 100
  779. Const LSTPRIMMAX% = 500
  780.     
  781. ' The list box shows authors names. To help locate an
  782. ' author whose name is selected in the list box his or
  783. ' her AU_ID is also stored in the list box invisible
  784. ' to the user. The LISTWIDTH constant is used to determine
  785. ' exactly where in the list box text string the AU_ID is
  786. ' stored. It begins on the position of LISTWIDTH + 1 (71):
  787. Const LISTWIDTH% = 70
  788. ' Declare variables for a select channel and an update
  789. ' channel to SQL Server, known all over but not outside
  790. ' the form:
  791. Dim SelChannel As Integer
  792. Dim UpdChannel As Integer
  793. ' Declare a variable to store the last used Where clause.
  794. ' This allows a refresh operation, sending the same SQL
  795. ' select clause once again to the server using the refresh
  796. ' tool (shower) in the tool bar:
  797. Dim LastWhereClause As String
  798. ' Declare a MODE variable to store the different modes
  799. ' of the form. Mode could take up either of the following
  800. ' values: SQLNEW, SQLSHOW or SQLREST. Those values are
  801. ' declared as symbolic constants in the module ADBGLOB.BAS.
  802. ' SQLNEW is the mode when a new author is being entered.
  803. ' SQLSHOW is the mode when an existing author is shown
  804. ' in the form for possible modification or deletion.
  805. ' SQLREST is the mode when the form is resting, i.e. when
  806. ' a selection is being made or when the form is waiting for
  807. ' examples to use for QBE.
  808. Dim Mode As Integer
  809. ' The variable QualString save the qualification string
  810. ' returned from the call to SQLQUAL(). It containts references
  811. ' to the unique key and to the timestamp column.
  812. ' This is essential for Browse Mode.
  813. Dim QualString As String
  814. ' The variable FormMaxOpen is TRUE if the subgrid is showned.
  815. ' The user brings it up by clicking on the push button for
  816. ' titles. To close the subgrid just click on the push button
  817. ' again and FormMaxOpen will be set to FALSE.
  818. Dim FormMaxOpen As Integer
  819. Sub altAbout_Click ()
  820. '
  821. ' Show the about box
  822. '
  823.     fAbout.Show MODAL
  824. End Sub
  825. Sub altArrangeIcons_Click ()
  826. '
  827. ' Arrange the icons of the MDI application
  828. '
  829.     MDIMA.Arrange ARRANGE_ICONS
  830. End Sub
  831. Sub altAuthors_click ()
  832. '
  833. ' Show another instance of the authors form
  834. ' Try opening several instances showing different
  835. ' sets of authors in each separate form, for instance
  836. ' Utah authors in one form and Michigan authors in
  837. ' another. Tile the forms for better overview.
  838. '
  839. ' Declare a new instance of the Authors form:
  840. Dim newAuthors As New fAuthors
  841.     ' Open the new instance:
  842.     screen.MousePointer = 11
  843.     newAuthors.Show
  844.     screen.MousePointer = 0
  845. End Sub
  846. Sub altCancel_Click ()
  847. '
  848. ' Cancels the ongoing operation; for instance modification
  849. ' of data about an author. If there is any operation
  850. ' to cancel, the cancel push button (with the X, like
  851. ' in Excel) will be enabled and then automatically pushed.
  852. ' If it is not enable there will be a beep:
  853.     If MainButton(7).Enabled Then
  854.         MainButton(7).Value = True
  855.     Else
  856.         Beep
  857.     End If
  858. End Sub
  859. Sub altCascade_Click ()
  860. '
  861. ' Cascade the icons of the MDI application
  862. '
  863.     MDIMA.Arrange CASCADE
  864. End Sub
  865. Sub altClear_Click ()
  866. '
  867. ' Clears the content of the form by automatically
  868. ' pressing the Clear button in the main tool bar:
  869.     If MainButton(4).Enabled Then
  870.         MainButton(4).Value = True
  871.     Else
  872.         Beep
  873.     End If
  874. End Sub
  875. Sub altClose_Click ()
  876. '
  877. ' Closes the form by unloading it, thus securing
  878. ' that any unload procedure will be carried out:
  879.     Unload Me
  880. End Sub
  881. Sub altContents_Click ()
  882. Dim x%, lHelpPath As String
  883. '
  884. ' Activate the help system
  885. '
  886.     
  887.     lHelpPath = App.Path + "pubs1.hlp"
  888.     x% = WinHelp(MDIMA.hWnd, lHelpPath, HELP_INDEX, 0)
  889. End Sub
  890. Sub altCopy_Click ()
  891. '
  892. ' Sets the mode to SQLNEW, thus allowing the record
  893. ' in the form to be modified and then inserted, then
  894. ' sets focus to the first text field in the form. This
  895. ' function can save some typing:
  896.     Mode = SQLNEW
  897.     txtAuthors(1).SetFocus
  898. End Sub
  899. Sub altDelete_Click ()
  900. '
  901. ' Starts a delete procedure by pressing the delete
  902. ' button in the main tool bar. If it is enabled, the
  903. ' process controlled by the button will be started,
  904. ' otherwise there will be a beep, telling that there
  905. ' is nothing to delete at present:
  906.     If MainButton(3).Enabled Then
  907.         MainButton(3).Value = True
  908.     Else
  909.         Beep
  910.     End If
  911. End Sub
  912. Sub altExit_Click ()
  913. '
  914. ' Exit the entire application by unloading the MDI
  915. ' form. The result will be that any opened MDI child
  916. ' window will be unloaded, their respective unload
  917. ' procedures automatically carried out:
  918.     Unload MDIMA
  919. End Sub
  920. Sub altNew_Click ()
  921. '
  922. ' Start the NEW procedure to enter and insert information
  923. ' about a new author. If the corresponding button in the
  924. ' main tool bar is enabled, it is pushed, otherwise a new
  925. ' author could not be entered at this state of the form,
  926. ' and a beep is heard:
  927.     If MainButton(1).Enabled Then
  928.         MainButton(1).Value = True
  929.     Else
  930.         Beep
  931.     End If
  932. End Sub
  933. Sub altNormalSize_Click ()
  934. '
  935. ' Reinstate the normal size of the form, if changed
  936. '
  937.     If Me.WindowState <> 0 Then Me.WindowState = 0  ' normal size
  938.     Me.Width = DEFWIDTH%
  939.     If FormMaxOpen Then
  940.         Me.Height = DEFMAXHEIGHT%
  941.     Else
  942.         Me.Height = DEFMINHEIGHT%
  943.     End If
  944.     CenterForm
  945. End Sub
  946. Sub altQuery_Click ()
  947. '
  948. ' Send a query to SQL Server by pushing the corresponding
  949. ' push button in the tool bar, if it is enabled. If not,
  950. ' there is no query to send and a beep is heard:
  951.     If MainButton(6).Enabled Then
  952.         MainButton(6).Value = True
  953.     Else
  954.         Beep
  955.     End If
  956.     
  957. End Sub
  958. Sub altRefresh_Click ()
  959. '
  960. ' Send the same query as was last sent to SQL Server,
  961. ' thereby refreshing the result set to include any
  962. ' changes made by other users since the data was last
  963. ' selected:
  964. ' Pushes the corresponding button in the main tool bar
  965. ' if it is enabled. If not, a beep is heard, signalling
  966. ' that refresh is an inappropriate operation at this time:
  967.     If MainButton(5).Enabled Then
  968.         MainButton(5).Value = True
  969.     Else
  970.         Beep
  971.     End If
  972. End Sub
  973. Sub altRelease_Click ()
  974. '
  975. ' Releases the record in the form from its connection
  976. ' with the database, allowing the user to make changes
  977. ' and then use the result as an example for a query.
  978. '
  979. ' Sets the MODE variable to SQLREST, indicating that the
  980. ' form is "resting" (will not allow saving the info)
  981.     Mode = SQLREST
  982. End Sub
  983. Sub altSave_Click ()
  984. '
  985. ' Saves the content of the form to SQL Server by issuing
  986. ' an UPDATE or INSERT statement. Uses the corresponding
  987. ' push button in the main tool bar if it is enabled.
  988. ' Otherwise a beep is heard, indicating that there is
  989. ' nothing to save right now:
  990.     If MainButton(2).Enabled Then
  991.         MainButton(2).Value = True
  992.     Else
  993.         Beep
  994.     End If
  995. End Sub
  996. Sub altShowSQL_Click ()
  997. '
  998. ' Controls wether SQL statements are shown in a message
  999. ' box or not. When this menu option is checked, all
  1000. ' SQL statements are shown before sent to the server:
  1001.     If altShowSQL.Checked Then
  1002.         altShowSQL.Checked = False
  1003.         ShowSQL = False
  1004.     Else
  1005.         altShowSQL.Checked = True
  1006.         ShowSQL = True
  1007.     End If
  1008. End Sub
  1009. Sub AltTile_Click ()
  1010. '
  1011. ' Tile the icons of the MDI application
  1012. '
  1013.     MDIMA.Arrange TILE_HORIZONTAL
  1014. End Sub
  1015. Sub CenterForm ()
  1016.     Me.Top = screen.Height / 2 - Me.Height / 2 - 710
  1017. End Sub
  1018. Sub chkContract_Click (Value As Integer)
  1019. '
  1020. ' If the form is not resting (MODE <> SQLREST), the
  1021. ' SAVE and CANCEL buttons are enabled, indicating that
  1022. ' some information that should be saved has been entered:
  1023.     If Mode <> SQLREST Then
  1024.         MainButton(2).Enabled = True        ' save button
  1025.         MainButton(7).Enabled = True        ' cancel button
  1026.     End If
  1027. End Sub
  1028. Sub ClearFields ()
  1029. '
  1030. ' Clear the contents of any field in the form
  1031. '
  1032. Dim x As Integer, lMODE As Integer
  1033.     lMODE = Mode        ' Save actual Mode value
  1034.     Mode = SQLREST      ' Set Mode to resting
  1035.     For x = 1 To 8
  1036.         txtAuthors(x).Text = ""
  1037.     Next
  1038.     chkContract.Value = False
  1039.     Mode = lMODE        ' Reset initial mode
  1040. End Sub
  1041. Sub ClearForm ()
  1042. Dim lMODE As Integer
  1043.     lMODE = Mode        ' Save actual mode
  1044.     Mode = SQLREST      ' Set mode to resting
  1045.     lstPrim.Clear       ' Clear primary list box
  1046.     ClearFields         ' Clear all fields
  1047.     If FormMaxOpen Then ClearGrid grdTitles ' clear the grid
  1048.     panItemsRead.Caption = ""
  1049.     panItemsRemoved.Caption = ""
  1050.     Mode = lMODE        ' Reset initial mode
  1051.     SetMainButtons Mode ' Enable/Disable buttons in toolbar
  1052.     txtAuthors(1).SetFocus
  1053. End Sub
  1054. Sub ClearGrid (pGrid As Control)
  1055. '
  1056. ' Clear the grid
  1057. '
  1058. Dim x As Integer, y As Integer
  1059.     For x = 1 To pGrid.Rows - 1
  1060.         pGrid.Row = x
  1061.         For y = 0 To pGrid.Cols - 1
  1062.             pGrid.Col = y
  1063.             pGrid.Text = ""
  1064.         Next
  1065.     Next
  1066. End Sub
  1067. Sub cmdDown_Click (Value As Integer)
  1068. '
  1069. ' Shows the sub grid with titles for an author
  1070. '
  1071.     If cmdDown.Value = False Then
  1072.         SubGridClose
  1073.         Exit Sub
  1074.     End If
  1075.     If Me.WindowState <> 2 Then
  1076.         Me.Height = DEFMAXHEIGHT%
  1077.         CenterForm
  1078.     End If
  1079.     FormMaxOpen = True
  1080.     frmTitles.Visible = True
  1081.     If Len(RTrim$(txtAuthors(1).Text)) > 0 Then
  1082.         cmdSubGridDetail.Value = True
  1083.     Else
  1084.         HighlightGridRow grdTitles, 1
  1085.     End If
  1086.     
  1087. End Sub
  1088. Sub cmdMoreRows_Click ()
  1089. '
  1090. ' This button is enabled whenever the result set
  1091. ' contains rows that has not yet been read and
  1092. ' transferred to the lstPrim listbox. When the
  1093. ' user presses this button another chunk of
  1094. ' CHUNKSIZE% rows are read. When all the rows of
  1095. ' the result set has been read (NO_MORE_ROWS) this
  1096. ' button is disabled.
  1097.     SQLGetRows
  1098. End Sub
  1099. Sub cmdSubGridDetail_Click ()
  1100. '
  1101. ' Sending a SQL statement and filling the sub grid
  1102. ' with titles for a specific author
  1103. '
  1104. Dim lCmd$, lId$, res%
  1105.     lId$ = txtAuthors(1).Text
  1106.     lCmd$ = "select t.title_id, title, type, price, "
  1107.     lCmd$ = lCmd$ + "advance, royalty, ytd_sales, "
  1108.     lCmd$ = lCmd$ + "notes, pubdate "
  1109.     lCmd$ = lCmd$ + "from titles t, titleauthor ta "
  1110.     lCmd$ = lCmd$ + "where t.title_id = ta.title_id "
  1111.     lCmd$ = lCmd$ + "and ta.au_id = " + Chr$(34) + lId$ + Chr$(34)
  1112.     ClearGrid grdTitles
  1113.     res% = SQLComm(UpdChannel%, lCmd$)
  1114.     If res% = SUCCEED Then SQLFillGrid grdTitles, UpdChannel%
  1115.     HighlightGridRow grdTitles, 1
  1116. End Sub
  1117. Function EvaluateForm ()
  1118. '
  1119. ' Evaluate each field in the form and create a where clause
  1120. ' for the Select statement
  1121. '
  1122. Dim lRetStr$, x As Integer
  1123.     ' Initialize return string.
  1124.     ' (Not neccessary but neater.)
  1125.     lRetStr$ = ""
  1126.     For x = 1 To 8      ' Loop through each text box in form
  1127.         If Len(RTrim$(txtAuthors(x).Text)) > 0 Then
  1128.             If Len(Trim$(lRetStr$)) Then lRetStr$ = lRetStr$ + " and "
  1129.             Select Case x
  1130.                 ' Build condition for each field:
  1131.                 Case 1
  1132.                     lRetStr$ = lRetStr$ + "au_id like " + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34)
  1133.                 Case 2
  1134.                     lRetStr$ = lRetStr$ + "au_fname like " + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34)
  1135.                 Case 3
  1136.                     lRetStr$ = lRetStr$ + "au_lname like " + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34)
  1137.                 Case 4
  1138.                     lRetStr$ = lRetStr$ + "address like " + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34)
  1139.                 Case 5
  1140.                     lRetStr$ = lRetStr$ + "zip like " + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34)
  1141.                 Case 6
  1142.                     lRetStr$ = lRetStr$ + "city like " + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34)
  1143.                 Case 7
  1144.                     lRetStr$ = lRetStr$ + "state like " + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34)
  1145.                 Case 8
  1146.                     lRetStr$ = lRetStr$ + "phone like " + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34)
  1147.             End Select
  1148.         End If
  1149.     Next
  1150.     ' Check check box content, build upon the where clause:
  1151.     If chkContract.Value = True Then        ' checked
  1152.         If Len(Trim$(lRetStr$)) Then lRetStr$ = lRetStr$ + " and "
  1153.         lRetStr$ = lRetStr$ + "contract = 1"
  1154.     End If
  1155.     LastWhereClause = lRetStr$      ' Save as last used clause
  1156.     EvaluateForm = lRetStr$         ' Return where clause
  1157. End Function
  1158. Sub Form_Activate ()
  1159.     If ShowSQL Then
  1160.         altShowSQL.Checked = True
  1161.     Else
  1162.         altShowSQL.Checked = False
  1163.     End If
  1164.     
  1165. End Sub
  1166. Sub Form_Load ()
  1167. '
  1168. ' Set up the form at load time
  1169. '
  1170. Dim res%, lMsg$
  1171.     ' Set The Width and Height properties of the form
  1172.     ' to their predefined values. Setting the Top and
  1173.     ' Left properties to center the form within the
  1174.     ' MDI form:
  1175.     Me.Width = DEFWIDTH%
  1176.     Me.Height = DEFMINHEIGHT%
  1177.     CenterForm
  1178.     Me.Left = screen.Width / 2 - Me.Width / 2
  1179.     
  1180.     ' Opening two connections to SQL Server, one for selecting
  1181.     ' sets of authors, another for updating purposes.
  1182.     ' Putting the pubs database (Database$) in use:
  1183.     SelChannel = Logon%(Server$, LoginId$, Password$, WorkSta$, AppName$)
  1184.     UpdChannel = Logon%(Server$, LoginId$, Password$, WorkSta$, AppName$)
  1185.     res% = SqlUse(SelChannel, Database$)
  1186.     res% = SqlUse(UpdChannel, Database$)
  1187.     
  1188.     ' Check the status of the TIMESTAMP column in the Authors table
  1189.     res% = CheckifTimestamp(SelChannel)
  1190.     If res% = False Then
  1191.         res% = AskifAlter()
  1192.         If res% Then
  1193.             res% = AlterAuthors(SelChannel)
  1194.             Beep
  1195.             If res% Then
  1196.                 lMsg$ = "The Authors table has been successfully altered with a TIMESTAMP column."
  1197.                 MsgBox lMsg$, 64
  1198.             Else
  1199.                 lMsg$ = "There was some problem altering and updating the Authors table." + NEWLINE$ + NEWLINE$
  1200.                 lMsg$ = lMsg$ + "The sample application will terminate."
  1201.                 MsgBox lMsg$, 48
  1202.                 Unload MDIMA
  1203.             End If
  1204.         Else
  1205.             Beep
  1206.             MsgBox "Sorry, the sample application will terminate.", 48
  1207.             Unload MDIMA            ' this will terminate the application
  1208.         End If
  1209.     End If
  1210.     
  1211.     ' Specify the sub grid for titles
  1212.     SpecifyGrid
  1213. End Sub
  1214. Sub Form_Unload (Cancel As Integer)
  1215.     SqlClose SelChannel
  1216.     SqlClose UpdChannel
  1217. End Sub
  1218. Sub grdTitles_Click ()
  1219.     HighlightGridRow grdTitles, (grdTitles.Row)
  1220. End Sub
  1221. Sub HandleEmptyQual ()
  1222. Dim lMsg$
  1223.     Beep
  1224.     lMsg$ = EmptyQualString()
  1225.     MsgBox lMsg$, 16, "Empty qual string"
  1226.     RefreshFormFields
  1227. End Sub
  1228. Sub HighlightGridRow (pGrid As Control, pRowNmbr As Integer)
  1229. '
  1230. ' Highlights the selected row in the grid
  1231. '
  1232.     If pRowNmbr = 0 Then pRowNmbr = 1       ' to avoide VB error
  1233.     pGrid.Row = pRowNmbr
  1234.     pGrid.SelStartRow = pRowNmbr
  1235.     pGrid.SelEndRow = pRowNmbr
  1236.     pGrid.Col = pGrid.Cols - 1
  1237.     pGrid.SelStartCol = 0
  1238.     pGrid.SelEndCol = pGrid.Cols - 1
  1239. End Sub
  1240. Sub lstPrim_Click ()
  1241. '
  1242. ' If there are any items in the primary list box when
  1243. ' a click event occurs, then SQLGetDetailRow is called
  1244. ' to get all information on the selected author and put
  1245. ' it in the form fields. MODE is set to SQLREST in order
  1246. ' to prevent some change actions on the different fields.
  1247. ' After the author is shown, MODE is set to SQLSHOW,
  1248. ' indicating that the form is active (an author in it)
  1249.     If lstPrim.ListIndex <> -1 Then
  1250.         Mode = SQLREST
  1251.         SQLGetDetailRow
  1252.         Mode = SQLSHOW
  1253.     End If
  1254.     
  1255. End Sub
  1256. Sub MainButton_Click (index As Integer)
  1257. Dim x As Integer
  1258. '
  1259. ' MainButton is a control array of push buttons.
  1260. ' They may be clicked by the user directly or by
  1261. ' menu choices where the users select a menu item
  1262. ' and the menu item pushes a button by setting its
  1263. ' Value property True.
  1264.     Select Case index
  1265.         Case 1              ' new
  1266.             ' Click button 4 to clear the fields:
  1267.             MainButton(4).Value = True
  1268.             ' Enable the cancel button:
  1269.             MainButton(7).Enabled = True
  1270.             ' Set MODE to SQLNEW to allow saving:
  1271.             Mode = SQLNEW
  1272.         Case 2              ' save
  1273.             ' Call the SAVE routine, who knows how
  1274.             ' to do inserts and updates:
  1275.             SQLSave
  1276.         Case 3              ' delete
  1277.             ' Call the SQLDelete routine:
  1278.             SQLDelete
  1279.         Case 4              ' clear form
  1280.             ClearForm
  1281.         Case 5              ' refresh
  1282.             ' Send the same Select statement as last was sent:
  1283.             SQLQuery "REFRESH"
  1284.         Case 6              ' query
  1285.             ' Send a Select statement based on examples given
  1286.             ' by filling in parts of the form:
  1287.             SQLQuery ""
  1288.         Case 7              ' cancel
  1289.             ' Reset to same as before any changes were made:
  1290.             If Mode = SQLSHOW Then
  1291.                 Mode = SQLREST
  1292.                 x = lstPrim.ListIndex
  1293.                 lstPrim.ListIndex = -1
  1294.                 lstPrim.ListIndex = x
  1295.                 Mode = SQLSHOW
  1296.             Else
  1297.                 ClearForm
  1298.                 Mode = SQLREST
  1299.             End If
  1300.     End Select
  1301. End Sub
  1302. Sub RefreshFormFields ()
  1303. Dim x As Integer
  1304.     x = lstPrim.ListIndex
  1305.     lstPrim.ListIndex = -1
  1306.     lstPrim.ListIndex = x
  1307. End Sub
  1308. Function RowToListbox ()
  1309. '
  1310. ' Building a string to be added to the listbox:
  1311. Dim lBoxString As String
  1312.     ' Last and First Name:
  1313.     lBoxString = RTrim$(SQLData(SelChannel, 1)) + ", " + SQLData(SelChannel, 2)
  1314.     ' Id:
  1315.     lBoxString = Left$(lBoxString + Space$(LISTWIDTH%), LISTWIDTH%) + SQLData(SelChannel, 3)
  1316.     RowToListbox = lBoxString
  1317. End Function
  1318. Sub SetMainButtons (pMode As Integer)
  1319. '
  1320. ' Enable/Disable buttons in tool bar based on
  1321. ' actual Mode:
  1322.     MainButton(1).Enabled = True
  1323.     MainButton(2).Enabled = False
  1324.     MainButton(4).Enabled = True
  1325.     MainButton(7).Enabled = False
  1326.     If pMode = SQLSHOW Then
  1327.         MainButton(3).Enabled = True
  1328.     Else
  1329.         MainButton(3).Enabled = False
  1330.     End If
  1331. End Sub
  1332. Sub SetNmbrofRowsPanels (pNmbrRows, pRemoved)
  1333. '
  1334. ' Sets the right information for how many
  1335. ' rows that have been read from the result
  1336. ' set, and how many rows that have been
  1337. ' removed from the listbox:
  1338.     If Len(panItemsRead.Caption) > 0 Then
  1339.         pNmbrRows = pNmbrRows + Val(panItemsRead.Caption)
  1340.     End If
  1341.     If Len(panItemsRemoved.Caption) > 0 Then
  1342.         pRemoved = Val(panItemsRemoved.Caption) + pRemoved
  1343.     End If
  1344.     panItemsRead.Caption = Str$(pNmbrRows) + " rows read"
  1345.     If pRemoved > 0 Then
  1346.         panItemsRemoved.Caption = Str$(pRemoved) + " rows removed"
  1347.     Else
  1348.         panItemsRemoved.Caption = ""
  1349.     End If
  1350. End Sub
  1351. Sub SpecifyGrid ()
  1352. '
  1353. ' Specify the sub grid for titles
  1354. '
  1355.     grdTitles.Rows = 10
  1356.     grdTitles.Cols = 9
  1357.     grdTitles.Row = 0
  1358.     grdTitles.Col = 0
  1359.     grdTitles.Text = "Title id"
  1360.     grdTitles.ColWidth(0) = 750
  1361.     grdTitles.Col = 1
  1362.     grdTitles.Text = "Title"
  1363.     grdTitles.ColWidth(1) = 3500
  1364.     grdTitles.Col = 2
  1365.     grdTitles.Text = "Type"
  1366.     grdTitles.ColWidth(2) = 855
  1367.     grdTitles.Col = 3
  1368.     grdTitles.Text = "Price"
  1369.     grdTitles.ColWidth(3) = 645
  1370.     grdTitles.Col = 4
  1371.     grdTitles.Text = "Advance"
  1372.     grdTitles.ColWidth(4) = 960
  1373.     grdTitles.Col = 5
  1374.     grdTitles.Text = "Royalty"
  1375.     grdTitles.ColWidth(5) = 645
  1376.     grdTitles.Col = 6
  1377.     grdTitles.Text = "YTD sales"
  1378.     grdTitles.ColWidth(6) = 840
  1379.     grdTitles.Col = 7
  1380.     grdTitles.Text = "Notes"
  1381.     grdTitles.ColWidth(7) = 4050
  1382.     grdTitles.Col = 8
  1383.     grdTitles.Text = "Pub. date"
  1384.     grdTitles.ColWidth(8) = 1050
  1385.     
  1386. End Sub
  1387. Sub SQLDelete ()
  1388. '
  1389. ' Create an appropriate delete statement, based on the actual
  1390. ' record shown in the form. Ask the user to confirm the delete.
  1391. ' If all is well: Send the delete statement:
  1392. Dim lCmd$, x As Integer, res%
  1393.     If Len(RTrim$(txtAuthors(1).Text)) = 0 Or Mode <> SQLSHOW Then
  1394.         Beep
  1395.         Exit Sub            ' Nothing to delete
  1396.     End If
  1397.     If Len(RTrim$(txtAuthors(1).Text)) > 0 Then
  1398.         lCmd$ = "Delete authors " + QualString
  1399.         ' Check if the variable QualString is blank - if so we can
  1400.         ' not allow any deletions
  1401.         If Len(RTrim$(QualString)) = 0 Then
  1402.             HandleEmptyQual
  1403.             screen.MousePointer = 0
  1404.             Exit Sub
  1405.         End If
  1406.         
  1407.         If MsgBox("Do you really want to delete this row?", 36, "Delete") = 6 Then
  1408.             ' Use the SQLComm function to perform the delete:
  1409.             screen.MousePointer = 11
  1410.             res% = SQLComm%(UpdChannel, lCmd$)
  1411.             If res% = SUCCEED% Then
  1412.                 ' Remove record from form and set up form for continuation:
  1413.                 Mode = SQLREST
  1414.                 x = lstPrim.ListIndex
  1415.                 ClearFields
  1416.                 If x <> -1 Then lstPrim.RemoveItem x
  1417.                 ClearGrid grdTitles
  1418.             End If
  1419.             screen.MousePointer = 0
  1420.         End If
  1421.     End If
  1422. End Sub
  1423. Sub SQLFillGrid (pGrid As Control, pChannel%)
  1424. '
  1425. ' Filling then grid with data
  1426. '
  1427. Dim x As Integer
  1428.     pGrid.Row = 0: pGrid.Rows = 10
  1429.     Do
  1430.         res% = SQLNextRow(pChannel%)
  1431.         Select Case res%
  1432.         Case REGROW
  1433.             If pGrid.Row >= pGrid.Rows - 1 Then pGrid.Rows = pGrid.Rows + 1
  1434.             pGrid.Row = pGrid.Row + 1
  1435.             For x = 0 To pGrid.Cols - 1
  1436.                 pGrid.Col = x
  1437.                 pGrid.Text = SQLData(pChannel%, x + 1)
  1438.             Next
  1439.         Case NOMOREROWS
  1440.             pGrid.Col = 0
  1441.             pGrid.Row = 1
  1442.             Exit Do
  1443.         Case Else
  1444.             Exit Do        ' error message by ordinary VBSQL-error routine
  1445.         End Select
  1446.     Loop Until 1 = 0
  1447. ' ------------------------------------------------
  1448. End Sub
  1449. Sub SQLGetDetailRow ()
  1450. '
  1451. ' The user has selected an item in the primary list box.
  1452. ' This routine creates and sends a SQL statement to
  1453. ' retrieve all information on the selected author:
  1454. Dim lAu_Id$, lCmd$, res%, x As Integer
  1455.     screen.MousePointer = 11
  1456.     ' The AU_ID field is positioned beyond LISTWIDTH% in the list box item:
  1457.     lAu_Id$ = Mid$(lstPrim.List(lstPrim.ListIndex), LISTWIDTH% + 1)
  1458.     lCmd$ = "select au_id, au_fname, au_lname, address, zip, city, "
  1459.     lCmd$ = lCmd$ + "state, phone, contract "
  1460.     lCmd$ = lCmd$ + "from authors "
  1461.     lCmd$ = lCmd$ + "where au_id = " + Chr$(34) + lAu_Id$ + Chr$(34)
  1462.     lCmd$ = lCmd$ + " FOR BROWSE"
  1463.     
  1464.     ' Send the select statement and check the result:
  1465.     res% = SQLComm(UpdChannel, lCmd$)
  1466.     If res% = SUCCEED% Then
  1467.         res% = SQLNextRow(UpdChannel)
  1468.         QualString = sqlqual(UpdChannel, 1, "")
  1469.         If res% = REGROW Then
  1470.             ' Show each separate field:
  1471.             For x = 1 To 8
  1472.                 txtAuthors(x).Text = SQLData(UpdChannel, x)
  1473.             Next
  1474.             chkContract.Value = SQLData(UpdChannel, 9)
  1475.         End If
  1476.     End If
  1477.     ' Check to see if the sub grid is showned - if so we will
  1478.     ' refresh it with data from the selected author
  1479.     If FormMaxOpen Then cmdSubGridDetail.Value = True
  1480.     screen.MousePointer = 0
  1481. End Sub
  1482. Sub SQLGetRows ()
  1483. '
  1484. ' This routine loops through the result set and
  1485. ' add rows to the listbox:
  1486. Dim lNmbrRows As Integer, lItems%, res%
  1487. Dim lNoMoreRowsToRead  As Integer, lRemoved As Integer
  1488.     lNoMoreRowsToRead = False
  1489.     For lNmbrRows = 1 To CHUNKSIZE%
  1490.         res% = SQLNextRow(SelChannel)
  1491.         If res% = REGROW Then
  1492.             lstPrim.AddItem RowToListbox()
  1493.         ElseIf res% = NOMOREROWS Then
  1494.             lNoMoreRowsToRead = True
  1495.             Exit For
  1496.         Else
  1497.             Exit For            ' error message by ordinary VBSQL-error routine
  1498.         End If
  1499.         If lstPrim.ListCount > LSTPRIMMAX% Then
  1500.             lstPrim.RemoveItem 0
  1501.             lRemoved = lRemoved + 1
  1502.         End If
  1503.     Next
  1504.     lNmbrRows = lNmbrRows - 1
  1505.     
  1506.     If lNoMoreRowsToRead Then          'no more rows to read from the result set
  1507.         cmdMoreRows.Enabled = False
  1508.     Else
  1509.         cmdMoreRows.Enabled = True
  1510.     End If
  1511.     
  1512.     SetNmbrofRowsPanels lNmbrRows, lRemoved
  1513. End Sub
  1514. Sub SQLInsert ()
  1515. '
  1516. ' Create an Insert statement and send it to SQL Server:
  1517. '
  1518. Dim lCmd$, x As Integer, res%, lKey$
  1519.     screen.MousePointer = 11
  1520.     lCmd$ = "Insert authors ("
  1521.     lCmd$ = lCmd$ + "au_id, au_fname, au_lname, address, "
  1522.     lCmd$ = lCmd$ + "zip, city, state, phone, contract) "
  1523.     lCmd$ = lCmd$ + "values ("
  1524.     For x = 1 To 8      ' Evaluate the content of each field
  1525.         lCmd$ = lCmd$ + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34) + ", "
  1526.     Next
  1527.     lCmd$ = lCmd$ + Abs(chkContract.Value) + ")"
  1528.     
  1529.     ' Send to SQL Server and check result; Set up form after success:
  1530.     res% = SQLComm%(SelChannel, lCmd$)
  1531.     If res% = SUCCEED% Then
  1532.         Mode = SQLREST
  1533.         lKey$ = txtAuthors(1).Text
  1534.         MainButton(4).Value = True      ' Clear form
  1535.         txtAuthors(1).Text = lKey$      ' Set up query for inserted Author
  1536.         MainButton(6).Value = True      ' Send query
  1537.         Mode = SQLSHOW
  1538.     Else
  1539.         Mode = SQLREST
  1540.     End If
  1541.     lstPrim.SetFocus
  1542.     screen.MousePointer = 0
  1543.     
  1544. End Sub
  1545. Sub SQLQuery (pMode As String)
  1546. '
  1547. ' Evaluate the form content for a QBE Select statement
  1548. ' Send it to SQL Server. Read the result set and use it
  1549. ' to populate the primary list box:
  1550. Dim lCmd$, lWhereClause$, res%
  1551.     screen.MousePointer = 11
  1552.     Mode = SQLREST
  1553.     panItemsRead.Caption = ""
  1554.     panItemsRemoved.Caption = ""
  1555.     If pMode = "REFRESH" Then
  1556.         lWhereClause$ = LastWhereClause$
  1557.     Else
  1558.         lWhereClause$ = EvaluateForm()
  1559.     End If
  1560.     lstPrim.Clear
  1561.     lCmd$ = "select au_lname, au_fname, au_id "
  1562.     lCmd$ = lCmd$ + "from authors "
  1563.     If Len(RTrim$(lWhereClause$)) Then
  1564.         lCmd$ = lCmd$ + "where " + lWhereClause$ + " "
  1565.     End If
  1566.     lCmd$ = lCmd$ + "order by au_lname, au_fname"
  1567.     
  1568.     res% = SQLComm(SelChannel, lCmd$)
  1569.     
  1570.     If res% = SUCCEED% Then
  1571.         SQLGetRows
  1572.     End If
  1573.     If lstPrim.ListCount > 0 Then
  1574.         lstPrim.ListIndex = 0           ' Autoclick on first in list box
  1575.         Mode = SQLSHOW
  1576.         SetMainButtons Mode
  1577.     Else
  1578.         Mode = SQLREST
  1579.     End If
  1580.     screen.MousePointer = 0
  1581. End Sub
  1582. Sub SQLSave ()
  1583. '
  1584. ' Choose wether to create an insert or update statement based
  1585. ' on the actual Mode:
  1586.     If Mode = SQLNEW Then
  1587.         SQLInsert
  1588.     Else
  1589.         SQLUpdate
  1590.     End If
  1591.     ' NOTE: Mode will be changed by SQLInsert/SQLUpdate
  1592.     SetMainButtons Mode
  1593. End Sub
  1594. Sub SQLUpdate ()
  1595. '
  1596. ' Create an Update statement and send it to SQL Server:
  1597. Dim lCmd$, lRow$, x As Integer, res%
  1598.     screen.MousePointer = 11
  1599.     If Len(RTrim$(txtAuthors(1).Text)) > 0 Then
  1600.         lCmd$ = "Update authors set "
  1601.         For x = 2 To 8      ' Evaluate the content of each non key field
  1602.             Select Case x
  1603.                 Case 2
  1604.                     lCmd$ = lCmd$ + "au_fname = " + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34) + ", "
  1605.                 Case 3
  1606.                     lCmd$ = lCmd$ + "au_lname = " + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34) + ", "
  1607.                 Case 4
  1608.                     lCmd$ = lCmd$ + "address = " + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34) + ", "
  1609.                 Case 5
  1610.                     lCmd$ = lCmd$ + "zip = " + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34) + ", "
  1611.                 Case 6
  1612.                     lCmd$ = lCmd$ + "city = " + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34) + ", "
  1613.                 Case 7
  1614.                     lCmd$ = lCmd$ + "state = " + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34) + ", "
  1615.                 Case 8
  1616.                     lCmd$ = lCmd$ + "phone = " + Chr$(34) + RTrim$(txtAuthors(x).Text) + Chr$(34) + ", "
  1617.             End Select
  1618.         Next
  1619.         lCmd$ = lCmd$ + "contract = " + Abs(chkContract.Value)
  1620.         lCmd$ = lCmd$ + " " + QualString
  1621.         ' Control to see if the variable QualString is blank - if so we can not allow any update
  1622.         If Len(RTrim$(QualString)) = 0 Then
  1623.             HandleEmptyQual
  1624.             screen.MousePointer = 0
  1625.             Exit Sub
  1626.         End If
  1627.         ' Send to SQL Server and check result; Set up form after success:
  1628.         res% = SQLComm%(UpdChannel, lCmd$)
  1629.         If res% = SUCCEED% Then
  1630.             Mode = SQLREST
  1631.             lRow$ = Left$(RTrim$(txtAuthors(3).Text) + ", " + txtAuthors(2).Text + Space$(LISTWIDTH%), LISTWIDTH%) + txtAuthors(1).Text
  1632.             ' Modify list box item to reflect possible changes from update:
  1633.             If lstPrim.ListIndex <> -1 Then     ' to prevent a VB error
  1634.                 x = lstPrim.ListIndex
  1635.                 lstPrim.RemoveItem x
  1636.                 lstPrim.AddItem lRow$, x
  1637.                 lstPrim.ListIndex = x
  1638.                 Mode = SQLSHOW
  1639.             End If
  1640.         Else
  1641.             RefreshFormFields
  1642.         End If
  1643.     Else
  1644.         Beep
  1645.         MsgBox "The update operation was not successful.", 16
  1646.     End If
  1647.     screen.MousePointer = 0
  1648. End Sub
  1649. Sub SubGridClose ()
  1650. '
  1651. ' Clears the grid and makes it invisible
  1652. '
  1653.     If Me.WindowState <> 2 Then
  1654.         Me.Height = DEFMINHEIGHT%
  1655.         CenterForm
  1656.     End If
  1657.     FormMaxOpen = False
  1658.     ClearGrid grdTitles
  1659.     frmTitles.Visible = False
  1660.     
  1661. End Sub
  1662. Sub txtAuthors_Change (index As Integer)
  1663. '
  1664. ' If changes are made to any text field included in the
  1665. ' control array of text boxes, and if MODE is anything
  1666. ' else than SQLREST, then enable the save button and
  1667. ' the cancel button. This makes it possible to save or
  1668. ' cancel any modifications made:
  1669.     If Mode <> SQLREST Then
  1670.         MainButton(2).Enabled = True        ' save button
  1671.         MainButton(7).Enabled = True        ' cancel button
  1672.     End If
  1673. End Sub
  1674. Sub txtAuthors_GotFocus (index As Integer)
  1675.     ' Modification of key field prevented
  1676.     If Mode = SQLSHOW And index = 1 Then txtAuthors(index + 1).SetFocus
  1677.     ' Highlight existing entry
  1678.     txtAuthors(index).SelStart = 0
  1679.     txtAuthors(index).SelLength = Len(RTrim$(txtAuthors(index).Text))
  1680. End Sub