Hallo
ich bekomme keine Fehlermeldung wenn in der DB ein Datensatz direkt gelöscht oder geändert wurde und ich ein Update über mein Programm machen
so sieht meine SP aus
CREATE PROCEDURE inserad_objekte_update
@NAME nvarchar(50),
@BESCHREIBUNG text,
@ERSCHEINUNG text,
@AUFLAGE int,
@EINZELPREIS money,
@VERBREITUNGSGEBIET text,
@HEFTFORMAT_BREITE int,
@HEFTFORMAT_HOEHE int,
@SATZSPIEGEL_BREITE int,
@SATZSPIEGEL_HOEHE int,
@VERTRIEB text,
@GELOESCHT bit,
@USER_NAME nvarchar(50),
@USER_TXT text,
@USER_DATE datetime,
@ID int
AS
SET NOCOUNT ON
BEGIN TRANSACTION
UPDATE [inserad_objekte]
SET
[NAME] = @NAME,
[BESCHREIBUNG] = @BESCHREIBUNG,
[ERSCHEINUNG] = @ERSCHEINUNG,
[AUFLAGE] = @AUFLAGE,
[EINZELPREIS] = @EINZELPREIS,
[VERBREITUNGSGEBIET] = @VERBREITUNGSGEBIET,
[HEFTFORMAT_HOEHE] = @HEFTFORMAT_BREITE,
[HEFTFORMAT_BREITE] = @HEFTFORMAT_HOEHE,
[SATZSPIEGEL_HOEHE] = @SATZSPIEGEL_BREITE,
[SATZSPIEGEL_BREITE] = @SATZSPIEGEL_HOEHE,
[VERTRIEB] = @VERTRIEB,
[GELOESCHT] = @GELOESCHT,
[USER_NAME] = @USER_NAME,
[USER_TXT] = @USER_TXT,
[USER_DATE] = @USER_DATE
WHERE
[ID] = @ID
IF ( @@ERROR = 0)
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
GO
und so meine Updatecommand
/************************************************** ****************************
//Constructor
constructor TObjekte.Create;
begin
inherited Create;
// TODO: Hier die Konstruktorlogik einfügen
//Adapter erzeugen und Konfigurieren
FAdapter := OleDbDataAdapter.Create('SELECT * FROM inserad_objekte WHERE GELOESCHT = 0' , gDatabaseInserad.Connection);
FAdapter.ContinueUpdateOnError := True;
FAdapter.UpdateCommand := FUpdateCommand;
FAdapter.InsertCommand := FInsertCommand;
FAdapter.DeleteCommand := FDeleteCommand;
//Wenn DataTable im DataSet schon vorhanden dann löschen
if gDataSetInserad.Tables.CanRemove(gDataSetInserad.T ables['inserad_objekte']) then
begin
gDataSetInserad.Tables['inserad_objekte'].Clear;
end;
//Ins gDataSetInserad füllen
gDatabaseInserad.Open;
FAdapter.FillSchema(gDataSetInserad, SchemaType.Mapped, 'inserad_objekte');
FAdapter.Fill(gDataSetInserad, 'inserad_objekte');
gDatabaseInserad.Close;
end;
//################################################## ############################
//################################################## ############################
// Commands
//################################################## ############################
//################################################## ############################
//************************************************** ****************************
//Update Command
function TObjekte.FUpdateCommand() : OleDbCommand;
var
FUpdPar : OleDbParameter;
begin
//Update Command
Result := OleDbCommand.Create;
Result.CommandType := CommandType.StoredProcedure;
Result.CommandText := 'inserad_objekte_update';
Result.Connection := gDatabaseInserad.Connection;
//Update CommadParameter
Result.Parameters.Clear;
Result.Parameters.Add('@NAME', OleDbType.VarWChar, 50, 'NAME');
Result.Parameters.Add('@BESCHREIBUNG', OleDbType.LongVarChar, 16, 'BESCHREIBUNG');
Result.Parameters.Add('@ERSCHEINUNG', OleDbType.LongVarChar, 16, 'ERSCHEINUNG');
Result.Parameters.Add('@AUFLAGE', OleDbType.Integer, 4, 'AUFLAGE');
Result.Parameters.Add('@EINZELPREIS', OleDbType.Decimal, 9, 'EINZELPREIS');
Result.Parameters.Add('@VERBREITUNGSGEBIET', OleDbType.LongVarChar, 16, 'VERBREITUNGSGEBIET');
Result.Parameters.Add('@HEFTFORMAT_HOEHE', OleDbType.Integer, 4, 'HEFTFORMAT_HOEHE');
Result.Parameters.Add('@HEFTFORMAT_BREITE', OleDbType.Integer, 4, 'HEFTFORMAT_BREITE');
Result.Parameters.Add('@SATZSPIEGEL_HOEHE', OleDbType.Integer, 4, 'SATZSPIEGEL_HOEHE');
Result.Parameters.Add('@SATZSPIEGEL_BREITE', OleDbType.Integer, 4, 'SATZSPIEGEL_BREITE');
Result.Parameters.Add('@VERTRIEB', OleDbType.LongVarChar, 16, 'VERTRIEB');
Result.Parameters.Add('@GELOESCHT', OleDbType.Boolean, 1, 'GELOESCHT');
Result.Parameters.Add('@USER_NAME', OleDbType.VarWChar, 50, 'USER_NAME');
Result.Parameters.Add('@USER_TXT', OleDbType.LongVarChar, 16, 'USER_TXT');
Result.Parameters.Add('@USER_DATE', OleDbType.DBTimeStamp, 8, 'USER_DATE');
//Update Parameter
FUpdPar := Result.Parameters.Add('@ID', OleDbType.Integer);
FUpdPar.SourceColumn := 'ID';
FUpdPar.SourceVersion := DataRowVersion.Original;
end;
kann mir jeamnd sagen was ich falsch mache?
Raimund
ich bekomme keine Fehlermeldung wenn in der DB ein Datensatz direkt gelöscht oder geändert wurde und ich ein Update über mein Programm machen
so sieht meine SP aus
CREATE PROCEDURE inserad_objekte_update
@NAME nvarchar(50),
@BESCHREIBUNG text,
@ERSCHEINUNG text,
@AUFLAGE int,
@EINZELPREIS money,
@VERBREITUNGSGEBIET text,
@HEFTFORMAT_BREITE int,
@HEFTFORMAT_HOEHE int,
@SATZSPIEGEL_BREITE int,
@SATZSPIEGEL_HOEHE int,
@VERTRIEB text,
@GELOESCHT bit,
@USER_NAME nvarchar(50),
@USER_TXT text,
@USER_DATE datetime,
@ID int
AS
SET NOCOUNT ON
BEGIN TRANSACTION
UPDATE [inserad_objekte]
SET
[NAME] = @NAME,
[BESCHREIBUNG] = @BESCHREIBUNG,
[ERSCHEINUNG] = @ERSCHEINUNG,
[AUFLAGE] = @AUFLAGE,
[EINZELPREIS] = @EINZELPREIS,
[VERBREITUNGSGEBIET] = @VERBREITUNGSGEBIET,
[HEFTFORMAT_HOEHE] = @HEFTFORMAT_BREITE,
[HEFTFORMAT_BREITE] = @HEFTFORMAT_HOEHE,
[SATZSPIEGEL_HOEHE] = @SATZSPIEGEL_BREITE,
[SATZSPIEGEL_BREITE] = @SATZSPIEGEL_HOEHE,
[VERTRIEB] = @VERTRIEB,
[GELOESCHT] = @GELOESCHT,
[USER_NAME] = @USER_NAME,
[USER_TXT] = @USER_TXT,
[USER_DATE] = @USER_DATE
WHERE
[ID] = @ID
IF ( @@ERROR = 0)
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
GO
und so meine Updatecommand
/************************************************** ****************************
//Constructor
constructor TObjekte.Create;
begin
inherited Create;
// TODO: Hier die Konstruktorlogik einfügen
//Adapter erzeugen und Konfigurieren
FAdapter := OleDbDataAdapter.Create('SELECT * FROM inserad_objekte WHERE GELOESCHT = 0' , gDatabaseInserad.Connection);
FAdapter.ContinueUpdateOnError := True;
FAdapter.UpdateCommand := FUpdateCommand;
FAdapter.InsertCommand := FInsertCommand;
FAdapter.DeleteCommand := FDeleteCommand;
//Wenn DataTable im DataSet schon vorhanden dann löschen
if gDataSetInserad.Tables.CanRemove(gDataSetInserad.T ables['inserad_objekte']) then
begin
gDataSetInserad.Tables['inserad_objekte'].Clear;
end;
//Ins gDataSetInserad füllen
gDatabaseInserad.Open;
FAdapter.FillSchema(gDataSetInserad, SchemaType.Mapped, 'inserad_objekte');
FAdapter.Fill(gDataSetInserad, 'inserad_objekte');
gDatabaseInserad.Close;
end;
//################################################## ############################
//################################################## ############################
// Commands
//################################################## ############################
//################################################## ############################
//************************************************** ****************************
//Update Command
function TObjekte.FUpdateCommand() : OleDbCommand;
var
FUpdPar : OleDbParameter;
begin
//Update Command
Result := OleDbCommand.Create;
Result.CommandType := CommandType.StoredProcedure;
Result.CommandText := 'inserad_objekte_update';
Result.Connection := gDatabaseInserad.Connection;
//Update CommadParameter
Result.Parameters.Clear;
Result.Parameters.Add('@NAME', OleDbType.VarWChar, 50, 'NAME');
Result.Parameters.Add('@BESCHREIBUNG', OleDbType.LongVarChar, 16, 'BESCHREIBUNG');
Result.Parameters.Add('@ERSCHEINUNG', OleDbType.LongVarChar, 16, 'ERSCHEINUNG');
Result.Parameters.Add('@AUFLAGE', OleDbType.Integer, 4, 'AUFLAGE');
Result.Parameters.Add('@EINZELPREIS', OleDbType.Decimal, 9, 'EINZELPREIS');
Result.Parameters.Add('@VERBREITUNGSGEBIET', OleDbType.LongVarChar, 16, 'VERBREITUNGSGEBIET');
Result.Parameters.Add('@HEFTFORMAT_HOEHE', OleDbType.Integer, 4, 'HEFTFORMAT_HOEHE');
Result.Parameters.Add('@HEFTFORMAT_BREITE', OleDbType.Integer, 4, 'HEFTFORMAT_BREITE');
Result.Parameters.Add('@SATZSPIEGEL_HOEHE', OleDbType.Integer, 4, 'SATZSPIEGEL_HOEHE');
Result.Parameters.Add('@SATZSPIEGEL_BREITE', OleDbType.Integer, 4, 'SATZSPIEGEL_BREITE');
Result.Parameters.Add('@VERTRIEB', OleDbType.LongVarChar, 16, 'VERTRIEB');
Result.Parameters.Add('@GELOESCHT', OleDbType.Boolean, 1, 'GELOESCHT');
Result.Parameters.Add('@USER_NAME', OleDbType.VarWChar, 50, 'USER_NAME');
Result.Parameters.Add('@USER_TXT', OleDbType.LongVarChar, 16, 'USER_TXT');
Result.Parameters.Add('@USER_DATE', OleDbType.DBTimeStamp, 8, 'USER_DATE');
//Update Parameter
FUpdPar := Result.Parameters.Add('@ID', OleDbType.Integer);
FUpdPar.SourceColumn := 'ID';
FUpdPar.SourceVersion := DataRowVersion.Original;
end;
kann mir jeamnd sagen was ich falsch mache?
Raimund
Comment