home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 December / PCWorld_1998-12_cd.iso / software / sybase / ASA / asa60.exe / data1.cab / cxmp_files / cur.sqc next >
Text File  |  1998-07-27  |  4KB  |  189 lines

  1. /* CUR.SQC     General SQL code for Cursex example (all platforms)
  2. */
  3.  
  4. #include <stdio.h>
  5. #include <ctype.h>
  6. EXEC SQL INCLUDE SQLCA;
  7. #include "sqldef.h"
  8. #include "example.h"
  9.  
  10. extern int              PageSize;
  11.                        
  12. typedef struct an_employee {
  13.     unsigned long       emp_id;
  14.     char                name[ 41 ];
  15.     char                sex[ 2 ];        /* M or F plus null char */
  16.     char                birthdate[ 15 ];
  17. } an_employee;
  18.  
  19. static void printSQLError()
  20. {
  21.     char                buffer[ 200 ];
  22.  
  23.     Displaytext( 0, "SQL error -- %s\n",
  24.     sqlerror_message( &sqlca, buffer, sizeof( buffer ) ) );
  25. }
  26.  
  27. EXEC SQL WHENEVER SQLERROR { printSQLError(); return( FALSE ); };
  28.  
  29. static int connect()
  30. {
  31.     EXEC SQL CONNECT "DBA" IDENTIFIED BY "SQL";
  32.     return( TRUE );
  33.     /* errors will return FALSE: - see WHENEVER above */
  34. }
  35.  
  36. static int release()
  37. {
  38.     EXEC SQL ROLLBACK WORK;
  39.     EXEC SQL DISCONNECT;
  40.     db_fini( &sqlca );
  41.     return( TRUE );
  42. }
  43.  
  44. static int open_cursor()
  45. {
  46.     EXEC SQL DECLARE C1 CURSOR FOR
  47.     SELECT emp_id, emp_fname || ' ' || emp_lname, sex, birth_date
  48.     FROM "dba".employee;
  49.     EXEC SQL OPEN C1;
  50.     return( TRUE );
  51. }
  52.  
  53. static int close_cursor()
  54. {
  55.     EXEC SQL CLOSE C1;
  56.     return( TRUE );
  57. }
  58.  
  59. static int fetch_row( 
  60.     EXEC SQL BEGIN DECLARE SECTION;
  61.     unsigned long       *emp_id,
  62.     char                *name,
  63.     char                *sex,
  64.     char                *birthdate 
  65.     EXEC SQL END DECLARE SECTION;
  66.     )
  67. {
  68.     EXEC SQL FETCH RELATIVE 1 C1
  69.          INTO :emp_id, :name, :sex, :birthdate;
  70.  
  71.     if( SQLCODE ) {
  72.     return( FALSE );
  73.     } else {
  74.     return( TRUE );
  75.     }
  76. }
  77.  
  78. static int move( 
  79.     EXEC SQL BEGIN DECLARE SECTION;
  80.     int                 relpos
  81.     EXEC SQL END DECLARE SECTION;
  82.     )
  83. {
  84.     EXEC SQL FETCH RELATIVE :relpos C1;
  85.     return( TRUE );
  86. }
  87.  
  88. static int top()
  89. {
  90.     EXEC SQL FETCH ABSOLUTE 0 C1;
  91.     return( TRUE );
  92. }
  93.  
  94. static int bottom()
  95. {
  96.     EXEC SQL FETCH ABSOLUTE -1 C1;
  97.     return( TRUE );
  98. }
  99.  
  100. static void help()
  101. {
  102.     Displaytext( 0, "Cursex Demonstration Program Commands:\n" );
  103.     Displaytext( 0, "p - Print current page\n" );
  104.     Displaytext( 0, "u - Move up a page\n" );
  105.     Displaytext( 0, "d - Move down a page\n" );
  106.     Displaytext( 0, "b - Move to bottom page\n" );
  107.     Displaytext( 0, "t - Move to top page\n" );
  108.     Displaytext( 0, "q - Quit\n" );
  109.     Displaytext( 0, "h - Help (this screen)\n" );
  110. }
  111.  
  112. static void print()
  113. {
  114.     an_employee         s;
  115.     int                 i;
  116.     int                 status;
  117.  
  118.     for( i = 0; i < PageSize; ) {
  119.     ++i;
  120.     status = fetch_row( &s.emp_id, s.name, s.sex, s.birthdate );
  121.     if( status ) {
  122.             Displaytext( 0, "%6ld", s.emp_id );
  123.             Displaytext( 10, "%-30.30s", s.name );
  124.             Displaytext( 30, "%-3.3s", s.sex );
  125.             Displaytext( 40, "%-15.15s\n", s.birthdate );
  126.     } else {
  127.         break;
  128.     }
  129.     }
  130.     move( -i );
  131. }
  132.  
  133. extern int WSQLEX_Init()
  134. {
  135.     if( !db_init( &sqlca ) ) {
  136.         Display_systemerror( 
  137.         "Unable to initialize database interface\n" );
  138.     return( FALSE );
  139.     }
  140.     if( !db_find_engine( &sqlca, NULL ) ) {
  141.     Display_systemerror( "Database Engine/Station not running" );
  142.     return( FALSE );
  143.     }
  144.     if( !connect() ) {
  145.     Display_systemerror( "Could not connect" );
  146.     return( FALSE );
  147.     }
  148.     open_cursor();
  149.     help();
  150.     return( TRUE );
  151. }
  152.  
  153. extern void WSQLEX_Process_Command( int selection )
  154. {
  155.     switch( tolower( selection ) ) {
  156.     case 'p':    print();
  157.             break;
  158.  
  159.     case 'u':    move( -PageSize );
  160.             print();
  161.             break;
  162.             
  163.     case 'd':    move( PageSize );
  164.             print();
  165.             break;
  166.  
  167.     case 't':    top();
  168.             print();
  169.             break;
  170.  
  171.     case 'b':    bottom();
  172.             move( -PageSize );
  173.             print();
  174.                 break;
  175.  
  176.     case 'h':    help();
  177.             break;
  178.  
  179.     default:    Displaytext( 0, "Invalid command, press 'h' for help\n" );
  180.     }
  181. }
  182.  
  183. extern int WSQLEX_Finish()
  184. {
  185.     close_cursor();
  186.     release();
  187.     return( TRUE );
  188. }
  189.