![]() |
Datenbank: MDAC • Version: 2.8 • Zugriff über: Ado
autowert-Problem bei Update oder Insert über Query...
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; |
Re: autowert-Problem bei Update oder Insert über Query...
Hallo,
ich hatte nicht die Zeit deinen source in der Tiefe zu scannen, aber eins its mir aufgefallen, was ich persönlich meide (eventuell andere nicht und die sind dann ganz böse auf mich :oops: )...
Delphi-Quellcode:
eventuell hilft das .. :stupid:
Verwende kein "With" mehr, sondern schreibe immer den vollen namen ...
|
Re: autowert-Problem bei Update oder Insert über Query...
oh noch eins ist query nicht eher für lesen als für schreiben ... wäre eventuell besser table ?
|
Re: autowert-Problem bei Update oder Insert über Query...
Zitat:
Zitat:
|
Re: autowert-Problem bei Update oder Insert über Query...
Ok, dann werde ich das with mal entfernen und einen erneuten Test fahren...
Ich trau mir gar nicht die Wahrheit zu schreiben, so peinlich ist das jetzt, aber in meinem DBGrid war leider in der Spalte, wo ich mir die ID´s anzeigen lasse zu schmal, so dass ich nur die 100er und 10er gesehen habe, Es ist also alles in Ordnung. Ich habe den Code trotzdem geändert... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz