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

SQL Anywhere 12.0.0 (Deutsch) » UltraLite - C- und C++-Programmierung » Anwendungsentwicklung » Anwendungen mit der UltraLite C++-API entwickeln » Mit SQL-Anweisungen auf Daten zugreifen

 

Datenmanipulation: Einfügen, Löschen und Aktualisieren

In UltraLite können Sie die SQL-Datenmanipulation mit der ExecuteStatement-Methode (Mitglied der ULPreparedStatement-Klasse) durchführen. Siehe ULPreparedStatement-Klasse.

Parameter in vorbereiteten Anweisungen referenzieren

UltraLite kennzeichnet Anfrageparameter mit dem ?-Zeichen. Für eine INSERT, UPDATE oder DELETE-Anweisung wird jedes ? entsprechend seiner Stellung in der vorbereiteten Anweisung bewertet. Das erste ? wird z.B. als Parameter 1 bewertet, das zweite als Parameter 2.

 ♦  So fügen Sie eine Zeile ein
  1. Deklarieren Sie ein ULPreparedStatement mit dem folgenden Code:

    ULPreparedStatement * prepStmt;
  2. Bereiten Sie eine SQL-Anweisung für die Ausführung vor.

    Der folgende Code bereitet eine INSERT-Anweisung für die Ausführung vor:

    prepStmt = conn->PrepareStatement("INSERT INTO MyTable(MyColumn1) VALUES (?)");
  3. Prüfen Sie bei der Vorbereitung der Anweisung, ob Fehler auftreten.

    Beispiel: Der folgende Code ist nützlich, wenn Sie eine Prüfung auf SQL-Syntaxfehler vornehmen:

    if( prepStmt == NULL ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error
        return;
    }
  4. Legen Sie Werte zum Ersetzen der ?- Zeichen in der vorbereiteten Anweisung fest.

    Der folgende Code legt das ?- Zeichen während der Überprüfung auf Fehler mit "some value" fest. Beispiel: Ein Fehler wird abgefangen, wenn die Parameterordinalzahl außerhalb des zulässigen Bereichs für die Anzahl der Parameter in der vorbereiteten Anweisung liegt.

    if( !prepStmt->SetParameterString(1, "some value") ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error
        return;
    }
  5. Führen Sie die vorbereitete Anweisung aus und fügen Sie Daten in die Datenbank ein.

    Der nachstehende Code prüft, ob Fehler vorhanden sind, die nach dem Ausführen der Anweisung auftreten könnten. Beispiel: Ein Fehler wird zurückgegeben, wenn ein doppelter Indexwert in einem eindeutigen Index gefunden wird.



    bool success;
    success = prepStmt->ExecuteStatement();
    if( !success ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error
    } else {
        // Use the following line if you are interested in the number of rows inserted ...
        ul_u_long rowsInserted = prepStmt->GetRowsAffectedCount();
    }
  6. Bereinigen Sie die Ressourcen der vorbereiteten Anweisung.

    Der folgende Code gibt die Ressourcen frei, die vom Objekt der vorbereiteten Anweisung verwendet werden. Auf dieses Objekt darf nicht mehr zugegriffen werden, nachdem die Close-Methode aufgerufen wird.

    prepStmt->Close();
  7. Schreiben Sie die Daten in der Datenbank fest.

    Der folgende Code speichert die Daten in der Datenbank und verhindert Datenverlust. Die Daten aus Schritt 5 gehen verloren, wenn die Geräteanwendung unerwartet abbricht, bevor die Anwendung einen Commit-Aufruf abschließen kann.

    conn->Commit();
 ♦  So löschen Sie eine Zeile
  1. Deklarieren Sie ein ULPreparedStatement mit dem folgenden Code:

    ULPreparedStatement * prepStmt;
  2. Bereiten Sie eine SQL-Anweisung für die Ausführung vor.

    Der folgende Code bereitet eine DELETE-Anweisung für die Ausführung vor:

    prepStmt = conn->PrepareStatement("DELETE FROM MyTable(MyColumn1) VALUES (?)");
  3. Prüfen Sie bei der Vorbereitung der Anweisung, ob Fehler auftreten.

    Beispiel: Der folgende Code ist nützlich, wenn Sie eine Prüfung auf SQL-Syntaxfehler vornehmen:

    if( prepStmt == NULL ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error
        return;
    }
  4. Legen Sie Werte zum Ersetzen der ?- Zeichen in der vorbereiteten Anweisung fest.

    Der folgende Code legt das ?- Zeichen während der Überprüfung auf Fehler mit 7 fest. Beispiel: Ein Fehler wird abgefangen, wenn die Parameterordinalzahl außerhalb des zulässigen Bereichs für die Anzahl der Parameter in der vorbereiteten Anweisung liegt.

    ul_s_long value_to_delete = 7;
    if( !prepStmt->SetParameterInt(1, value_to_delete) ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error.
        return;
    }
  5. Führen Sie die vorbereitete Anweisung aus und löschen Sie die Daten aus der Datenbank.

    Der nachstehende Code prüft, ob Fehler vorhanden sind, die nach dem Ausführen der Anweisung auftreten könnten. Zum Beispiel wird ein Fehler zurückgegeben, wenn Sie versuchen, eine Zeile zu löschen, auf die ein Fremdschlüssel verweist.



    bool success;
    success = prepStmt->ExecuteStatement();
    if( !success ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error
    } else {
        // Use the following line if you are interested in the number of rows deleted ...
        ul_u_long rowsDeleted = prepStmt->GetRowsAffectedCount();
    }
  6. Bereinigen Sie die Ressourcen der vorbereiteten Anweisung.

    Der folgende Code gibt die Ressourcen frei, die vom Objekt der vorbereiteten Anweisung verwendet werden. Auf dieses Objekt darf nicht mehr zugegriffen werden, nachdem die Close-Methode aufgerufen wird.

    prepStmt->Close();
  7. Schreiben Sie die Daten in der Datenbank fest.

    Der folgende Code speichert die Daten in der Datenbank und verhindert Datenverlust. Die Daten aus Schritt 5 gehen verloren, wenn die Geräteanwendung unerwartet abbricht, bevor die Anwendung einen Commit-Aufruf abschließen kann.

    conn->Commit();
 ♦  So aktualisieren Sie eine Zeile
  1. Deklarieren Sie ein ULPreparedStatement mit dem folgenden Code:

    ULPreparedStatement * prepStmt;
  2. Bereiten Sie eine SQL-Anweisung für die Ausführung vor.

    Der folgende Code bereitet eine UPDATE-Anweisung für die Ausführung vor:

    prepStmt = conn->PrepareStatement("UPDATE MyTable SET MyColumn = ? WHERE MyColumn = ?");
  3. Prüfen Sie bei der Vorbereitung der Anweisung, ob Fehler auftreten.

    Beispiel: Der folgende Code ist nützlich, wenn Sie eine Prüfung auf SQL-Syntaxfehler vornehmen:

    if( prepStmt == NULL ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error
        return;
    }
  4. Legen Sie Werte zum Ersetzen der ?- Zeichen in der vorbereiteten Anweisung fest.

    Der folgende Code legt das ?- Zeichen während der Überprüfung auf Fehler auf Ganzzahlwerte fest. Beispiel: Ein Fehler wird abgefangen, wenn die Parameterordinalzahl außerhalb des zulässigen Bereichs für die Anzahl der Parameter in der vorbereiteten Anweisung liegt.



    bool success;
    success = prepStmt->SetParameterInt( 1, 25 );
    if( success ) {
        success = prepStmt->SetParameterint( 2, -1 );
    }
    if( !success ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error
        return;
    }
  5. Führen Sie die vorbereitete Anweisung aus und aktualisieren Sie die Daten in der Datenbank.

    Der nachstehende Code prüft, ob Fehler vorhanden sind, die nach dem Ausführen der Anweisung auftreten könnten. Beispiel: Ein Fehler wird zurückgegeben, wenn ein doppelter Indexwert in einem eindeutigen Index gefunden wird.

    success = prepStmt->ExecuteStatement();
    if( !success ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error
    } else {
        // if you are interested in the number of rows updated ...
        ul_u_long rowsUpdated = prepStmt->GetRowsAffectedCount();
    }
  6. Bereinigen Sie die Ressourcen der vorbereiteten Anweisung.

    Der folgende Code gibt die Ressourcen frei, die vom Objekt der vorbereiteten Anweisung verwendet werden. Auf dieses Objekt darf nicht mehr zugegriffen werden, nachdem die Close-Methode aufgerufen wird.

    prepStmt->Close();
  7. Schreiben Sie die Daten in der Datenbank fest.

    Der folgende Code speichert die Daten in der Datenbank und verhindert Datenverlust. Die Daten aus Schritt 5 gehen verloren, wenn die Geräteanwendung unerwartet abbricht, bevor die Anwendung einen Commit-Aufruf abschließen kann.

    conn->Commit();