Podwójny zapis rekordów do bazy

0

Zapisuje rekordy ze StrigGrida do bazy w ten sposób:

 procedure TForm2.Button4Click(Sender: TObject);
var i:integer;
var dzien,asortyment,trasa:integer;
begin
for i := 1 to StringGrid1.RowCount-1 do
begin
dzien:=DBLookupComboBox2.KeyValue;
asortyment:=StrToInt(StringGrid1.Cells[1,i]);
trasa:=DBLookupComboBox1.KeyValue;
MSQuery3.SQL.Add('INSERT INTO Pozycja (Data, id_dnia, id_asort, id_trasy, Wydano, Zwrot, Sprzedano) VALUES ('''+DateToStr(DateTimePicker1.Date)+''','''+IntToStr(dzien)+''','''+IntToStr(asortyment)+''','''+IntToStr(trasa)+''','''+StringGrid1.Cells[3,i]+''', '''+StringGrid1.Cells[4,i]+''', '''+StringGrid1.Cells[5,i]+''')');
MSQuery3.ExecSQL;
end;
end;

W przypadku pierwszego wciśnięcia przycisku w bazie lądują poszczególne rekordy.
Zmiana danych w tabeli i ponowne wciśnięcie przycisku powoduje, że w bazie zostają zapisane rekordy zarówno zmienione jak i jeszcze raz te poprzednie. Tak jakby ponawiał poprzednie zapytanie. Przy kolejnych przyciśnięciach zachowuje się tak samo.
Nie mogę sobie z tym poradzić.

0

jaki kod napisałeś tak masz - widzisz tam gdzieś aktualizowanie istniejących rekordów bo ja widzę jedynie cały czas DOPISYWANIE NOWYCH

0

Polecenie INSERT wstawia rekordy, UPDATE je aktualizuje

0

Ja chcę dopisywać nowe rekordy a nie aktualizować już istniejące.
Struktura tabeli, do której zapisuje:
id; data; id_dnia, id_asort, id_trasy, wydano, zwrot, sprzedaż
id jest wstawiane z automatu z krokiem jeden.
Data, id_dnia, id_trasy są wybierane z komponentów jak wyżej.
id_asort - jest ładowane z innej tabeli
wydano, zwrot - te dane są do uzupełnienia
sprzedaż - powiedzmy, że na razie wpisuję ją również ręcznie

0

a czyścisz gdzieś treść zapytania czy za każdym razem dodajesz nowe??
BTW poczytaj o parametrach zapytania
BTW2 co to jest to MSQuery?

0

Nie czyszczę treści zapytania w żaden sposób.
Co do parametrów zapytania to nie widzę sensu używania jakichkolwiek. Zapytanie jest bezbłędnie wykonywane przy uruchomieniu bezpośrednio na SQLServer.
MSQuery to kontrolka z komponentu SQLServerAcces.
http://software.com.pl/sql-server-data-access-components/

0
  1. sprawdzałeś co masz w MSQuery3.SQL.Text po np. trzecim przejściu przez pętlę? bo ja widzę, że będą tam trzy inserty.
  2. Co do parametrów to chyba nie bardzo wiesz o co chodzi. Polecam poczytać o prepare. Poza tym żebyś się nie zdziwił jak format daty będzie różny na serwerze i na kompie i nagle to 'bezbłędne' zapytanie przestanie się wykonywać.
  3. Może wreszcie napisz jasno co chcesz zrobić z tymi rekordami z SG

1 użytkowników online, w tym zalogowanych: 0, gości: 1