Thread View: pl.comp.lang.delphi.bazy-danych
6 messages
6 total messages
Started by Jan Drawski
Tue, 02 Aug 2016 16:36
FireDac, MSSQL na komputerze z XE6 nie rzuca wyjątkiem (3604): Duplicate key was ignored.
Author: Jan Drawski
Date: Tue, 02 Aug 2016 16:36
Date: Tue, 02 Aug 2016 16:36
12 lines
1506 bytes
1506 bytes
FDConnection.ExecSQL('INSERT...');
Na komputerze gdzie jest zainstalowane środowisko nie ma błedu a na
innym jest. Czy jest możliwe, że wyłączyłem coś za pomocą Delphi i teraz
o tym nie pamiętam, jak to mogę znaleźć, gdzie może być przyczyna?
Błąd wyskakuje na każdym komputerze jak korzystam np. z HeidiSQL.
Błąd z FireDac:
[FireDAC][Phys][ODBC][Microsoft][ODBC SQL Server Driver][SQL
Server]Duplicate key was ignored.
--
Pozdrawiam
Jan Drawski
Re: FireDac, MSSQL na komputerze z XE6 nie rzuca wyjątkiem (3604): Duplicate key was ignored.
Author: wloochacz
Date: Wed, 03 Aug 2016 19:46
Date: Wed, 03 Aug 2016 19:46
23 lines
2204 bytes
2204 bytes
W dniu 2016-08-02 o 18:36, Jan Drawski pisze:
> FDConnection.ExecSQL('INSERT...');
> Na komputerze gdzie jest zainstalowane środowisko nie ma błedu a na
> innym jest. Czy jest możliwe, że wyłączyłem coś za pomocą Delphi i teraz
Niemożliwe.
> o tym nie pamiętam, jak to mogę znaleźć, gdzie może być przyczyna?
Przyczyna jest prosta; wstawisz wartość do pola, która już istnieje.
Na tym polu jest klucz (indeks) unikalny, który dopuszcza duplikaty (to
raczej mało sensowne ustawienie, ale może się przydać w specyficznych
przypadkach).
I wtedy będzie dokładnie tak jak opisujesz, poczytaj o opcji indeksu
IGNORE_DUP_KEY:
https://msdn.microsoft.com/en-us/library/ms186869.aspx
> Błąd wyskakuje na każdym komputerze jak korzystam np. z HeidiSQL.
> Błąd z FireDac:
> [FireDAC][Phys][ODBC][Microsoft][ODBC SQL Server Driver][SQL
> Server]Duplicate key was ignored.
Jak tak ustawiłeś bazę, to tak masz...
--
wloochacz
Re: FireDac, MSSQL na komputerze z XE6 nie rzuca wyjątkiem (3604): Duplicate key was ignored.
Author: wloochacz
Date: Wed, 03 Aug 2016 20:15
Date: Wed, 03 Aug 2016 20:15
16 lines
1784 bytes
1784 bytes
W dniu 2016-08-02 o 18:36, Jan Drawski pisze:
> FDConnection.ExecSQL('INSERT...');
> Na komputerze gdzie jest zainstalowane środowisko nie ma błedu a na
> innym jest. Czy jest możliwe, że wyłączyłem coś za pomocą Delphi i teraz
> o tym nie pamiętam, jak to mogę znaleźć, gdzie może być przyczyna?
> Błąd wyskakuje na każdym komputerze jak korzystam np. z HeidiSQL.
> Błąd z FireDac:
> [FireDAC][Phys][ODBC][Microsoft][ODBC SQL Server Driver][SQL
> Server]Duplicate key was ignored.
I jeszcze jedno - zainstaluj sobie SQL Server NativeClient, bo jedziesz
na ogólnym sterowniku do bazy MSSQLa, a to nie działa dobrze z nowymi
wersjami (od wersji 2008 R2) dobrze.
--
wloochacz
Re: FireDac, MSSQL na komputerze z XE6 nie rzuca wyjątkiem (3604): Duplicate key was ignored.
Author: Jan Drawski
Date: Thu, 04 Aug 2016 00:26
Date: Thu, 04 Aug 2016 00:26
34 lines
2724 bytes
2724 bytes
> Przyczyna jest prosta; wstawisz wartość do pola, która już istnieje. > Na tym polu jest klucz (indeks) unikalny, który dopuszcza duplikaty (to > raczej mało sensowne ustawienie, ale może się przydać w specyficznych > przypadkach). > I wtedy będzie dokładnie tak jak opisujesz, poczytaj o opcji indeksu > IGNORE_DUP_KEY: > https://msdn.microsoft.com/en-us/library/ms186869.aspx To było zamierzone, nie ma potrzeby sprawdzania, czy już wcześniej zostało część danych przesłanych. Nie znalazłem w MSSQLu polecenia typu INSERT IGNORE, a ze sprawdzaniem każdego id czy istnieje nie chciało mi się bawić choć teraz zmieniłem podejście. >> Błąd wyskakuje na każdym komputerze jak korzystam np. z HeidiSQL. >> Błąd z FireDac: >> [FireDAC][Phys][ODBC][Microsoft][ODBC SQL Server Driver][SQL >> Server]Duplicate key was ignored. > Jak tak ustawiłeś bazę, to tak masz... Ta sama baza, ten sam komputer: - W HeidiSQL pojawia się okienko informujące o błędzie. - W programie napisanym w Delphi nie ma wyjątku. - W programie napisanym w Delphi (tym samym) są wyjątki przy innych błędach. Inny komputer, inna baza danych, ten sam program napisany w Delphi: jest ten wyjątek Poradziłem sobie obsługując id wyjątku, później w ogóle zmieniłem podejście. Nie wiem dlaczego program się tak zachowuje, oczekiwałbym, że albo zawsze będzie wyjątek albo nigdy a tu jest raz tak a raz inaczej. -- Pozdrawiam Jan Drawski
Re: FireDac, MSSQL na komputerze z XE6 nie rzuca wyjątkiem (3604): Duplicate key was ignored.
Author: Jan Drawski
Date: Thu, 04 Aug 2016 00:32
Date: Thu, 04 Aug 2016 00:32
9 lines
1357 bytes
1357 bytes
> I jeszcze jedno - zainstaluj sobie SQL Server NativeClient, bo jedziesz > na ogólnym sterowniku do bazy MSSQLa, a to nie działa dobrze z nowymi > wersjami (od wersji 2008 R2) dobrze. Dzięki za info. -- Pozdrawiam Jan Drawski
Re: FireDac, MSSQL na komputerze z XE6 nie rzuca wyjątkiem (3604): Duplicate key was ignored.
Author: wloochacz
Date: Fri, 05 Aug 2016 12:46
Date: Fri, 05 Aug 2016 12:46
43 lines
3176 bytes
3176 bytes
W dniu 2016-08-04 o 02:26, Jan Drawski pisze: >> Przyczyna jest prosta; wstawisz wartość do pola, która już istnieje. >> Na tym polu jest klucz (indeks) unikalny, który dopuszcza duplikaty (to >> raczej mało sensowne ustawienie, ale może się przydać w specyficznych >> przypadkach). >> I wtedy będzie dokładnie tak jak opisujesz, poczytaj o opcji indeksu >> IGNORE_DUP_KEY: >> https://msdn.microsoft.com/en-us/library/ms186869.aspx > > To było zamierzone, nie ma potrzeby sprawdzania, czy już wcześniej > zostało część danych przesłanych. Nie znalazłem w MSSQLu polecenia typu > INSERT IGNORE, a ze sprawdzaniem każdego id czy istnieje nie chciało mi > się bawić choć teraz zmieniłem podejście. Na fatalne, imo. MSSQL to nie MySQL mimo podobieństwa w nazwie - i całe szczęście. Polecam jednak pobawienie się z tym, bo utrzymanie indeksu unikalnego który unikalnym nie jest "lekko" z czapy... >>> Błąd wyskakuje na każdym komputerze jak korzystam np. z HeidiSQL. >>> Błąd z FireDac: >>> [FireDAC][Phys][ODBC][Microsoft][ODBC SQL Server Driver][SQL >>> Server]Duplicate key was ignored. >> Jak tak ustawiłeś bazę, to tak masz... > > Ta sama baza, ten sam komputer: > - W HeidiSQL pojawia się okienko informujące o błędzie. > - W programie napisanym w Delphi nie ma wyjątku. > - W programie napisanym w Delphi (tym samym) są wyjątki przy innych > błędach. > > Inny komputer, inna baza danych, ten sam program napisany w Delphi: jest > ten wyjątek > > Poradziłem sobie obsługując id wyjątku, później w ogóle zmieniłem > podejście. Nie wiem dlaczego program się tak zachowuje, oczekiwałbym, że > albo zawsze będzie wyjątek albo nigdy a tu jest raz tak a raz inaczej. A ustawienia bazy sprawdzałeś? SET ANSI WARNINGS i podobne? Na pewno masz różnice i stąd różnice w zachowaniu programu na różnych bazach danych. -- wloochacz
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads