home *** CD-ROM | disk | FTP | other *** search
-
- 'EXAMPLE2.BAS -- This example illustrates the use of row buffering.
- 'It executes a query, stores all the returned rows (up to 100), and
- 'allows the user to examine data rows at random.
-
- 'Copyright (c) 1990 by Microsoft Corp. All rights reserved.
-
-
- '$INCLUDE: 'sql.bi'
-
- MemLeft& = SETMEM(-16384) 'Reserve 16K of heap.
- STACK 8192 'Reserve 8K of stack space.
-
- 'Initialize BASIC DB-LIBRARY.
- IF SqlInit$ = "" THEN
- PRINT "Can't start BASIC DB-LIBRARY."
- END
- END IF
-
- 'Get a login record and fill it in with the necessary information.
- Login& = SqlLogin&
- Result% = SqlSetLUser%(Login&, "loginid")
- Result% = SqlSetLPwd%(Login&, "passwd")
- Result% = SqlSetLApp%(Login&, "example")
-
- 'Get a connection for communicating with SQL Server.
- SqlConn& = SqlOpen&(Login&, "server")
- IF SqlConn& = 0 THEN END
-
- 'Put commands in the command buffer.
- cmd$ = "SELECT name, type, id, crdate FROM sysobjects WHERE type = 'S'"
- Result% = SqlCmd%(SqlConn&, cmd$)
-
- 'Set row buffering to 100 rows and execute query.
- Result% = SqlSetOpt%(SqlConn&, SQLBUFFER, "100")
- Result% = SqlExec%(SqlConn&)
-
- 'Read the rows into the row buffer.
- IF SqlResults(SqlConn&) = SUCCEED THEN
- Result% = SqlNextRow%(SqlConn&)
- DO UNTIL Result% = NO.MORE.ROWS
-
- 'If row buffer is full, throw away the oldest row.
- IF Result% = BUF.FULL THEN CALL sqlclrbuf(SqlConn&, 1)
- Result% = SqlNextRow%(SqlConn&)
-
- LOOP
-
- 'Print the column headers.
- PRINT
- PRINT "NAME"; TAB(28); "TYPE"; TAB(38); "DATE"; TAB(62); "ID"
- PRINT "--------------------"; TAB(28); "----";
- PRINT TAB(38); "-------------------"; TAB(62); "---"
-
- DO
- PRINT
- INPUT "Which row (0 to quit)"; RowNum&
- IF RowNum& = 0 THEN EXIT DO
-
- 'Print the requested row.
- IF SqlGetRow%(SqlConn&, RowNum&) = NO.MORE.ROWS THEN
- PRINT "That row is not in the table."
- ELSE
- ObjName$ = SqlData$(SqlConn&, 1)
- Type$ = SqlData$(SqlConn&, 2)
- Id$ = SqlData$(SqlConn&, 3)
- CrDate$ = SqlData$(SqlConn&, 4)
- PRINT ObjName$; TAB(29); Type$; TAB(38); CrDate$; TAB(62); Id$
- END IF
- LOOP
- END IF
-
- 'Close connection and exit program.
- CALL SqlExit
- END
-
-
- 'Sample Output
- '
- 'Msg No.: 5701 Severity: 2 Level: 0
- 'Message: Changed database context from 'master' to 'master'.
- '
- 'NAME TYPE DATE ID
- '-------------------- ---- ------------------- ---
- '
- 'Which row (0 to quit)? 2
- 'sysindexes S Jan 1 1900 12:00AM 2
- '
- 'Which row (0 to quit)? 10
- 'sysusers S Jan 1 1900 12:00AM 10
- '
- 'Which row (0 to quit)? 1
- 'sysobjects S Jan 1 1900 12:00AM 1
- '
- 'Which row (0 to quit)? 0
-
- 'User-defined handlers. BASIC DB-LIBRARY will call these procedures if
- 'there is an error or a message from the server.
- '
- FUNCTION UserSqlErrorHandler% (SqlConn&, State%, DbErr%, OsErr%, DbErrStr$, OsErrStr$)
- PRINT
- IF SqlDead%(SqlConn&) THEN
- PRINT "Connection to SQL Server failed."
- UserSqlErrorHandler% = INTEXIT
- EXIT FUNCTION
- END IF
- PRINT "State: "; State%; " Error No: "; DbErr%; " OS Error: "; OsErr%
- PRINT "DB-LIBRARY Error: "; DbErrStr$
- IF OsErr% <> DBNOERR THEN PRINT "Operating-System Error: "; OsErrStr$
- UserSqlErrorHandler% = INTCANCEL
- END FUNCTION
-
- SUB UserSqlMsgHandler (SqlConn&, MsgNo&, Severity%, Level%, Msg$)
- PRINT
- PRINT "Msg No.:"; MsgNo&; " Severity: "; Severity%; " Level: "; Level%
- PRINT "Message: "; Msg$
- END SUB
-
-