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.
Fügen Sie Ihrer INCLUDE-Umgebungsvariablen den Eintrag c:\vendor\visualstudio8\VC\atlmfc\src\atl hinzu.
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.
Erstellen Sie mit UltraLite in Sybase Central in Ihrem neuen Verzeichnis eine Datenbank mit dem Namen ULCustomer.udb und den folgenden Merkmalen.
Weitere Hinweise zur Verwendung von UltraLite in Sybase Central finden Sie unter Datenbank mit dem Assistenten zum Erstellen einer Datenbank erstellen.
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 | Keiner |
Trennen Sie die Verbindung mit der Datenbank in Sybase Central, da sich sonst Ihr Programm nicht mit der Datenbank verbinden kann.
Wählen Sie in Microsoft Visual C++ Datei » Neu.
Wählen Sie im Register Dateien die Option C++-Quellcodedatei.
Speichern Sie die Datei als customer.cpp in Ihrem Übungsverzeichnis.
Beziehen Sie die UltraLite-Bibliotheken ein und verwenden Sie den UltraLite-Namespace.
Kopieren Sie den nachstehenden Code in customer.cpp:
#include <tchar.h> #include <stdio.h> #include "uliface.h" using namespace UltraLite; #define MAX_NAME_LEN 100 ULSqlca Tutca; |
Dieses Codefragment definiert einen UltraLite SQL-Kommunikationsbereich (ULSqlca) namens "Tutca".
Hinweise dazu, wie die Verwendung des UltraLite-Namespace Klassendeklarationen vereinfacht, finden Sie unter Den UltraLite-Namespace verwenden.
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 = UL_TEXT( "UID=DBA;PWD=sql" ) UL_TEXT( ";DBF=C:\\tutorial\\cpp\\ULCustomer.udb" ); |
Weitere Hinweise zu Verbindungsparametern finden Sie unter UltraLite_Connection_iface-Klasse.
Einem Backslash im Namen der Zeichenfolge des Dateispeicherorts muss ein Backslash als Escapezeichen vorangestellt werden.
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 Funktion 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-Funktion eine Überprüfung auf Fehler durchführen oder eine Fehler-Callback-Funktion verwenden.
Nachstehend wird eine Beispiel-Callback-Funktion gezeigt.
ul_error_action UL_GENNED_FN_MOD MyErrorCallBack( SQLCA * Tutca, ul_void * user_data, ul_char * message_param ) { ul_error_action rc; (void) user_data; switch( Tutca->sqlcode ){ // The following error is used for flow control - don't report it here case SQLE_NOTFOUND: rc = UL_ERROR_ACTION_CONTINUE; break; default: if (Tutca->sqlcode >= 0) { // warning or success rc = UL_ERROR_ACTION_DEFAULT; } else { // negative is real error _tprintf( _TEXT( "Error %ld: %s\n" ), Tutca->sqlcode, message_param ); 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.
Weitere Hinweise zur Fehlerbehandlung finden Sie unter Fehlerbehandlung.
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.
Connection * open_conn( DatabaseManager * dm ) { Connection * conn = dm->OpenConnection( Tutca, ConnectionParms ); if( conn == UL_NULL ) { _tprintf( _TEXT("Unable to open existing database.\n") ); } return conn; } |
Implementieren Sie die Hauptmethode, die die folgenden Aufgaben ausführt:
Sie instanziert ein DatabaseManager-Objekt. Alle UltraLite-Objekte werden vom DatabaseManager-Objekt erstellt.
Sie registriert die Fehlerbehandlungsmethode.
Sie öffnet eine Verbindung zu einer Datenbank.
Sie schließt die Verbindung und fährt den Datenbankmanager herunter.
int main() { ul_char buffer[ MAX_NAME_LEN ]; Connection * conn; Tutca.Initialize(); ULRegisterErrorCallback( Tutca.GetCA(), MyErrorCallBack, UL_NULL, buffer, sizeof (buffer)); DatabaseManager * dm = ULInitDatabaseManager( Tutca ); conn = open_conn( dm ); if( conn == UL_NULL ){ dm->Shutdown( Tutca ); Tutca.Finalize(); return 1; } // main processing code to be inserted here dm->Shutdown( Tutca ); Tutca.Finalize(); return 0; } |
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"$(SQLANY11)\SDK\Include" |
Fügen Sie in der makefile-Datei Verzeichnisse in Ihren Bibliothekspfad ein.
LibraryFolders=/LIBPATH:"$(SQLANY11)\UltraLite\win32\386\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 die makefile-Datei aus.
nmake |
Dadurch wird eine Programmdatei mit dem Namen customer.exe erstellt.
Führen Sie die Anwendung aus.
An der Eingabeaufforderung geben Sie customer ein.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |