Thema: Delphi Problem mit Generator

Einzelnen Beitrag anzeigen

TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.960 Beiträge
 
Delphi 12 Athens
 
#5

AW: Problem mit Generator

  Alt 5. Apr 2024, 08:38
Und es werden die Werte der Generatoren übernommen.
wie? Über ein Select Max() oder liest Du den Wert des Generators aus (Select gen_ID(X,0) from )?

Grüße
Hallo,

hier die Generator Kopieren Routine:

Delphi-Quellcode:
procedure TDBCopy.CopyGenerators;
var
  Generators : TStringList;
  Generator : string;
  Value : Int64;
  Msg : string;
begin
  Generators := TStringList.Create;

  try
    FSourceSQLConnection.GetGeneratorNames('', '', '', Generators);

    for Generator in Generators do
    begin
      Value := GetCurrentGeneratorValue(FGeneratorReadQuery, Generator);

      SetGeneratorValue(FGeneratorWriteQuery, Generator, Value);

      Msg := 'Generator Wert gesetzt für: ' + Generator + 'Wert: ' + Value.ToString;
      FLog.Add(Msg);
      log.Send(LevelViolet, cCategory, Msg);
    end;
  finally
    Generators.Free;
  end;
end;

function TDBCopy.GetCurrentGeneratorValue(Query: TFDQuery;
                                          const GeneratorName: string): Int64;
begin
  Query.Open('SELECT GEN_ID(' + GeneratorName +', 0) AS GENERATOR_VALUE '+
             'FROM RDB$DATABASE');
  try
    if not Query.Eof then
      Result := Query.FieldByName('GENERATOR_VALUE').AsLargeInt
    else
      Result := -1;
  finally
    Query.Close;
  end;
end;

procedure TDBCopy.SetGeneratorValue(Query : TFDQuery;
                                    const GeneratorName : string;
                                    Value : Int64);
begin
  try
    Query.ExecSQL('ALTER SEQUENCE ' + GeneratorName +
                  ' RESTART WITH ' + Value.ToString);
  except
    on e:Exception do
      log.SendException(cCategory, 'Fehler beim Setzen des Generators: ' +
                        GeneratorName + ' Wert: ' + Value.ToString +
                        ' Grund: ' + e.Message, e);
  end;
end;
Grüße
TurboMagic
  Mit Zitat antworten Zitat