meine Anwendung verbindet sich mit der Datenbank mit folgendem Code:
Code: Alles auswählen
 
procedure TForm1.Btn_VerbindenClick(Sender: TObject);
begin
  try
    Statusbar1.SimpleText:='Verbindung zur Datenbank wird aufgebaut...';
    SQLQuery1.Close;
    // Verbindungseinstellungen für die Firebird-Datenbank
    // Werden nur gebraucht wenn noch keine Verbindung besteht
    if not IBConnection1.Connected then
      begin
        IBConnection1.HostName := 'localhost';
        IBConnection1.DatabaseName := 'employee';
        IBConnection1.Username := 'SYSDBA';
        IBConnection1.Password := 'Key4DaBa';
        SQLQuery1.SQL.Text:= 'select * from employee';
        IBConnection1.Connected:= True;
        SQLTransaction1.Active:= True;
        SQLQuery1.Open;
        {
        Um zu verhindern, dass in das Indexfeld 'CUST_NO' falsche Werte eingegeben werden,
        teilen wir Lazarus mit, das wir keine Eingaben in diesem Feld erwarten und
        }
        SQLQuery1.FieldByName('EMP_NO').Required:=false;
        {
        um dem Anwender nicht doch die Möglichkeit zu geben Werte in das
        Indexfeld 'CUST_NO' einzugeben, blenden wir die Spalte im DBGrid komplett aus.
        }
        DBGrid1.Columns[0].Visible:=false;
        //
        Statusbar1.SimpleText:='Verbindung zur Datenbank wurde aufgebaut.';
      end
    else
      Statusbar1.SimpleText:='Verbindung zur Datenbank ist bereits vorhanden.';
  except
    //We could use EDatabaseError which is a general database error, but we're dealing with Firebird/Interbase, so:
    on E: EDatabaseError do
      begin
        MessageDlg('Fehler','Der Verbindungsauf zur Datenbank ist fehlgeschlagen Details: ' + E.Message,mtError,[mbOK],0);
      end;
  end;
end;
 Die Daten werden auch im
Code: Alles auswählen
DBGridAber, wenn ich die Änderungen übernehmen will bekomme ich eine Fehlermeldung das die Daten schreibgeschützt sein.
Wenn ich mittels "FlameRobin" auf die Tabelle zugreife, kann ich problemlos die Daten bearbeiten.
Hier mein Code fürs Speichern:
Code: Alles auswählen
 
procedure TForm1.SaveChanges;
// Saves edits done by user, if any.
   begin
     If SQLQuery1.State in [dsEdit, dsInsert] then
        begin
          try
             if SQLTransaction1.Active then
             // Only if we are within a started transaction;
             // otherwise you get "Operation cannot be performed on an inactive dataset"
                begin
                     SQLQuery1.ApplyUpdates; //Pass user-generated changes back to database...
                     SQLTransaction1.Commit; //... and commit them using the transaction.
                     //SQLTransaction1.Active now is false
                     Statusbar1.SimpleText:='Die Änderungen wurden übernommen.';
                end;
          except
            on E: EDatabaseError do
              begin
                MessageDlg('Fehler', 'Das Speichern der Änderungen hat nicht funktioniert. Details: ' +
                E.Message, mtError, [mbOK], 0);
              end;
          end;
        end;
   end;      
 Ich finde einfach nicht heraus, warum die Daten schreibgeschütz sind.
Wer kann helfen?
Gruß Heiko