🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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.
#82695
Author: Jan Drawski
Date: Tue, 02 Aug 2016 16:36
12 lines
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.
#82696
Author: wloochacz
Date: Wed, 03 Aug 2016 19:46
23 lines
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.
#82699
Author: wloochacz
Date: Wed, 03 Aug 2016 20:15
16 lines
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.
#82697
Author: Jan Drawski
Date: Thu, 04 Aug 2016 00:26
34 lines
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.
#82700
Author: Jan Drawski
Date: Thu, 04 Aug 2016 00:32
9 lines
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.
#82698
Author: wloochacz
Date: Fri, 05 Aug 2016 12:46
43 lines
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