AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi autowert-Problem bei Update oder Insert über Query...
Thema durchsuchen
Ansicht
Themen-Optionen

autowert-Problem bei Update oder Insert über Query...

Ein Thema von torud · begonnen am 24. Okt 2007 · letzter Beitrag vom 25. Okt 2007
Antwort Antwort
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

autowert-Problem bei Update oder Insert über Query...

  Alt 24. Okt 2007, 19:12
Datenbank: MDAC • Version: 2.8 • Zugriff über: Ado
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;
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#2

Re: autowert-Problem bei Update oder Insert über Query...

  Alt 25. Okt 2007, 14:58
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 )...
Verwende kein "With" mehr, sondern schreibe immer den vollen namen ... eventuell hilft das ..
Peter Schaible
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#3

Re: autowert-Problem bei Update oder Insert über Query...

  Alt 25. Okt 2007, 15:01
oh noch eins ist query nicht eher für lesen als für schreiben ... wäre eventuell besser table ?
Peter Schaible
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: autowert-Problem bei Update oder Insert über Query...

  Alt 25. Okt 2007, 15:04
Zitat:
oh noch eins ist query nicht eher für lesen als für schreiben ...
Jein, kommt auf DB an kann man aber auch schreibend machen.
Zitat:
wäre eventuell besser table ?
Schlechte Idee.
Markus Kinzler
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#5

Re: autowert-Problem bei Update oder Insert über Query...

  Alt 25. Okt 2007, 15:31
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...
Danke
Tom
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 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