podwójna wartość klucza narusza ograniczenie unikalności

0

Witam ponownie, pozwalam zamieścic sobie fragment programu, który kompiluje sie bez błedów, natomiast przy uruchomieniu wyskakuje blędu. Do pewnego momentu działał nienagannie, ale nie wiem gdzie wsadziłem palce i co sie zmieniło bo obecnie wyskakuje błąd ja w załączniku. prosze o wyrozumiałość i zrozumienie i pomoc w rozwiązaniu problemu

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

type
  TForm311 = class(TForm)
    RadioGroup1: TRadioGroup;
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    LabeledEdit3: TLabeledEdit;
    LabeledEdit4: TLabeledEdit;
    LabeledEdit5: TLabeledEdit;
    LabeledEdit6: TLabeledEdit;
    LabeledEdit7: TLabeledEdit;
    LabeledEdit8: TLabeledEdit;
    LabeledEdit9: TLabeledEdit;
    LabeledEdit10: TLabeledEdit;
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit5: TEdit;
    Edit4: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    GroupBox2: TGroupBox;
    Edit6: TEdit;
    Label6: TLabel;
    Label7: TLabel;
    Edit7: TEdit;
    Edit8: TEdit;
    Label8: TLabel;
    Edit9: TEdit;
    Label9: TLabel;
    Edit10: TEdit;
    Label10: TLabel;
    GroupBox3: TGroupBox;
    Edit11: TEdit;
    Label11: TLabel;
    Edit12: TEdit;
    Label12: TLabel;
    Edit13: TEdit;
    Label13: TLabel;
    Edit14: TEdit;
    Label14: TLabel;
    Edit15: TEdit;
    Label15: TLabel;
    Edit16: TEdit;
    Label16: TLabel;
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form311: TForm311;

implementation

uses
  Unit31;

{$R *.dfm}

procedure TForm311.FormActivate(Sender: TObject);
var
  tekst1, tekst2, tekst3, przystanek1, przystanek2: string;
  ilosckm, typtrasy, idpasazera, kodb, idrozkladu, idzbiorowki: Integer;
  ULGOWY, DOPLATA: Real;
begin
  tekst1 := 'Bilet Ulgowy Miesięczny';
  tekst2 := 'Uczeń BM';
  tekst3 := '- ulga ustawowa  49%';
  idpasazera := Form31.ZQuery3.FieldByName('id_pasazera').AsInteger;
  LabeledEdit1.Text := Form31.ZQuery3.FieldByName('nazwisko').AsString;
  LabeledEdit2.Text := Form31.ZQuery3.FieldByName('imie').AsString;
  LabeledEdit3.Text := Form31.ZQuery3.FieldByName('kod_pocztowy').AsString;
  LabeledEdit4.Text := Form31.ZQuery3.FieldByName('miasto').AsString;
  LabeledEdit5.Text := Form31.ZQuery3.FieldByName('ulica').AsString;
  LabeledEdit6.Text := Form31.ZQuery3.FieldByName('pesel').AsString;
  LabeledEdit7.Text := Form31.ZQuery3.FieldByName('nr_dokumentu').AsString;
  LabeledEdit8.Text := Form31.ZQuery3.FieldByName('trasa').AsString;
  LabeledEdit9.Text := IntToStr(Form31.ZQuery3.FieldByName('id_zakladu').AsInteger);
  LabeledEdit10.Text := IntToStr(Form31.ZQuery3.FieldByName('id_wydzialu').AsInteger);
  Edit1.text := tekst1;
  Edit2.Text := tekst2;
  Edit3.text := tekst3;
  Edit4.Text := DateToStr(Form31.DateTimePicker1.Date);
  Edit5.text := DateToStr(Form31.DateTimePicker2.Date);
  Form31.ZQuery5.First;
  ilosckm := Form31.Zquery5.FieldByName('km_taryfowe').AsInteger;
  Form31.ZQuery6.filter := 'kod_przystanku=' + inttostr(form31.Zquery5.FieldByName('przystanek_od').AsInteger);
  przystanek1 := form31.Zquery6.FieldByName('nazwa').AsString;
  Form31.ZQuery6.filter := 'kod_przystanku=' + inttostr(form31.Zquery5.FieldByName('przystanek_do').AsInteger);
  przystanek2 := form31.Zquery6.FieldByName('nazwa').AsString;
  Edit6.Text := przystanek1 + ' - ' + przystanek2 + ' - ' + inttostr(ilosckm);
  Form31.ZQuery5.Last;
  ilosckm := Form31.Zquery5.FieldByName('km_taryfowe').AsInteger;
  typtrasy := Form31.ZQuery5.FieldByName('id_wzorca_tras').AsInteger;
  Edit6.Text := przystanek1 + ' - ' + przystanek2 + ' - ' + inttostr(ilosckm);
  Form31.ZQuery6.filter := 'kod_przystanku=' + inttostr(form31.Zquery5.FieldByName('przystanek_od').AsInteger);
  przystanek1 := form31.Zquery6.FieldByName('nazwa').AsString;
  Form31.ZQuery6.filter := 'kod_przystanku=' + inttostr(form31.Zquery5.FieldByName('przystanek_do').AsInteger);
  przystanek2 := form31.Zquery6.FieldByName('nazwa').AsString;
  Edit7.Text := przystanek1 + ' - ' + przystanek2 + ' - ' + inttostr(ilosckm);
  FORM31.ZQuery7.Last;
  Edit8.Text := floatToStr(Form31.ZQuery7.fieldbyname('cena').Asinteger);
  ULGOWY := Form31.ZQuery7.fieldbyname('cena').Asinteger - ((Form31.ZQuery7.fieldbyname('cena').Asinteger * 49) / 100);
  EDIT9.TEXT := FloatToStr(ULGOWY);
  EDIT10.TEXT := floatTOSTR(Form31.ZQuery7.fieldbyname('cena').Asinteger - ulgowy);

  Form31.ZQuery10.Last;
  idrozkladu := Form31.ZQuery10.fieldbyName('id_rozkladu').AsInteger;

  Form31.ZQuery9.Last;
  Edit11.Text := Form31.ZQuery9.FieldByName('litera').AsString;
  Edit12.Text := Form31.ZQuery9.FieldByName('nazwa').AsString;
  Edit13.Text := IntToStr(form31.ZQuery9.FieldByName('ost_zam_rf').AsInteger);
  Edit14.Text := Form31.ZQuery9.FieldByName('logo').AsString;
  Edit15.Text := IntToStr(Form31.ZQuery9.FieldByName('kod_przystanku').AsInteger);

  Form31.ZQuery8.Last;
  kodb := Form31.ZQuery8.FieldByName('kod').AsInteger + 1;

  Form31.ZQuery11.Last;
  idzbiorowki := Form31.ZQuery11.FieldByName('id_zbiorowki').Asinteger + 1;
  Edit16.Text := IntToStr(idzbiorowki);

  with Form31.ZQuery8, SQL do
  begin
    Close;
    Clear;
    Add('insert into  bilety  (litera, kod, data_od, data_do, data_sp, cena, do_zaplaty, id_operatora,'
    + 'typ_trasy, id_pasazera, dobry, nazwa_raportu, nr_w_bil, anulowany, liczba_miejsc, wynajm, vat_plac,'
    + 'z_deklaracja, id_rozkladu, sposob_zaplaty, kurs_godz, bez_kursu, cena_norm, liczba_przejazdow,'
    + 'nr_rf, logo, sprzedawca, kod_przystanku, id_rodzb, nr_mifare, mif_szyfr, mif_kod, sp_wyl_ceny_bm,'
    + 'mif_typ_tr, rodzaj_kasy, id_zbiorowki)');
    Add('values (:litera, :kod, :data_od, :data_do, :data_sp, :cena, :do_zaplaty, :id_operatora, '
    + ':typ_trasy, :id_pasazera, :dobry, :nazwa_raportu, :nr_w_bil, :anulowany, :liczba_miejsc, :wynajm, :vat_plac,'
    + ':z_deklaracja, :id_rozkladu, :sposob_zaplaty, :kurs_godz, :bez_kursu, :cena_norm, :liczba_przejazdow,'
    + ':nr_rf, :logo, :sprzedawca, :kod_przystanku, :id_rodzb, :nr_mifare, :mif_szyfr, :mif_kod, :sp_wyl_ceny_bm,'
    + ':mif_typ_tr, :rodzaj_kasy, :id_zbiorowki)');
    ParamByName('litera').AsString := trim(Edit11.text);
    ParamByName('kod').AsInteger := kodb;
    ParamByName('data_od').AsDate := StrToDate(Edit4.text);
    ParamByName('data_do').AsDate := StrToDate(Edit5.text);
    ParamByName('data_sp').AsDateTime := Now;
    ParamByName('id_rodzb').AsInteger := 105711007;
    ParamByName('cena').Asfloat := StrToFloat(Edit9.text);
    ParamByName('do_zaplaty').AsFloat := StrToFloat(Edit9.text);
    ParamByName('id_operatora').AsInteger := 1000000;
    ParamByName('typ_trasy').AsInteger := 2;
    ParamByName('id_pasazera').AsInteger := idpasazera;
    ParamByName('dobry').AsInteger := 1;
    ParamByName('nazwa_raportu').AsString := Trim(Edit12.Text);
    ParamByName('nr_w_bil').AsInteger := kodb;
    ParamByName('anulowany').AsBoolean := False;
    ParamByName('liczba_miejsc').AsInteger := 1;
    ParamByName('wynajm').AsFloat := 0;
    ParamByName('vat_plac').AsBoolean := False;
    ParamByName('z_deklaracja').ASBoolean := False;
    ParamByName('id_rozkladu').AsInteger := idrozkladu;
    ParamByName('sposob_zaplaty').AsFloat := 1;
    ParamByName('kurs_godz').AsBoolean := True;
    ParamByName('bez_kursu').AsBoolean := False;
    ParamByName('cena_norm').AsFloat := StrToFloat(Edit8.Text);
    ParamByName('liczba_przejazdow').AsInteger := 0;
    ParamByName('nr_rf').AsInteger := strtoint(edit13.text);
    ParamByName('logo').AsSTring := edit14.text;
    ParamByName('kod_przystanku').AsInteger := StrToInt(Edit15.text);
    ParamByName('sprzedawca').AsInteger := 1717;
    ParamByname('nr_mifare').Asinteger := 0;
    ParamByName('mif_szyfr').AsString := '0000000000';
    ParamByName('mif_kod').ASinteger := 0;
    ParamByName('sp_wyl_ceny_bm').AsInteger := 4;
    ParamByName('mif_typ_tr').AsFloat := 2;
    ParamByName('rodzaj_kasy').AsInteger := 3;
    ParamByName('id_zbiorowki').AsInteger := idzbiorowki;
    ExecSQL;
  end;

end;

end.

z poważaniem

0

błąd zgłasza baza bo naruszono warunek unikalności danych (klucza). Czyli tak jak w wyjątku, w bazie już jest para wartości (A,6) w polach 'litera,kod' . Musisz albo zrobić obsługę wyjątku po stronie aplikacji albo w jakiś inny sposób pilnować unikalności klucza

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