home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0210 - 0219 / ibm0210-0219 / ibm0213.tar / ibm0213 / 7025PWA1.ZIP / SAMPLES.ZIP / SQLLIB / SAMPLES / WIN / WINMOD.C < prev    next >
Encoding:
C/C++ Source or Header  |  1994-02-28  |  10.8 KB  |  428 lines

  1. #include "windows.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include "sqlca.h"
  6. #include "sqlenv.h"
  7. #include "sql.h"
  8. #include "winmod.h"
  9. #include "dbmmod.h"
  10. #include "cpconv.h"
  11.  
  12.  
  13. HANDLE hInstanceGV ;
  14.  
  15. long FAR PASCAL WndProc (HWND, unsigned, WORD, LONG) ;
  16. short xClient, yClient ;
  17. int  NOERRORS = TRUE ;
  18. int  DBSTARTED = FALSE ;
  19. struct sqlca ca;
  20. char buffer[512];
  21.  
  22.  
  23. HANDLE      tid;
  24. char        sztid[6];
  25. char        whdr[] = "WINMOD: TaskId = " ;
  26. char        wheader[64];
  27. char        szDatabase[DBNAME_SZ];
  28. char        szTable[TNAME_SZ];
  29.  
  30. char query[40];
  31. char sqlcode[40];
  32. char success[40];
  33. char failure[40];
  34. char badsqlca[40];
  35. char allocerr[40];
  36. char converr[40];
  37.  
  38.  
  39. HWND        GlobalhWnd ;
  40. HMENU       hWinedbMenu;
  41.  
  42. int PASCAL WinMain (hInstance, hPrevInstance, lpszCmdLine, nCmdShow)
  43.   HANDLE      hInstance, hPrevInstance ;
  44.   LPSTR       lpszCmdLine ;
  45.   int         nCmdShow ;
  46.   {
  47.   static char szAppName [] = "WINMOD" ;
  48.   HWND        hWnd ;
  49.   MSG         msg ;
  50.   WNDCLASS    wndclass ;
  51.  
  52.   if (!hPrevInstance)
  53.        {
  54.        wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
  55.        wndclass.lpfnWndProc   = WndProc ;
  56.        wndclass.cbClsExtra    = 0 ;
  57.        wndclass.cbWndExtra    = 0 ;
  58.        wndclass.hInstance     = hInstance ;
  59.        wndclass.hIcon         = NULL ;
  60.        wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
  61.        wndclass.hbrBackground = GetStockObject (WHITE_BRUSH) ;
  62.        wndclass.lpszMenuName  = "WinedbMenu" ;
  63.        wndclass.lpszClassName = szAppName ;
  64.  
  65.        if (!RegisterClass (&wndclass))
  66.             return FALSE ;
  67.        }
  68.  
  69.   strcpy(wheader, whdr);
  70.   tid = GetCurrentTask();
  71.   (void)itoa(tid, sztid, 10);
  72.   strcat(wheader,sztid);
  73.  
  74.   hInstanceGV = hInstance ;
  75.  
  76.   hWinedbMenu = LoadMenu(hInstance, "WinModMenu");
  77.  
  78.   GlobalhWnd=hWnd = CreateWindow (szAppName, wheader,
  79.                       WS_OVERLAPPEDWINDOW,
  80.                       CW_USEDEFAULT,
  81.                       CW_USEDEFAULT,
  82.                       600,300,
  83.                       NULL,
  84.                       hWinedbMenu,
  85.                       hInstance,
  86.                       NULL) ;
  87.  
  88.  
  89.   LoadString(hInstanceGV, IDSSQLCODE, sqlcode, 19);
  90.   LoadString(hInstanceGV, IDSSUCCESS, success, 19);
  91.   LoadString(hInstanceGV, IDSFAILURE, failure, 19);
  92.   LoadString(hInstanceGV, IDSQUERY,   query,   19);
  93.   LoadString(hInstanceGV, IDSBADSQLCA,badsqlca,19);
  94.   LoadString(hInstanceGV, IDSALLOCERR,allocerr,19);
  95.   LoadString(hInstanceGV, IDSCONVERR ,converr, 19);
  96.  
  97.   ShowWindow (hWnd, nCmdShow) ;
  98.   UpdateWindow (hWnd) ;
  99.  
  100.   while (NOERRORS)
  101.        {
  102.        if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
  103.          {
  104.          if (msg.message == WM_QUIT)
  105.               break ;
  106.  
  107.          TranslateMessage (&msg) ;
  108.          DispatchMessage (&msg) ;
  109.          }
  110.        } /* end while */
  111.  
  112.   return msg.wParam ;
  113. }
  114.  
  115.  
  116.  
  117. long FAR PASCAL WndProc (hWnd, iMessage, wParam, lParam)
  118.      HWND     hWnd ;
  119.      unsigned iMessage ;
  120.      WORD     wParam ;
  121.      LONG     lParam ;
  122.      {
  123.      short rc;
  124.      FARPROC lpproc ;
  125.  
  126.      switch (iMessage)
  127.        {
  128.        case WM_CREATE:
  129.             break ;
  130.  
  131.        case WM_SIZE:
  132.             xClient = LOWORD (lParam) ;
  133.             yClient = HIWORD (lParam) ;
  134.             break ;
  135.  
  136.        case WM_DESTROY:
  137.             if (DBSTARTED)
  138.               {
  139.               sqlStop( (struct sqlca far *)&ca );
  140.               DBSTARTED = FALSE;
  141.               }
  142.             PostQuitMessage (0) ;
  143.             break ;
  144.  
  145.        case WM_COMMAND:
  146.           switch (wParam)
  147.             {
  148.             case IDMCATALOG:
  149.                  lpproc = MakeProcInstance((FARPROC)CatalogDlg, hInstanceGV);
  150.                  DialogBox(hInstanceGV, MAKEINTRESOURCE(CATALOGDIALOG), hWnd, lpproc);
  151.                  FreeProcInstance( lpproc );
  152.             break;
  153.  
  154.             case IDMSTARTUSING:
  155.                  lpproc = MakeProcInstance((FARPROC)StartDBDlg, hInstanceGV);
  156.                  DialogBox(hInstanceGV, MAKEINTRESOURCE(STARTDBDIALOG), hWnd, lpproc);
  157.                  FreeProcInstance( lpproc );
  158.             break;
  159.  
  160.             case IDMQUERY:
  161.                  lpproc = MakeProcInstance((FARPROC)QueryDBDlg, hInstanceGV);
  162.                  DialogBox(hInstanceGV, MAKEINTRESOURCE(QUERYDBDIALOG), hWnd, lpproc);
  163.                  FreeProcInstance( lpproc );
  164.             break;
  165.  
  166.             case IDMSTOPUSING:
  167.                  rc = sqlStop( (struct sqlca far *)&ca );
  168.                  DBSTARTED = FALSE;
  169.                  if ( ! err( hWnd, rc, &ca ) )
  170.                     {
  171.                     LoadString(hInstanceGV, IDSDBDISC, buffer, 512);
  172.                     MessageBox( hWnd, buffer, success, MB_OK );
  173.                     DBSTARTED = FALSE;
  174.                     }
  175.             break;
  176.  
  177.             case IDMUNCATALOG:
  178.                  lpproc = MakeProcInstance((FARPROC)UnCatalogDlg, hInstanceGV);
  179.                  DialogBox(hInstanceGV, MAKEINTRESOURCE(UNCATLGDIALOG), hWnd, lpproc);
  180.                  FreeProcInstance( lpproc );
  181.             break;
  182.  
  183.             case IDMEXIT:
  184.               if (DBSTARTED) {
  185.                  sqlStop( (struct sqlca far *)&ca );
  186.                  DBSTARTED = FALSE;
  187.               }
  188.               PostQuitMessage (0) ;
  189.             break ;
  190.  
  191.             default:
  192.                  break;
  193.             }
  194.           break;
  195.  
  196.        default:
  197.             return DefWindowProc (hWnd, iMessage, wParam, lParam) ;
  198.        }
  199.      return 0L ;
  200.      }
  201.  
  202.  
  203. short err( HWND hWnd, short rc, struct sqlca far * ca )
  204. {
  205.    char buf[512];
  206.    short r=0;
  207.  
  208.    if ( rc ) {
  209.       r = rc;
  210.       if      ( rc == BAD_SQLCA )
  211.          MessageBox( hWnd, badsqlca, "", MB_OK );
  212.       else if ( rc == ALLOC_ERR )
  213.          MessageBox( hWnd, allocerr, "", MB_OK );
  214.       else if ( rc == CONVERSION_ERROR )
  215.          MessageBox( hWnd, converr,  "", MB_OK );
  216.    }
  217.    else if ( ca->sqlcode ) {
  218.       r = (short)ca->sqlcode;
  219.       sqlxintp( (char far *)buf, 512, 0, (struct sqlca far *)ca );
  220.       MessageBox( hWnd, buf, sqlcode, MB_OK );
  221.    }
  222.    return( (int)r );
  223. }
  224.  
  225.  
  226.  
  227. BOOL FAR PASCAL CatalogDlg(hWnd, message, wParam, lParam)
  228. HWND    hWnd;
  229. unsigned    message;
  230. WORD    wParam;
  231. LONG    lParam;
  232. {
  233.    char node[12];
  234.    int i;
  235.    short rc;
  236.  
  237.    switch (message)
  238.       {
  239.       case WM_INITDIALOG:
  240.       return TRUE;
  241.  
  242.       case WM_COMMAND:
  243.            switch (wParam)
  244.               {
  245.               case IDOK:
  246.                    i = GetDlgItemText(hWnd, IDDTEXT1, (LPSTR)szDatabase, DBNAME_SZ-1 );
  247.                    szDatabase[i] = '\0';
  248.  
  249.                    i = GetDlgItemText(hWnd, IDDTEXT2, (LPSTR)node, 11 );
  250.                    node[i] = '\0';
  251.  
  252.                    rc = sqlxcatd( (char far *)szDatabase, (char far *)"", ' ',
  253.                                   (char far *)node,  '0', (char far *)"", 0,
  254.                                   (struct sqlca far *)&ca
  255.                                 );
  256.  
  257.                    if ( ! err( hWnd, rc, &ca ) )
  258.                       {
  259.                       LoadString(hInstanceGV, IDSDBCATLG, buffer, 512);
  260.                       MessageBox( hWnd, buffer, success, MB_OK );
  261.                       }
  262.               /* no break */
  263.  
  264.               case IDCANCEL:
  265.                    EndDialog(hWnd, TRUE);
  266.               break;
  267.  
  268.               default:
  269.                    return FALSE;
  270.               }
  271.       break;  /* end of WM_COMMAND */
  272.  
  273.       default:
  274.          return FALSE;
  275.  
  276.       }  /* end switch (message) */
  277.  
  278.    return TRUE;
  279. }
  280.  
  281.  
  282.  
  283.  
  284. BOOL FAR PASCAL UnCatalogDlg(hWnd, message, wParam, lParam)
  285. HWND    hWnd;
  286. unsigned    message;
  287. WORD    wParam;
  288. LONG    lParam;
  289. {
  290.    int i;
  291.    short rc;
  292.  
  293.    switch (message) {
  294.       case WM_INITDIALOG:
  295.       return TRUE;
  296.  
  297.       case WM_COMMAND:
  298.            switch (wParam) {
  299.               case IDOK:
  300.                    i = GetDlgItemText(hWnd, IDDTEXT1, (LPSTR)szDatabase, DBNAME_SZ-1 );
  301.                    szDatabase[i] = '\0';
  302.  
  303.                    rc = sqlxuncd( (char far *)szDatabase,
  304.                                   (struct sqlca far *) &ca );
  305.  
  306.                    if ( ! err( hWnd, rc, &ca ) )
  307.                       {
  308.                       LoadString(hInstanceGV, IDSDBUNCATLG, buffer, 512);
  309.                       MessageBox( hWnd, buffer, success, MB_OK );
  310.                       }
  311.               /* no break */
  312.  
  313.               case IDCANCEL:
  314.                    EndDialog(hWnd, TRUE);
  315.               break;
  316.  
  317.               default:
  318.                    return FALSE;
  319.            }
  320.       break;  /* end of WM_COMMAND */
  321.  
  322.       default:
  323.          return FALSE;
  324.  
  325.    }  /* end switch (message) */
  326.  
  327.    return TRUE;
  328. }
  329.  
  330.  
  331. BOOL FAR PASCAL StartDBDlg(hWnd, message, wParam, lParam)
  332. HWND    hWnd;
  333. unsigned    message;
  334. WORD    wParam;
  335. LONG    lParam;
  336. {
  337.    int i;
  338.    short rc;
  339.  
  340.    switch (message)
  341.       {
  342.       case WM_INITDIALOG:
  343.       return TRUE;
  344.  
  345.       case WM_COMMAND:
  346.            switch (wParam)
  347.               {
  348.               case IDOK:
  349.                    i = GetDlgItemText(hWnd, IDDTEXT1, (LPSTR)szDatabase, DBNAME_SZ-1 );
  350.                    szDatabase[i] = '\0';
  351.  
  352.  
  353.                    rc = sqlStart( (char far *) szDatabase,
  354.                                   (struct sqlca far *) &ca );
  355.  
  356.                    if ( ! err( hWnd, rc, &ca ) )
  357.                       {
  358.                        LoadString(hInstanceGV, IDSDBCONNECT, buffer, 512);
  359.                        MessageBox( hWnd, buffer, success, MB_OK );
  360.                        DBSTARTED = TRUE;
  361.                       }
  362.               /* no break */
  363.  
  364.               case IDCANCEL:
  365.                    EndDialog(hWnd, TRUE);
  366.               break;
  367.  
  368.               default:
  369.                    return FALSE;
  370.               }
  371.       break;  /* end of WM_COMMAND */
  372.  
  373.       default:
  374.          return FALSE;
  375.  
  376.       }  /* end switch (message) */
  377.  
  378.    return TRUE;
  379. }
  380.  
  381. BOOL FAR PASCAL QueryDBDlg(hWnd, message, wParam, lParam)
  382. HWND    hWnd;
  383. unsigned    message;
  384. WORD    wParam;
  385. LONG    lParam;
  386. {
  387.    int i;
  388.    short rc;
  389.    char result[20];
  390.  
  391.    switch (message)
  392.       {
  393.       case WM_INITDIALOG:
  394.       return TRUE;
  395.  
  396.       case WM_COMMAND:
  397.            switch (wParam)
  398.               {
  399.               case IDOK:
  400.                    i = GetDlgItemText(hWnd, IDDTEXT1, (LPSTR)szTable, TNAME_SZ-1 );
  401.                    szTable[i] = '\0';
  402.  
  403.                    rc = sqlQuery( (char far *)szTable, (char far *) result,
  404.                                   (struct sqlca far *) &ca );
  405.                    if ( ! err( hWnd, rc, &ca ) )
  406.                       MessageBox( hWnd, result, query, MB_OK );
  407.  
  408.               /* no break */
  409.  
  410.               case IDCANCEL:
  411.                    EndDialog(hWnd, TRUE);
  412.               break;
  413.  
  414.               default:
  415.                    return FALSE;
  416.               }
  417.       break;  /* end of WM_COMMAND */
  418.  
  419.       default:
  420.          return FALSE;
  421.  
  422.       }  /* end switch (message) */
  423.  
  424.    return TRUE;
  425. }
  426.  
  427.  
  428.