# TQuery Insert Statement, Fehler bei Memo Feld



## Sapperlot (1. August 2005)

Hallo:
Situation: Habe Access DB mit verschiedenen Tabellen. 
Borland C++ Builder, zugriff auf DB geschieht über TQuery.

An und für sich funktioniert die Sache,  jedoch macht mir irgendwie ein Memo Feld Probleme. Ich schildere kurz die Situation anhand des Source Codes:

/*
    //Auf diesen Quelltextabschnitt beziehe ich mich später.
    // COMMENTED_SOURCE
    Query1->Close();
    Query1->SQL->Clear();
    Query1->SQL->Add("insert into Test");
    Query1->SQL->Add("values Param0)");
    Query1->ParamByName("Param0")->AsMemo = AnsiString("DAJKLDUUJALKDJBBBBBBKLAJDLKJADLKJ");

    Query1->ExecSQL();
    Query1->Close();
    */

//Hier der Problemcode...

    AnsiString Bericht = m_pRecordValues->GetPruefbericht();

    Query1->SQL->Clear();
    Query1->SQL->Add("insert into T02_PRUEFUNG");
    Query1->SQL->Add("values Param0, aram1, aram2, aram3, aram4, aram5, aram6, aram7, aram8)");
    Query1->ParamByName("Param0")->AsInteger = maxID;
    Query1->ParamByName("Param1")->AsDateTime = DatumZeit->CurrentDate();
    Query1->ParamByName("Param2")->AsDateTime = DatumZeit->CurrentTime();
    Query1->ParamByName("Param3")->AsBoolean = m_pRecordValues->GetPruefungBestanden();
//Es wird zwischen String und Memo unterschieden, da Memo Datenmüll in die DB schreibt, wenn der Bericht == "";    
if(m_pRecordValues->GetPruefbericht().Length()<20)
      Query1->ParamByName("Param4")->AsString = Bericht;
    else
       Query1->ParamByName("Param4")->AsMemo = Bericht; 
... RESTLICHE PARAMS WERDEN ÜBERGEBEN...
    Query1->ExecSQL();
    Query1->Close();

*Das Problem:*
Im Projekt Projektname.exe ist eine Exception der Klasse EDBEngine aufgetreten.
Meldung: 'Allgemeiner SQL-Fehler
[Microsoft ][ODBC Microsoft Access Driver] Die Zeichenfolgedaten wurden rechts abgeschnitten. (null)'.
Prozeß wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen.

Im Debugger ist jedoch zu sehen, dass Bericht sehr wohl daten enthält, und auch richtig formatiert ist. Der Fehler kommt auch, wenn einfach ein AnsiString("Hallo Welt"); übergeben wird.

*Was ist bekannt?*
Nach dem ich die Datenbank neu gestartet habe, kann ich einen Datensatz in die DB schreiben. nachdem ich nochmals einen Datensatz in die Tabelle schreiben möchte kommt obiger Fehler.
Früher hat das Ding tadellos funktioniert. Es muss mit einer Änderung zusammenhängen, die ich anderweiteig gemacht habe.
Komisch ist:
Wenn ich den COMMENTED_SOURCE einkommentiere (Er schreibt in eine andere Tabelle in der gleichen DB sinnlos Zeichen rein, aber ebenfalls als Memo) funktioniert das untere Insert Satement beliebig oft.

Ich habe das Gefühl, als sei in dem Query noch irgendwelcher Müll drin, aber ich rufe ja Query1->SQL->Clear(); auf.
Gibt es noch andere Befehle, die das Query wieder in einen "reinen" Zustand versetzen.
Kann mir jemand obiges Phänomen erklären?
Muss Query1->Close eigentlich nur nach Select Statements aufgerufen werden, oder überhaupt nicht. Ich sehe gar keine Veränderung, ob ich es nun aufrufe, oder nicht.

Danke,

Gruß, Basti


----------



## Leo Freitag (15. November 2006)

Hi Sapperlot,

ich mühe mich ebenfalls seit geraumer Zeit, um per Borland BDE Daten in ein Memofeld einer Access-Datenbank zu schreiben.

Habe diverse Ansätze probiert. Leider war bisher keiner dabei, der stabil genug lief.

Hast Du Dein Probelm von damals lösen können? Wenn Du Interesse an Erfahrungsaustausch hast, gebe Nachricht.

Gruß
Leo


----------

