Variant Variable wird nicht korrekt übergeben BC 18.0

22. September 2021 10:11

Mir ist heute folgendes Problem begegnet und ich verstehe das nicht. Bei der Übergabe eines Datums in einer Variant Variablen in einen DotNet SQLParameter wird das übergebene Datum um einen Tag zurückgesetzt. Das klingt sehr merkwürdig, ist aber so. Ist das schon einmal irgendwo aufgefallen? Zur Erklärung noch etwas AL-Text.
Bevor jemand fragt, warum ich den Wert in eine Variant variable übergebe, hier die Erklärung. Die Übergabe verschiedener Parameter soll in einer Funktion ablaufen, da mehrere verschiedene Parameter übergeben werden sollen. Da jeder Parameter u.U. einen anderen Typ hat verwende ich eine Variant Variable. Das funktioniert auch soweit, bis auf das Datum.
Hier noch die Funktion, die mich zum Testen dazu geschrieben habe. Der Vollständigkeit halber auch noch die Funktion für die Übergabe der Parameter. Es liegt aber auch nicht an der Funktion. In meinem Beispiel habe ich den Teil mit der Datumsvariablen direkt in die Übergabefunktion geschrieben. Mit demselben Ergebnis.

Code:
 
procedure UpdateSQLDatabase2(Parameter1: Text[30]; Parameter2: Text[30]; Parameter3: Date; Parameter4: Integer)
    var

        SQLClientCon: DotNet SQLConnection;
        MySQLDataSet: DotNet SQLDataSet;
        POISQLDataAdapter: DotNet SQLDataAdapter;
        POISQLCommand: DotNet SQLCommand;
        POISQLParameter: DotNet SQLParameter;
        POISQLParameter2: DotNet SQLParameter;
        Parameter5: Variant;
        SQLQuery: Text;
        SQLUpdateTxt: label 'update [dbo].[Daten] set [Name] = @var1 , [Name2] = @var2 , [Date] = @var3 where [ID] = @ID';
    begin
        SQLQuery := 'SELECT * FROM Daten';
        POISQLDataAdapter := POISQLDataAdapter.SqlDataAdapter(SQLQuery, GetSQLConnection());
        MySQLDataSet := MySQLDataSet.DataSet();
        POISQLDataAdapter.Fill(MySQLDataSet);
        POISQLCommand := POISQLCommand.SqlCommand(SQLUpdateTxt);
        SQLClientCon := SQLClientCon.SqlConnection('Server=Servername;Database=Test;Trusted_Connection=Yes;');
        POISQLCommand.Connection(SQLClientCon);
        POISQLDataAdapter.UpdateCommand(POISQLCommand);

        SetSQLParameter(Parameter4, '@ID', POISQLDataAdapter);
        SetSQLParameter(Parameter1, '@var1', POISQLDataAdapter);
        SetSQLParameter(Parameter2, '@var2', POISQLDataAdapter);

        Parameter5 := Parameter3; //Übergabe an eine Variable vom Typ Variant
       
        POISQLParameter2 := POISQLParameter.SqlParameter();
        POISQLParameter2.ParameterName := '@var3';
        POISQLParameter2.Value := Parameter5;
        POISQLDataAdapter.UpdateCommand.Parameters.Add(POISQLParameter2);

        POISQLDataAdapter.Update(MySQLDataSet, MySQLDataSet.Tables.Item(0).ToString());
        SQLClientCon.Close();
    end;

procedure SetSQLParameter(ParamValueVariant: Variant; ParamID: Text[30]; var POISQLDataAdapter: DotNet SQLDataAdapter)
    var
        POISQLParameter: DotNet SQLParameter;
    begin
        POISQLParameter := POISQLParameter.SqlParameter();
        POISQLParameter.ParameterName := ParamID;
        POISQLParameter.Value := ParamValueVariant;
        POISQLDataAdapter.UpdateCommand.Parameters.Add(POISQLParameter);
    end;

Re: Variant Variable wird nicht korrekt übergeben BC 18.0

22. September 2021 11:23

nur ne Vermutung -> das Datum ist doch vom Typ DateTime - sprich [2021-09-22 00:00:00.000], oder? -> Spielt dir da die Zeitzone vll. einen Streich?