home *** CD-ROM | disk | FTP | other *** search
- VERSION 2.00
- Begin Form PrimaryWindow
- BackColor = &H00C0C0C0&
- BorderStyle = 1 'Fixed Single
- Caption = "Cursor Scroll Bar Example"
- ForeColor = &H00000000&
- Height = 7215
- Icon = CURSORS.FRX:0000
- Left = 990
- LinkMode = 1 'Source
- LinkTopic = "Form1"
- MaxButton = 0 'False
- ScaleHeight = 6285
- ScaleWidth = 7725
- Top = -30
- Width = 7845
- Begin ListBox Cursor_Buffer
- FontBold = -1 'True
- FontItalic = 0 'False
- FontName = "Courier"
- FontSize = 9.75
- FontStrikethru = 0 'False
- FontUnderline = 0 'False
- Height = 2955
- Left = 120
- TabIndex = 18
- Top = 3240
- Width = 7215
- End
- Begin VScrollBar VScroll1
- Height = 3255
- LargeChange = 15
- Left = 7320
- Max = 500
- SmallChange = 15
- TabIndex = 20
- Top = 3000
- Width = 255
- End
- Begin VBSQL VBSQL1
- Caption = "SQL Error/Message"
- Height = 255
- Left = 5160
- Top = 2760
- Visible = 0 'False
- Width = 2175
- End
- Begin Frame Frame2
- BackColor = &H00C0C0C0&
- Caption = "Cursor Information"
- Height = 1575
- Left = 120
- TabIndex = 5
- Top = 1080
- Width = 7455
- Begin CommandButton Update_Button
- Caption = "&Update"
- Height = 375
- Left = 6360
- TabIndex = 16
- Top = 1080
- Width = 975
- End
- Begin ComboBox CC_List
- Height = 300
- Left = 2160
- Style = 2 'Dropdown List
- TabIndex = 13
- Top = 1080
- Width = 3255
- End
- Begin CommandButton Close_Button
- Caption = "C&lose"
- Height = 375
- Left = 6360
- TabIndex = 15
- Top = 720
- Width = 975
- End
- Begin TextBox IntN_value
- Height = 285
- Left = 4800
- TabIndex = 11
- Text = "Text1"
- Top = 720
- Width = 495
- End
- Begin ComboBox Sensitivity_List
- Height = 300
- Left = 2160
- Style = 2 'Dropdown List
- TabIndex = 9
- Top = 720
- Width = 2175
- End
- Begin CommandButton Open_Button
- Caption = "&Open "
- Height = 375
- Left = 6360
- TabIndex = 14
- Top = 360
- Width = 975
- End
- Begin TextBox Fetch_size
- Height = 285
- Left = 2160
- TabIndex = 7
- Text = "1"
- Top = 360
- Width = 375
- End
- Begin Label Label3
- BackColor = &H00C0C0C0&
- Caption = "Concurrenc&y Control:"
- Height = 210
- Left = 120
- TabIndex = 12
- Top = 1080
- Width = 1845
- End
- Begin Label Label8
- BackColor = &H00C0C0C0&
- Caption = "&N:"
- Height = 255
- Left = 4440
- TabIndex = 10
- Top = 720
- Width = 255
- End
- Begin Label Label2
- BackColor = &H00C0C0C0&
- Caption = "Cursor &Sensitivity:"
- Height = 225
- Left = 120
- TabIndex = 8
- Top = 720
- Width = 1605
- End
- Begin Label Label6
- BackColor = &H00C0C0C0&
- Caption = "(Max = 15)"
- Height = 255
- Left = 2640
- TabIndex = 19
- Top = 360
- Width = 975
- End
- Begin Label Label5
- BackColor = &H00C0C0C0&
- Caption = "Rows per &Fetch:"
- Height = 240
- Left = 120
- TabIndex = 6
- Top = 360
- Width = 1815
- End
- End
- Begin Frame Frame1
- BackColor = &H00C0C0C0&
- Caption = "Object"
- Height = 855
- Left = 120
- TabIndex = 0
- Top = 120
- Width = 7455
- Begin ComboBox Table_List
- Height = 300
- Left = 4800
- TabIndex = 4
- Text = "Table_List"
- Top = 360
- Width = 2295
- End
- Begin ComboBox Database_List
- Height = 300
- Left = 1320
- TabIndex = 2
- Text = "Database_List"
- Top = 360
- Width = 2295
- End
- Begin Label Label4
- BackColor = &H00C0C0C0&
- Caption = "&Table:"
- Height = 225
- Left = 3840
- TabIndex = 3
- Top = 360
- Width = 735
- End
- Begin Label Label1
- BackColor = &H00C0C0C0&
- Caption = "&Database:"
- Height = 210
- Left = 120
- TabIndex = 1
- Top = 360
- Width = 1005
- End
- End
- Begin Label COLUMN_LABEL
- BorderStyle = 1 'Fixed Single
- Caption = "Label8"
- FontBold = -1 'True
- FontItalic = 0 'False
- FontName = "Courier"
- FontSize = 9.75
- FontStrikethru = 0 'False
- FontUnderline = 0 'False
- Height = 255
- Left = 120
- TabIndex = 21
- Top = 3000
- Width = 7215
- End
- Begin Label Label7
- BackColor = &H00C0C0C0&
- Caption = "&Results:"
- Height = 255
- Left = 120
- TabIndex = 17
- Top = 2760
- Width = 855
- End
- Begin Menu Menu_File
- Caption = "&Connect"
- Begin Menu Logon_Selection
- Caption = "&Logon"
- End
- Begin Menu Log_Off_Selection
- Caption = "Log &Off"
- End
- Begin Menu Exit_Selection
- Caption = "&Exit"
- End
- End
- Begin Menu Menu_Help
- Caption = "&Help"
- Begin Menu About_Selection
- Caption = "&About..."
- End
- End
- Sub About_Selection_Click ()
- About_Form.Show 1
- End Sub
- Sub BeginTran ()
- Results% = ExecuteSQLCommand("begin tran")
- Do While SqlResults(SqlConn%) <> NOMORERESULTS
- Do While SqlNextRow(SqlConn%) <> NOMOREROWS
- Loop
- Loop
- OpenTran% = True
- End Sub
- Sub CC_List_Click ()
- If Sensitivity_List.ListIndex = -1 Or Table_List.ListIndex = -1 Then
- Open_Button.Enabled = False
- Else
- Open_Button.Enabled = True
- End If
- End Sub
- Sub ClearCursorBuffer ()
- Do While Cursor_Buffer.ListCount
- Cursor_Buffer.RemoveItem 0
- End Sub
- Sub ClearDatabaseList ()
- Rem Clear all databases out of list box
- Do While Database_List.ListCount
- Database_List.RemoveItem 0
- Loop
- Database_List.Text = ""
- End Sub
- Sub ClearOutputBuffer ()
- For i% = 0 To 19
- OutputData(i%) = ""
- Next i%
- End Sub
- Sub ClearTableList ()
- Rem Clear all tables out of list box
- Do While Table_List.ListCount
- Table_List.RemoveItem 0
- Loop
- Table_List.Text = ""
- End Sub
- Sub Close_Button_Click ()
- If OpenTran% Then
- CommitTran
- End If
- SqlCursorClose CursorHandle%
- Open_Button.Enabled = True
- Close_Button.Enabled = False
- Update_Button.Enabled = False
- Fetch_Size.Enabled = True
- Sensitivity_List.Enabled = True
- CC_List.Enabled = True
- IntN_value.Enabled = True
- COLUMN_LABEL.Caption = ""
- ClearCursorBuffer
- End Sub
- Sub CommitTran ()
- Results% = ExecuteSQLCommand("commit tran")
- Do While SqlResults(SqlConn%) <> NOMORERESULTS
- Do While SqlNextRow(SqlConn%) <> NOMOREROWS
- Loop
- Loop
- OpenTran% = False
- End Sub
- Sub Database_List_Click ()
- Rem This routine will use the selected database, get all the user
- Rem tables in the database, and change the primary window title
- Rem to reflect the database change.
- DatabaseSelection$ = Database_List.Text
- Results% = SqlUse(SqlConn%, DatabaseSelection$)
- If Results% = SUCCEED Then
- PrimaryWindow.MousePointer = 11
- RetrieveTableNames
- PrimaryWindow.MousePointer = 0
- DatabaseName = SqlName$(SqlConn%)
- ChangePrimaryWindowCaption
- If Table_List.ListIndex = -1 Or Sensitivity_List.ListIndex = -1 Or CC_List.ListIndex = -1 Then
- Open_Button.Enabled = False
- Else
- Open_Button.Enabled = True
- End If
- End If
- End Sub
- Sub Exit_Selection_Click ()
- ExitApplication
- End
- End Sub
- Sub Fetch_First ()
- ClearCursorBuffer
- If Not OpenTran% Then
- BeginTran
- Else
- CommitTran
- BeginTran
- End If
- Results% = SqlCursorFetch%(CursorHandle%, FETCHFIRST, 0)
- If Results% = SUCCEED And Int(RowStatus&(0)) <> FTCENDOFRESULTS% Then
- ProcessCursorRows
- Update_Button.Enabled = True
- FillCursorBuffer -1 'display the data
- Else
- MsgBox "Problem fetching cursor.", 0, "Cursor Example"
- End If
- End Sub
- Sub Fetch_Last ()
- If Not OpenTran% Then
- BeginTran
- Else
- CommitTran
- BeginTran
- End If
- Results% = SqlCursorFetch%(CursorHandle%, FETCHLAST, 0)
- If Results% = SUCCEED And Int(RowStatus&(0)) <> FTCENDOFRESULTS% Then
- ProcessCursorRows
- Update_Button.Enabled = True
- FillCursorBuffer -1 'display the data
- Else
- MsgBox "Problem fetching cursor.", 0, "Cursor Example"
- End If
- End Sub
- Sub Fetch_Next ()
- Rem This routine will get this next batch of rows
- If Not OpenTran% Then
- BeginTran
- Else
- CommitTran
- BeginTran
- End If
- Results% = SqlCursorFetch%(CursorHandle%, FETCHNEXT, 0)
- If Results% = SUCCEED And Int(RowStatus&(0)) <> FTCENDOFRESULTS% Then
- ProcessCursorRows
- Update_Button.Enabled = True
- FillCursorBuffer -1 'display the data
- Else
- MsgBox "Problem fetching cursor. You are more than likely at the end of the result set", 0, "Cursor Example"
- End If
- End Sub
- Sub Fetch_Previous ()
- Rem This routine will get the previous batch of rows
- If Not OpenTran% Then
- BeginTran
- Else
- CommitTran
- BeginTran
- End If
- Results% = SqlCursorFetch%(CursorHandle%, FETCHPREV, 0)
- If Results% = SUCCEED And Int(RowStatus&(0)) <> FTCENDOFRESULTS% Then
- ProcessCursorRows
- Update_Button.Enabled = True
- FillCursorBuffer -1 'display the data
- Else
- MsgBox "Problem fetching cursor.", 0, "Cursor Example"
- End If
- End Sub
- Sub Fetch_Random (Rownum As Integer)
- Rem This routine will get a row number to start fetching from
- If Not OpenTran% Then
- BeginTran
- Else
- CommitTran
- BeginTran
- End If
- Results% = SqlCursorFetch%(CursorHandle%, FETCHRANDOM, Rownum%)
- If Results% = SUCCEED And Int(RowStatus&(0)) <> FTCENDOFRESULTS% Then
- ProcessCursorRows
- Update_Button.Enabled = True
- FillCursorBuffer -1 'display the data
- Else
- MsgBox "Problem fetching cursor.", 0, "Cursor Example"
- End If
- End Sub
- Sub Fetch_Relative (ScrollValue As Integer)
- Rem This routine will get a batch relative to the selected row
- Rem First Calculate where to start the fetch
- MaxRows% = Vscroll1.Max
- n = (ScrollValue * MaxRows%) / 100
- Rownum% = n - CursorSliderValue%
- Rem Fetch the rows
- If Not OpenTran% Then
- BeginTran
- Else
- CommitTran
- BeginTran
- End If
- Results% = SqlCursorFetch%(CursorHandle%, FETCHRELATIVE, Rownum%)
- If Results% = SUCCEED And Int(RowStatus&(0)) <> FTCENDOFRESULTS% Then
- ProcessCursorRows
- Update_Button.Enabled = True
- FillCursorBuffer -1 'display the data
- Else
- MsgBox "Problem fetching cursor.", 0, "Cursor Example"
- End If
- End Sub
- Sub Fetch_size_LostFocus ()
- Rem Make sure the fetch size fits in the results list box to avoid scrolling
- Num% = Val(Fetch_Size.Text) * Val(IntN_value.Text)
- If Val(Fetch_Size.Text) < 1 Or Val(Fetch_Size.Text) > 15 Then
- MsgBox "Value must be between 1 and 15", 0, "Cursor Example"
- Fetch_Size.SetFocus
- End If
- End Sub
- Sub FillCursorBuffer (x As Integer)
- Rem If x% >= 0, then we are doing a horizontal scroll
- Rem Clear the list box
- Rem Fill the list box with the shifted data
- If x% >= 0 Then
- ClearCursorBuffer
- startshift% = x%
- rowlen& = Len(OutputData(0))
- i% = 0
- While OutputData(i%) <> ""
- If i% <= 2 Then
- If x% = 0 Then startshift% = 1
- Cursor_Buffer.AddItem Mid$(OutputData(i%), startshift%, rowlen&)
- Else
- If x% = 0 Then startshift% = 2
- Cursor_Buffer.AddItem Mid$(OutputData(i%), startshift% - 1, rowlen&)
- End If
- i% = i% + 1
- Wend
- Rem First fill the buffer with the headings
- Rem Then fill in the data
- Else
- i% = 0
- While OutputData(i%) <> ""
- Cursor_Buffer.AddItem OutputData(i%)
- i% = i% + 1
- Wend
- End If
- End Sub
- Sub Form_Load ()
- Rem Initialize the application
- PrimaryWindowTitle = "Cursor Example"
- ChangePrimaryWindowCaption
- InitializeApplication
- MsgBox DBLIB_VERSION$, 0, "Cursor Example"
- Rem Set the initial state of each of the controls in the form
- Sensitivity_List.AddItem "Static"
- Sensitivity_List.AddItem "Keyset driven"
- Sensitivity_List.AddItem "Dynamic"
- Sensitivity_List.AddItem "Int N"
- CC_List.AddItem "Read only"
- CC_List.AddItem "Locking control"
- CC_List.AddItem "Optimistic concurrency"
- CC_List.AddItem "Optimistic concurrency by values"
- Logon_Selection.Enabled = True
- Log_Off_Selection.Enabled = False
- Exit_Selection.Enabled = True
- Open_Button.Enabled = False
- Close_Button.Enabled = False
- Update_Button.Enabled = False
- OpenTran% = False
- COLUMN_LABEL.Caption = ""
- ClearCursorBuffer
- ClearDatabaseList
- ClearTableList
- IntN_value.Text = "0"
- End Sub
- Sub Log_Off_Selection_Click ()
- Rem Set the state of the controls
- Rem Logoff
- ClearDatabaseList
- ClearTableList
- Open_Button.Enabled = False
- Close_Button.Enabled = False
- Update_Button.Enabled = False
- Logoff
- Logon_Selection.Enabled = True
- Log_Off_Selection.Enabled = False
- Exit_Selection.Enabled = True
- End Sub
- Sub Logon_Selection_Click ()
- Rem Logon to the server
- Rem Get the databases in the server and display them in the list box
- Rem Change the primary window caption to reflect current status
- Login.Show 1
- PrimaryWindow.MousePointer = 11
- If CheckServerConnection() = 1 Then
- Results% = GetDatabases(Database_List)
- ChangePrimaryWindowCaption
- Logon_Selection.Enabled = False
- Log_Off_Selection.Enabled = True
- End If
- PrimaryWindow.MousePointer = 0
- End Sub
- Sub Open_Button_Click ()
- Rem Get the fetch size and keyset size
- Rem Redimension the rowstatus array
- NumRowsInCursor% = Val(Fetch_Size.Text)
- IntN% = Val(IntN_value.Text)
- ReDim RowStatus&(NumRowsInCursor%)
- Rem Set the scroll option and concurrency control values
- Select Case Sensitivity_List.Text
- Case "Static"
- ScrollOpt% = CURFORWARD%
- Case "Keyset driven"
- ScrollOpt% = CURKEYSET%
- Case "Dynamic"
- ScrollOpt% = CURDYNAMIC%
- Case "Int N"
- If IntN% <= 0 Then
- MsgBox "You must Supply N", 0, "Cursor Example"
- Exit Sub
- Else
- ScrollOpt% = IntN%
- End If
- End Select
- Select Case CC_List.Text
- Case "Read only"
- Concuropt% = CURREADONLY%
- Case "Locking control"
- Concuropt% = CURLOCKCC%
- Case "Optimistic concurrency"
- Concuropt% = CUROPTCC%
- Case "Optimistic concurrency by values"
- Concuropt% = CUROPTCCVAL%
- End Select
- Rem Setup the select statement and open the cursor
- Statement$ = "select * from " + Table_List.Text
- CursorHandle% = SqlCursorOpen(SqlConn%, Statement$, ScrollOpt%, Concuropt%, NumRowsInCursor%, RowStatus&(0))
- If CursorHandle% <> FAIL Then
- Open_Button.Enabled = False
- Close_Button.Enabled = True
- Rem Get Column names and lengths
- Rem Output the column header
- Results% = SqlCursorInfo%(CursorHandle%, NumCols%, NumRowsInKeyset&)
- For ColCount% = 1 To NumCols%
- Results% = SqlCursorColInfo%(CursorHandle%, ColCount%, colname$, Coltype%, ColLen&, UserType%)
- CursorColName$(ColCount%) = colname$
- CursorColLen&(ColCount%) = ColLen&
- Next ColCount%
- ClearOutputBuffer
- ProcessCursorHeader
- IntN_value.Enabled = False
- Sensitivity_List.Enabled = False
- CC_List.Enabled = False
- Rem Set the vertical scroll bar to <page up> and <page down> the size of the fetch
- Rem Determine the max value of VScroll1
- Rem If we are dealing with a mixed scroll, then set to number (ScrollOpt% * IntN%) * an arbitrary number
- Rem NOTE: You choose an arbitrary number because you want to be able to go outside of keyset.
- Rem If Dealing with keyset or static scroll and we have enough room to store the whole keyset,
- Rem then set max to full keyset size.
- Rem Otherwise, we're dealing with Dynamic scroll or we can't fit the who keyset.
- Rem Make a guess as to how big the keyset is by multiplying the "asked for"
- Rem fetch size by some arbitrary number (we chose 10).
- Rem Fetch the first batch of rows
- Vscroll1.SmallChange = NumRowsInCursor%
- Vscroll1.LargeChange = Vscroll1.SmallChange
- Vscroll1.Value = 0
- Vscroll1.Refresh 'Refresh the vertical scrollbar
- CursorSliderValue = 0
- If IntN% <> 0 Then
- Vscroll1.Max = (ScrollOpt% * IntN%) * 10
- Else
- If NumRowsInKeyset& > 0 Then
- Vscroll1.Max = NumRowsInKeyset&
- Else
- Vscroll1.Max = NumRowsInCursor% * 10 'Note: the number 10 is an arbitrary number
- End If
- End If
- Fetch_First
- Else
- MsgBox "Cursor failed to open.", 0, "Cursor Example"
- End If
- End Sub
- Function PrepareString (String_In As String) As String
- String_Out$ = ""
- For i% = 1 To Len(String_In)
- If Mid$(String_In, i%, 1) = Chr$(39) Then
- String_Out$ = String_Out$ + Chr$(39) + Chr$(39)
- Else
- String_Out$ = String_Out$ + Mid$(String_In, i%, 1)
- End If
- Next
- PrepareString = String_Out$
- End Function
- Sub ProcessCursorHeader ()
- Rem This routine gets and formats the cursor header
- TABKEY$ = " "
- NEWLINE$ = Chr$(13) + Chr$(10)
- colline$ = ""
- For ColCount% = 1 To NumCols%
- tmplen% = CursorColLen&(ColCount%)
- If tmplen% > 256 Then tmplen% = 256
- colname$ = CursorColName$(ColCount%)
- actuallen& = Len(colname$)
- If actuallen& < tmplen% Then
- If ColCount% <> NumCols% Then
- colline$ = colline$ + colname$ + Space$((tmplen% - actuallen&) + 1) + TABKEY$
- Else
- colline$ = colline$ + colname$ + Space$((tmplen% - actuallen&) + 1)
- End If
- Else
- If ColCount% <> NumCols% Then
- colline$ = colline$ + colname$ + TABKEY$
- Else
- colline$ = colline$ + colname$
- End If
- End If
- Next ColCount%
- Rem Set the COLUMN_LABEL label
- COLUMN_LABEL.Caption = colline$
- End Sub
- Sub ProcessCursorRows ()
- Rem This routine gets each of the cursor rows and displays them
- TABKEY$ = Chr$(9)
- colline$ = ""
- ClearCursorBuffer
- ClearOutputBuffer
- Rem HScroll1.Refresh 'Refresh the horizontal scroll bar
- Rem Set the end of results and keyset values
- ENDRESULTS% = FTCENDOFRESULTS% + 1
- ENDKEYSET% = FTCENDOFRESULTS% + FTCENDOFKEYSET% + 1
- Rem Get the cursor data based on the row and column
- For RowCount% = 1 To NumRowsInCursor%
- For ColCount% = 1 To NumCols%
- ColValue$ = SqlCursorData(CursorHandle%, RowCount%, ColCount%)
- actuallen& = Len(ColValue$)
- tmplen% = CursorColLen(ColCount%)
- If tmplen% > 256 Then tmplen% = 256
- If actuallen& < tmplen% Then
- If ColCount% <> NumCols% Then
- DataStr$ = DataStr$ + ColValue$ + Space$((tmplen% - actuallen&) + 1) + TABKEY$
- Else
- DataStr$ = DataStr$ + ColValue$ + Space$((tmplen% - actuallen&) + 1)
- End If
- Else
- If ColCount% <> NumCols% Then
- DataStr$ = DataStr$ + ColValue$ + TABKEY$
- Else
- DataStr$ = DataStr$ + ColValue$
- End If
- End If
- ColValue$ = ""
- Next ColCount%
- OutputData(RowCount% - 1) = DataStr$
- DataStr$ = ""
- testval% = Int(RowStatus&(RowCount% - 1))
- If testval% = ENDRESULTS% Or testval% = ENDKEYSET% Or testval% = FTCENDOFRESULTS% Then
- Exit For
- End If
- Next RowCount%
- End Sub
- Sub RetrieveTableNames ()
- Rem Retrieve table names from SQL Server into list box
- ClearTableList
- Results% = ExecuteSQLCommand("Select name from sysobjects where type = 'U'")
- Do While (SqlResults%(SqlConn%) <> NOMORERESULTS)
- Do While (SqlNextRow(SqlConn%) <> NOMOREROWS)
- Table_List.AddItem SqlData(SqlConn%, 1)
- Loop
- Loop
- Table_List.Text = Table_List.List(0)
- End Sub
- Sub Sensitivity_List_Click ()
- Rem Make sure the required data is supplied before enabling the open button
- If Table_List.ListIndex = -1 Or CC_List.ListIndex = -1 Then
- Open_Button.Enabled = False
- Else
- Open_Button.Enabled = True
- End If
- End Sub
- Sub Table_List_Click ()
- Rem Make sure the required data is supplied before enabling the open button
- If Sensitivity_List.ListIndex = -1 Or CC_List.ListIndex = -1 Then
- Open_Button.Enabled = False
- Else
- Open_Button.Enabled = True
- End If
- End Sub
- Sub Update_Button_Click ()
- Rem Get the selected row number
- Rownum% = Cursor_Buffer.ListIndex + 1
- If Rownum% = 0 Then
- Beep
- MsgBox "Select a row to update.", 0, "Cursor Example"
- Exit Sub
- End If
- Rem Get column # to update and new value
- ColNum$ = InputBox$("Number of column to update:", "Update")
- If ColNum$ = "" Then Exit Sub
- Value$ = InputBox$("Update column " + ColNum$ + " with value: ", "Update")
- If Value$ = "" Then Exit Sub
- Table$ = Table_List.Text
- Rem Determine name of column to update
- Rem Create the update string
- Results% = SqlCursorColInfo(CursorHandle%, Val(ColNum$), colname$, Coltype%, ColLen&, UserType%)
- UpdateValue$ = "set " + colname$ + "="
- If Coltype% = SQLCHAR Or Coltype% = SQLVARCHAR Then
- UpdateValue$ = UpdateValue$ + "'" + Value$ + "'"
- Else
- UpdateValue$ = UpdateValue$ + Value$
- End If
- Rem Perform update
- Results% = SqlCursor(CursorHandle%, CRSUPDATE, Rownum%, Table$, UpdateValue$)
- End Sub
- Sub VBSQL1_Error (SqlConn As Integer, Severity As Integer, ErrorNum As Integer, ErrorStr As String, RetCode As Integer)
- ' Call the required VBSQL error-handling function
- ' OSErr and OSErrStr not used in VBSQL for Windows, but DOS interprets
- ' anything other than -1 as an OS error
- OsErr% = -1
- RetCode% = UserSqlErrorHandler%(SqlConn, Severity%, ErrorNum%, OsErr%, ErrorStr$, OsErrStr$)
- End Sub
- Sub VBSQL1_Message (SqlConn As Integer, Message As Long, State As Integer, Severity As Integer, MsgStr As String)
- UserSqlMsgHandler SqlConn, Message&, State%, Severity%, MsgStr$
- End Sub
- Sub VScroll1_Change ()
- If Vscroll1.Value = 0 And CursorSliderValue% = 0 Then Exit Sub
- Rem Define <Page Up> and <Page Down> values
- Rem Get the current scroll value
- PAGEUP = CursorSliderValue% - Vscroll1.SmallChange
- PAGEDOWN = CursorSliderValue% + Vscroll1.SmallChange
- x = Vscroll1.Value
- Rem Based on the scroll value, call the appropriate routine
- Rem If "Mixed" scroll and scrolling within the keyset, then just do a random
- If x > CursorSliderValue% And x < PAGEDOWN Then
- If x > Vscroll1.SmallChange Then
- Fetch_Random (x)
- Else
- Fetch_Relative (x)
- End If
- If x < CursorSliderValue% And x > PAGEUP Then
- If x > Vscroll1.SmallChange Then
- Fetch_Random (x)
- Else
- Fetch_Relative (x)
- End If
- Else
- Rem User is either doing a <Page Down>, <Page Up>, or Dynamic scrolling
- Select Case x
- Case Is = PAGEDOWN
- Fetch_Next
- Case Is = PAGEUP
- Fetch_Previous
- Case Is > PAGEDOWN
- If ScrollOpt% = CURKEYSET% Then
- Fetch_Random Int(x)
- Else
- Fetch_Relative Int(x)
- End If
- Case Is < PAGEUP
- If ScrollOpt% = CURKEYSET% Then
- Fetch_Random Int(x)
- Else
- Fetch_Relative Int(x)
- End If
- End Select
- End If
- End If
- Rem Save the current scroll value for next time.
- CursorSliderValue = x
- End Sub
-