Announcement

Collapse
No announcement yet.

Problem bei Insert - nichts wird eingefügt

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem bei Insert - nichts wird eingefügt

    Hallo,

    ich habe das Probleme, das mit IBX das Ausführen eines SQL-Insert mal funktioniert und mal nicht und ich keinen Plan habe, wo ich suchen könnte.
    Ich habe das Ausführen von SQL-Code in einer DAO-Klasse gekapselt.

    Ein Beispiel, wo es nicht funktioniert:

    SupplierArticle := TSupplierArticle.Create;
    SupplierArticle.ArticleId := GetGUID;
    SupplierArticle.Supplier := SupplierFrame.Supplier.SupplierId;
    frmEditSupplierArticleForm := TEditSupplierArticleForm.Create(Self);
    frmEditSupplierArticleForm.Supplier := SupplierFrame.Supplier;
    frmEditSupplierArticleForm.SupplierArticle := SupplierArticle;
    if frmEditSupplierArticleForm.ShowModal = mrOK then
    begin
    SupplierArticle := frmEditSupplierArticleForm.SupplierArticle;
    ApplicationContext.DataBaseContext.Connection.Star tTransaction;
    try
    SupplierArticleDAO.Insert(SupplierArticle);
    ApplicationContext.DataBaseContext.Connection.Comm it;
    except
    on E: Exception do
    begin
    with ApplicationContext do
    begin
    if Assigned(Logger) then Logger.LogException('TZASMainForm', 'NewSupplierActionExecute', E);
    DataBaseContext.Connection.Rollback;
    end;
    end;
    end;
    end;

    Ich rufe das SupplierArticleDAO.Insert(SupplierArticle); auch an anderer Stelle auf, aber da wird es einwandfrei ausgeführt.
    Ein fast identischer Code, der ein Update bewirkt, funktioniert beispielsweise überall.

    Ich hab mal angenommen, das es an der Transaktion liegt, aber einen konkreten Fall kann ich mir da auch nicht vorstellen.

    Hat jemand vielleicht ne Kristallkugel zu verkaufen :-)

    Gruß,
    Marc

  • #2
    Achso, ein Fehler wird nicht ausgelöst, alles läuft einwandfrei durch, aber es wird nichts in die Datenbank geschrieben. Die Ausführung liefert als Ergebnis für RowsAffected eine 1 zurück, was ja korrekt ist, falls es in die Datenbank eingefügt werden würde.

    So wird die Connection erzeugt:<br>

    constructor TInterBaseConnection.Create(AliasName, LoginName,
    Password: string);
    begin
    FIBDataBase := TIBDataBase.Create(nil);
    FIBDataBase.DatabaseName := AliasName;
    FIBDataBase.LoginPrompt := False;
    FIBDataBase.Params.Add ('user_Name='+LoginName);
    FIBDataBase.Params.Add ('password='+Password);
    FIBTransaction := TIBTransaction.Create(nil);
    FIBTransaction.DefaultDatabase := FIBDataBase;
    FIBTransaction.DefaultAction := taCommit;
    FIBTransaction.AutoStopAction := saCommit;
    FIBDataBase.DefaultTransaction := FIBTransaction;
    try
    FIBDataBase.Connected := True;
    except
    on E: EIBInterBaseError do begin
    raise EConnectionError.Create('Could not connect to database with alias "'+AliasName+'"! Error: '+E.Message);
    end;
    end;
    Busy := False;
    end

    Comment

    Working...
    X