Ich habe eine
XML-Datei, in welcher ein Feld "ID" mit Autowert vorhanden ist. Nun wurde festgestellt, dass dieser Wert nur einen Wertebereich zwischen 1 und 32767 haben darf. Ein Entfernen des Auto-Wertes ist leider nicht möglich, da die Software dann nicht mehr abwärtskompatibel wäre. Ich brauche eine Lösung, um diesen Wert, falls dieser zu hoch wird, zu ändern.
Folgendes habe ich schon probiert, funktioniert aber nicht, bzw. wird einfach ignoriert:
Delphi-Quellcode:
unit DataSet;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
db, DBClient, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls;
//Hab versucht, den Feld-Typ hiermit zu verändern - ging aber nicht, bzw. wurde ignoriert
//Wurde Small-Int, also 32768 erreicht, ging es mit 32769 weiter
Type
TAutoIncField =
class(TSmallintField)
public
constructor Create(AOwner: TComponent);
override;
end;
type
TForm1 =
class(TForm)
ClientDataSet1: TClientDataSet;
ClientDataSet1ID: TAutoIncField;
ClientDataSet1Name: TStringField;
//Diese Komponenten wurden nur zu Test-Zwecken und zur schnellen Eingabe auf der Form platziert
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
DataSource1: TDataSource;
Panel1: TPanel;
Button1: TButton;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TAutoIncField }
constructor TAutoIncField.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
SetDataType(ftAutoInc);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
if FileExists('
Test.xml')
then ClientDataSet1.LoadFromFile('
Test.xml');
end;
procedure TForm1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
ClientDataSet1.SaveToFile('
Test.xml');
end;
end.
In einem anderen Forum hab ich was über Alter Table gelesen, um damit den Autowert zu manipulieren:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientDataset1.filename := '';
ClientDataSet1.CommandText := 'Alter Table Test AUTO_INCREMENT = 1';
ClientDAtaSEt1.Open;
end;
Das ging aber leider auch nicht und es gab auch keine Fehlermeldung beim Ausführen dieser Aktion.
Hat jemand 'ne Idee? Eine Möglichkeit wäre noch, die
XML-Datei zu parsen und den Wert direkt zu ändern. Aber ich glaube, man macht das nicht so...
Vielen Dank schonmal im Voraus!