Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 (Deutsch) » UltraLite - C- und C++-Programmierung » Praktische Einführungen » Praktische Einführung: Erstellen einer Windows-Anwendung mit der C++-API

 

Lektion 1: Erstellen und Verbinden mit einer Datenbank

Die erste Aufgabe ist die Erstellung einer lokalen UltraLite-Datenbank. Sie schreiben und kompilieren eine C++-Anwendung und führen sie aus. Diese Anwendung greift auf die von Ihnen erstellte Datenbank zu.

 UltraLite-Datenbank erstellen
  1. Setzen Sie die VCINSTALLDIR-Umgebungsvariable auf das Stammverzeichnis der Visual C++-Installation, wenn die Variable noch nicht vorhanden sein sollte.

  2. Fügen Sie %VCINSTALLDIR%\VC\atlmfc\src\atl Ihrer INCLUDE-Umgebungsvariablen hinzu.

  3. Erstellen Sie ein Verzeichnis, das die Dateien enthalten soll, mit denen Sie während dieser praktischen Einführung arbeiten.

    In dieser praktischen Einführung wird vorausgesetzt, dass dieses Verzeichnis c:\tutorial\cpp\ lautet. Wenn Sie ein Verzeichnis mit einem anderen Namen erstellen, müssen Sie dieses Verzeichnis anstelle von c:\tutorial\cpp\ verwenden.

  4. Erstellen Sie mit UltraLite in Sybase Central in Ihrem neuen Verzeichnis eine Datenbank mit dem Namen ULCustomer.udb und den Standardmerkmalen.

  5. Fügen Sie eine Tabelle mit dem Namen ULCustomer zur Datenbank hinzu. Verwenden Sie die folgenden Spezifikationen für die Tabelle ULCustomer:

    Spaltenname Datentyp (Größe) Spalte lässt NULL zu Standardwert Primärschlüssel
    cust_id integer Nein autoincrement aufsteigend
    cust_name varchar(30) Nein Keine
  6. Trennen Sie die Verbindung mit der Datenbank in Sybase Central, da sich sonst Ihr Programm nicht mit der Datenbank verbinden kann.

 Herstellen einer Verbindung mit der UltraLite-Datenbank
  1. Klicken Sie in Microsoft Visual C++ auf Datei » Neu.

  2. Klicken Sie auf der Registerkarte Dateien auf C++-Quellcodedatei.

  3. Speichern Sie die Datei als customer.cpp in Ihrem Übungsverzeichnis.

  4. Beziehen Sie die UltraLite-Bibliotheken ein.

    Kopieren Sie den nachstehenden Code in customer.cpp:

    #include <tchar.h>
    #include <stdio.h>
    #include "ulcpp.h"
    #define MAX_NAME_LEN 100
  5. Definieren Sie Verbindungsparameter für die Verbindung zur Datenbank.

    In diesem Codefragment sind die Verbindungsparameter festkodiert. In einer echten Anwendung werden diese Speicherorte gegebenenfalls zur Laufzeit definiert.

    Kopieren Sie den nachstehenden Code in customer.cpp.

    static ul_char const * ConnectionParms =
        "UID=DBA;PWD=sql;DBF=C:\\tutorial\\cpp\\ULCustomer.udb";
    Hinweis

    Einem Backslash im Namen der Zeichenfolge des Dateispeicherorts muss ein Backslash als Escapezeichen vorangestellt werden.

  6. Legen Sie eine Methode zur Behandlung von Datenbankfehlern in der Anwendung fest.

    UltraLite bietet einen Callback-Mechanismus, um die Anwendung über Fehler zu informieren. In einer Entwicklungsumgebung kann diese Methode als Mechanismus für die Behandlung nicht erwarteter Fehler nützlich sein. Eine Produktionsanwendung umfasst normalerweise Code, der alle häufig vorkommenden Fehlersituationen verarbeiten kann. Eine Anwendung kann nach jedem Aufruf einer UltraLite-Methode eine Überprüfung auf Fehler durchführen oder eine Fehler-Callback-Funktion verwenden.

    Nachstehend wird eine Beispiel-Callback-Funktion gezeigt:



    ul_error_action UL_CALLBACK_FN MyErrorCallBack(
        const ULError *  error,
        ul_void *        user_data )
    {
        ul_error_action rc;
        an_sql_code code = error->GetSQLCode();
        
        (void) user_data;
    
        switch( code ){
            // The following error is used for flow control - don't report it here
            case SQLE_NOTFOUND:
                rc = UL_ERROR_ACTION_CONTINUE;  
            break;
    
            default:
                if (code >= 0) { // warning or success
                    rc = UL_ERROR_ACTION_DEFAULT; 
                } else { // negative is real error
                    ul_char etext[ MAX_NAME_LEN ];
                    error->GetString( etext, MAX_NAME_LEN );
                    _tprintf( "Error %ld: %s\n", code, etext );
                    rc = UL_ERROR_ACTION_CANCEL;
                }
            break;
         }
        return rc;
     }

    In UltraLite wird der Fehler SQLE_NOTFOUND häufig benutzt, um den Verarbeitungsfluss der Anwendung zu steuern. Der Fehler markiert das Ende einer Schleife in einer Ergebnismenge. Der oben dargestellte kodierte allgemeine Fehler-Handler gibt keine Fehlermeldung für diese Fehlerbedingung aus.

  7. Definieren Sie eine Methode zum Öffnen einer Verbindung mit einer Datenbank.

    Wenn die Datenbankdatei nicht vorhanden ist, wird eine Fehlermeldung angezeigt. Andernfalls wird eine Verbindung hergestellt.

    static ULConnection * open_conn( void ) 
    {
        ULConnection * conn = ULDatabaseManager::OpenConnection( ConnectionParms );
        if( conn == UL_NULL ) {
          _tprintf("Unable to open existing database.\n");
       }
      return conn;
    }
  8. Implementieren Sie die Hauptmethode, die die folgenden Aufgaben ausführt:

    • Sie registriert die Fehlerbehandlungsmethode.

    • Sie öffnet eine Verbindung zu einer Datenbank.

    • Sie schließt die Verbindung und beendet den Datenbankmanager.



    int main() {
        ULConnection *	conn;
    
        ULDatabaseManager::Init();  
        ULDatabaseManager::SetErrorCallback( MyErrorCallBack, NULL );
    
        conn = open_conn();
        if ( conn == UL_NULL ) {
            ULDatabaseManager::Fini();
            return 1;  
        }
    
        // Main processing code goes here ...
        do_insert( conn );
        do_select( conn );
        do_sync( conn );
    
        conn->Close();
        ULDatabaseManager::Fini();
        return 0;
    }
  9. Kompilieren und verknüpfen Sie die Quelldatei.

    Die Methode, die Sie benutzen, um die Quelldatei zu kompilieren, hängt von Ihrem Compiler ab. Die nachfolgenden Anweisungen gelten für den Microsoft Visual C++-Befehlszeilen-Compiler mit einer makefile-Datei:

    • Öffnen Sie eine Eingabeaufforderung und wechseln Sie zum Verzeichnis der praktischen Einführung.

    • Erstellen Sie eine makefile-Datei mit dem Namen makefile.

    • Fügen Sie in der makefile-Datei Verzeichnisse in Ihren include-Pfad ein.

      IncludeFolders=/I"$(SQLANY12)\SDK\Include"
    • Fügen Sie in der makefile-Datei Verzeichnisse in Ihren Bibliothekspfad ein.

      LibraryFolders=/LIBPATH:"$(SQLANY12)\UltraLite\Windows\x86\Lib\vs8"
    • Fügen Sie in der makefile-Datei Bibliotheken zu Ihren Linker-Optionen hinzu.

      Libraries=ulimp.lib

      Die UltraLite-Laufzeitbibliothek heißt ulimp.lib.

    • Legen Sie in der makefile-Datei Compiler-Optionen fest. Die Optionen müssen in einer Zeile eingegeben werden.

      CompileOptions=/c /nologo /W3 /Od /Zi /DWIN32 /DUL_USE_DLL
    • In der makefile-Datei fügen Sie eine Anweisung für das Linken der Anwendung hinzu:

      customer.exe: customer.obj
         link /NOLOGO /DEBUG customer.obj $(LibraryFolders) $(Libraries)
    • In der makefile-Datei fügen Sie eine Anweisung für die Kompilierung der Anwendung hinzu.

      customer.obj: customer.cpp
         cl $(CompileOptions) $(IncludeFolders) customer.cpp
    • Führen Sie vsvars32.bat aus.

      %VCINSTALLDIR%\Tools\vsvars32.bat
    • Führen Sie die makefile-Datei aus.

      nmake

      Dadurch wird eine Programmdatei mit dem Namen customer.exe erstellt.

  10. Führen Sie die Anwendung aus.

    Geben Sie an einer Eingabeaufforderung customer ein.

    Die Anwendung stellt eine Verbindung mit der Datenbank her und trennt diese anschließend. Die Anwendung wird erfolgreich ausgeführt, wenn keine Fehlermeldungen angezeigt werden.

 Siehe auch