    #define _SQL_OS_DOS386

    #line 1 "dbcore.sqp"

    // Embeded C++ Watcom SQL Database core

    // $Id: dbcore.sqp 1.1 1994/11/02 10:53:36 leon Exp leon $

    #include "dbcore.hpp"

    #include <stdio.h>

    #include <string.h>

    #include <iostream.h>

    #include <sqldef.h>

    /////////////////////////////////////////////////////////////

    /*
    EXEC SQL INCLUDE SQLCA;
    */
    #line 14 "dbcore.sqp"

    #include "sqlca.h"

    #ifdef __cplusplus

        extern "C" {
    #endif

    extern SQLCA sqlca;
    extern SQLCA _fd_ *sqlcaptr;
    extern short int _ESQL_Version2_;
    extern short int _ESQL_OS_DOS386_;
    #ifdef __cplusplus

        }
    #endif

    #include "sqlda.h"

    #line 14 "dbcore.sqp"

    static struct {
            char        _sqlfar *userid;
            char        _sqlfar *password;
            short int   num;
            SQLCA       _fd_ * _sqlfar *sqlca;
            short int   _sqlfar *sqlpp_version;
            short int   _sqlfar *sqlpp_os;
    }  __SQLV_dbcore_1 = { SQLFARNULL, SQLFARNULL, 0, &sqlcaptr, &_ESQL_Version2_, &_ESQL_OS_DOS386_ };
    static char  __SQLV_dbcore_2[] = "BEGIN SUBTRANSACTION";
    static char  __SQLV_dbcore_3[] = "BEGIN SUBTRANSACTION";
    static char  __SQLV_dbcore_4[] = "ROLLBACK SUBTRANSACTION";

    /*
    EXEC SQL INCLUDE SQLDA;
    */
    #line 15 "dbcore.sqp"

    static a_dblib_info _fd_ *DBParms;
    SQLDA *SqlDA;

    /*
    EXEC SQL BEGIN DECLARE SECTION;
    */
    #line 20 "dbcore.sqp"

     char cursname[20];
     /*
    EXEC SQL END DECLARE SECTION;
    */
    #line 22 "dbcore.sqp"

    /** {secret} **/
    #define CheckSQL(DB_SQL_ERROR) \

       if (SQLCODE != SQLE_NOERROR) \
          ErrorHandler(DB_SQL_ERROR)

    /**
     ** Nastavi generator izpisa napake na funkcijo /userHandler/
     **/
    void Database::SetErrorHandler (void (* userHandler) (int))
    {
        ErrorHandler = userHandler;
    }

    void defaultHandler (int err)
    {
      char buffer[200];

      if (err > 0)
        {
          sqlerror_message (&sqlca, buffer, sizeof (buffer));
          cout << "SQL Napaka: " << buffer << endl;
        }
    }

    void (*(Database::ErrorHandler)) (int err) = defaultHandler;

    /**
     ** Kreira nov dostop do zunanje baze podatkov
     **/
    Database::Database ()
    {
      DBOpen = FALSE;
      if (!db_init (&sqlca))
        {
          cout << "Napaka pri inicializaciji SQLCA\n";
        }
    }

    /**
     ** Odpre bazo podatkov z imenom uporabnika /userName/, "sifro
     ** /password/ in "startnim stringom /startStr/
     **/
    BOOL Database::Open (const char *userName, const char *password,
                         const char *startStr)
    {
      String paramStr;

      paramStr += userName;
      paramStr += String (",");
      paramStr += password;

      DBParms = db_build_parms (&sqlca, (char *)(const char *)paramStr,
                                (char *)startStr);

      CheckSQL (SQLE_UNABLE_TO_CONNECT);

      db_parms_connect (&sqlca, DBParms);

      CheckSQL (SQLE_UNABLE_TO_CONNECT);

      DBOpen = TRUE;

      return (TRUE);
    }

    /** Testira: Ali je baza odprta? **/
    BOOL Database::IsOpen ()
    {
      if (DBOpen == TRUE)
        return TRUE;
      else
        return FALSE;
    }

    /** Zapre bazo **/
    void Database::Close ()
    {
      /*
    EXEC SQL DISCONNECT;
    */
    #line 113 "dbcore.sqp"

    #line 113 "dbcore.sqp"

    	{
    #line 113 "dbcore.sqp"

    	db_disconnect( &__SQLV_dbcore_1, SQLNULL );
    #line 113 "dbcore.sqp"

    	}

      db_destroy_parms (&sqlca, DBParms);
      db_fini (&sqlca);
      DBOpen = FALSE;
    }

    /** Vrne ime baze podatkov **/
    const char * Database::GetDatabaseName ()
    {
      return (char _fd_ *) DBParms->database_name;
    }

    /*
    EXEC SQL WHENEVER SQLERROR {ErrorHandler(SQLE_ERROR); return (FALSE);};
    */
    #line 126 "dbcore.sqp"

    /** naredi Commit v bazo **/
    BOOL Database::Commit()
    {
      /*
    EXEC SQL COMMIT WORK;
    */
    #line 131 "dbcore.sqp"

    #line 131 "dbcore.sqp"

    	{
    #line 131 "dbcore.sqp"

    	db_commit( &__SQLV_dbcore_1, 0 );
    #line 131 "dbcore.sqp"

    if( SQLCODE < 0 ) {ErrorHandler(SQLE_ERROR); return (FALSE);};
    #line 131 "dbcore.sqp"

    	}

      return TRUE;
    }

    /** Izvede Rollback na celotni transakciji **/
    BOOL Database::Rollback()
    {
      /*
    EXEC SQL ROLLBACK WORK;
    */
    #line 138 "dbcore.sqp"

    #line 138 "dbcore.sqp"

    	{
    #line 138 "dbcore.sqp"

    	db_rollback( &__SQLV_dbcore_1, 0 );
    #line 138 "dbcore.sqp"

    if( SQLCODE < 0 ) {ErrorHandler(SQLE_ERROR); return (FALSE);};
    #line 138 "dbcore.sqp"

    	}

      return TRUE;
    }

    /** Ozna"ci podtransakcijo **/
    BOOL Database::BeginSubTrans()
    {
      /*
    EXEC SQL BEGIN SUBTRANSACTION;
    */
    #line 145 "dbcore.sqp"

    #line 145 "dbcore.sqp"

    	{
    #line 145 "dbcore.sqp"

    	{
    #line 145 "dbcore.sqp"

    	db_execute_imm( &__SQLV_dbcore_1, __SQLV_dbcore_2, 2 );
    #line 145 "dbcore.sqp"

    if( SQLCODE < 0 ) {ErrorHandler(SQLE_ERROR); return (FALSE);};
    #line 145 "dbcore.sqp"

    	}
    #line 145 "dbcore.sqp"

    	}

      return (TRUE);
    }

    /** Kon"ca podtransakcijo **/
    BOOL Database::EndSubTrans()
    {
      /*
    EXEC SQL BEGIN SUBTRANSACTION;
    */
    #line 152 "dbcore.sqp"

    #line 152 "dbcore.sqp"

    	{
    #line 152 "dbcore.sqp"

    	{
    #line 152 "dbcore.sqp"

    	db_execute_imm( &__SQLV_dbcore_1, __SQLV_dbcore_3, 2 );
    #line 152 "dbcore.sqp"

    if( SQLCODE < 0 ) {ErrorHandler(SQLE_ERROR); return (FALSE);};
    #line 152 "dbcore.sqp"

    	}
    #line 152 "dbcore.sqp"

    	}

      return (TRUE);
    }

    /** Unici podtransakcijo **/
    BOOL Database::RollbackSubTrans()
    {
      /*
    EXEC SQL ROLLBACK SUBTRANSACTION;
    */
    #line 159 "dbcore.sqp"

    #line 159 "dbcore.sqp"

    	{
    #line 159 "dbcore.sqp"

    	{
    #line 159 "dbcore.sqp"

    	db_execute_imm( &__SQLV_dbcore_1, __SQLV_dbcore_4, 2 );
    #line 159 "dbcore.sqp"

    if( SQLCODE < 0 ) {ErrorHandler(SQLE_ERROR); return (FALSE);};
    #line 159 "dbcore.sqp"

    	}
    #line 159 "dbcore.sqp"

    	}

      return (TRUE);
    }

    /** Direktmo izvede ukaz SQL, ki ne vra"ca rezultata **/
    BOOL Database::ExecuteSQL (const char *sqlStm)
    {
      /*
    EXEC SQL BEGIN DECLARE SECTION;
    */
    #line 166 "dbcore.sqp"

     char *buffer;
     /*
    EXEC SQL END DECLARE SECTION;
    */
    #line 168 "dbcore.sqp"

      buffer = (char *)sqlStm;

      /*
    EXEC SQL EXECUTE IMMEDIATE :buffer;
    */
    #line 172 "dbcore.sqp"

    #line 172 "dbcore.sqp"

    	{
    #line 172 "dbcore.sqp"

    	db_execute_imm( &__SQLV_dbcore_1, buffer, 1 );
    #line 172 "dbcore.sqp"

    if( SQLCODE < 0 ) {ErrorHandler(SQLE_ERROR); return (FALSE);};
    #line 172 "dbcore.sqp"

    	}

      return (TRUE);
    }

    #if 0

    main ()
    {
      Database hw;

      hw.Open ("dba", "sql", "");

      if (hw.IsOpen())
        cout << "Baza je odprta\n";
      else
        cout << "Baza ni odprta\n";

      hw.ExecuteSQL("insert into leon values ('A')");

      hw.Commit();
      hw.Close ();
      return (0);
    }

    #endif

syntax highlighted by Code2HTML, v. 0.9.1