Hallo Wissende,
also ich habe eine Datenbank, in der sich diverse Spieler befinden. Ich erhalte nun über eine
XML-Datei immer die neuesten Daten, also eventuell geänderte Schreibweisen oder einfach Spieler, die noch nicht in der
DB sind. Mit folgendem Code lese ich die Spieler aus einem TListview und schreib, wenn nötig diese dann in die Datenbank.
In dieser Datenbank hatte ich eigentlich ein Feld namens ID angelegt, welches, so glaube ich ein Autowert ist. Ich kann den Wert zumindest nicht von Hand ändern. Der folgende Code, fügt mir aber die neuen Spieler hinzu und generiert dabei wüste eigene ID´s.
Woran kann das liegen?
Und kann man das so, wie ich es gemacht habe lassen?
Delphi-Quellcode:
procedure Timport_players.btn_import_playersClick(Sender: TObject);
var
i, new_item_count,upd_item_count:integer;
Str_Query, str_sname, str_fname, str_nat, str_id, str_gender : string;
begin
new_item_count := 0; //zähler für neueinträge
upd_item_count := 0; //zähler für updates
form1.DataSource1.DataSet := form1.Query1;
pgr_bar.Max := PlayerList.Items.Count-1;
pgr_bar.Position := 0;
for i := 0 to PlayerList.Items.Count-1 do
begin
with PlayerList do
begin
if Items.Item[i].Checked then
begin
Form1.Query1.Close;
form1.Query1.SQL.Clear;
str_id := Items.Item[i].Caption;
str_sname := Items.Item[i].SubItems[0];
str_fname := Items.Item[i].SubItems[1];
str_nat := Items.Item[i].SubItems[2];
str_gender:= Items.Item[i].SubItems[4];
Str_Query := 'select * from players where second_name='+QuotedStr(str_sname)+' and first_name='+QuotedStr(str_fname);
form1.Query1.SQL.Text := Str_Query;
form1.Query1.Active := true;
//neu eintragen = update
if form1.Query1.RecordCount=1 then
begin
//with form1.ado_players do
with form1.Query1 do
begin
Edit;
FieldByName('second_name').AsString := str_sname;
FieldByName('first_name').AsString := str_fname;
FieldByName('nation').AsString := str_nat;
FieldByName('player_id').AsString := str_id;
FieldByName('gender').AsString := LowerCase(str_gender);
post;
inc(upd_item_count);
end;
end;
//neu eintragen = import
if form1.Query1.RecordCount=0 then
begin
with form1.Query1 do
begin
//ShowMessage('new ' + str_sname);
Insert;
FieldByName('second_name').AsString := str_sname;
FieldByName('first_name').AsString := str_fname;
FieldByName('nation').AsString := str_nat;
FieldByName('player_id').AsString := str_id;
FieldByName('gender').AsString := LowerCase(str_gender);
post;
inc(new_item_count);
end;
end;
end;
Items.Item[i].Checked := false;
end;
pgr_bar.Position := i;
end;
//statusinfo was gemacht wurde
ShowMessage(IntToStr(new_item_count)+ ' was added to the database'+chr(13)+
IntToStr(upd_item_count)+ ' was updated in the database');
form1.DataSource1.DataSet := form1.ado_players;
end;