Thread View: pl.comp.lang.delphi.bazy-danych
3 messages
3 total messages
Started by Trawnik
Thu, 04 Aug 2016 10:45
FireDAC, TField.Origin
Author: Trawnik
Date: Thu, 04 Aug 2016 10:45
Date: Thu, 04 Aug 2016 10:45
15 lines
1521 bytes
1521 bytes
Cześć, Delphi 10.1 Berlin FDQuery, takie samo zapytanie do wszystkich baz: select nazwisko_osoby as "Nazwisko osoby" from osoby; Dla utworzonego obiektu takiej kolumny property TField.Origin przyjmuje różne wartości w zależności od silnika bazy: dla Firebird 2.5.5 TField.Origin = nazwisko_osoby <-- OK dla Oracle 11.2.0.4 TField.Origin = "Nazwisko osoby" <-- ŹLE dla MS SQL 2005 TField.Origin = [Nazwisko osoby] <-- ŹLE Zgodnie z dokumentacją "TField.Origin indicates the name of the field in its original database table". Jakieś sugestie? Wszystkie mile widziane. Pozdrawiam,
Re: FireDAC, TField.Origin
Author: wloochacz
Date: Fri, 05 Aug 2016 12:40
Date: Fri, 05 Aug 2016 12:40
65 lines
3352 bytes
3352 bytes
W dniu 2016-08-04 o 12:45, Trawnik pisze:
> Cześć,
> Delphi 10.1 Berlin
> FDQuery, takie samo zapytanie do wszystkich baz:
> select nazwisko_osoby as "Nazwisko osoby" from osoby;
>
> Dla utworzonego obiektu takiej kolumny property TField.Origin przyjmuje
> różne wartości w zależności od silnika bazy:
> dla Firebird 2.5.5 TField.Origin = nazwisko_osoby <-- OK
W nazwie tej kolumny nie ma spacji, gdyby była byłoby tak samo jak w Oracle.
> dla Oracle 11.2.0.4 TField.Origin = "Nazwisko osoby" <-- ŹLE
Dobrze.
> dla MS SQL 2005 TField.Origin = [Nazwisko osoby] <-- ŹLE
I tu też DOBRZE.
Pojechałeś trochę za daleko - po pierwsze kto normalny wkłada spacje do
nazwy obiektów w bazie danych?
Da się, ale...
A po drugie - jak już masz tę spację, to jak sobie wyobrażasz napisanie
SQL z taką kolumną bez użycia kwalifikatora identyfikatora?
Takie zapytanie nie przejdzie z oczywistych względów:
select * from tab
order by Nazwisko osoby
ale takie:
select * from tab
order by [Nazwisko osoby] jest prawidłowe dla MSSQL. Dla Oracle/FB
będzie to podwójny cudzysłów.
> Zgodnie z dokumentacją "TField.Origin indicates the name of the field in
> its original database table".
No i to jest ZGODNE z tym co jest napisane.
A napisane masz "name of the field in its original database table" a nie
w SelectSQL, prawda?
Prawda.
Jak masz spację w nazwach, to masz kłopot.
> Jakieś sugestie? Wszystkie mile widziane.
> Pozdrawiam,
Sugestia jest taka, że nie da rady tego zrobić bo tak działa FireDAC i
koniec.
Dawno temu dyskutowałem na ten temat z Dymitrym i dowiedziałem się, że
się nie da, bo ta informacja jest wykorzystywana przez
SQLCommandGenerator i jak wpiszesz tam... wróć - zapędziłem się. Nie o
to pytałeś :)
A więc sugestia jest taka: NIE UŻYWAJ SPACJI.
A nie wiem czy wiesz, ale żeby takie zapytanie poprawnie odpalić w
FireDAC na różnych bazach danych (bo różne silniki wymagają różnych
kwalifikatorów dla identyfikatora) musisz je odpowiednio zapisać w
FireDAC, czyli tak:
select * from tab
order by {id Nazwisko osoby}
Poza tym, wszystko jest w dokumentacji...
--
wloochacz
Re: FireDAC, TField.Origin
Author: Jurek
Date: Fri, 05 Aug 2016 21:19
Date: Fri, 05 Aug 2016 21:19
98 lines
4262 bytes
4262 bytes
Użytkownik "wloochacz" <wloochacz@no.spam.gmail.com> napisał w wiadomości
news:57a48955$0$15206$65785112@news.neostrada.pl...
>W dniu 2016-08-04 o 12:45, Trawnik pisze:
>> Cześć,
>> Delphi 10.1 Berlin
>> FDQuery, takie samo zapytanie do wszystkich baz:
>> select nazwisko_osoby as "Nazwisko osoby" from osoby;
>>
>> Dla utworzonego obiektu takiej kolumny property TField.Origin przyjmuje
>> różne wartości w zależności od silnika bazy:
>> dla Firebird 2.5.5 TField.Origin = nazwisko_osoby <-- OK
> W nazwie tej kolumny nie ma spacji, gdyby była byłoby tak samo jak w
> Oracle.
>
>> dla Oracle 11.2.0.4 TField.Origin = "Nazwisko osoby" <-- ŹLE
> Dobrze.
>
>> dla MS SQL 2005 TField.Origin = [Nazwisko osoby] <-- ŹLE
> I tu też DOBRZE.
>
> Pojechałeś trochę za daleko - po pierwsze kto normalny wkłada spacje do
> nazwy obiektów w bazie danych?
> Da się, ale...
>
Przeczytaj dokładnie:
- w bazie kolumna ma nazwę nazwisko_osoby - bez spacji
- "Nazwisko osoby" to alias kolumny nazwisko_osoby w poleceniu select
Dla wszystkich baz, w obiekcie TField dla tej kolumny, powinno być:
TField.FieldName = Nazwisko osoby - bez ozdobników "..." czy [...] - i tak
jest!!!
TField.Origin = nazwisko_osoby - i tak jest tylko dla FB
> A po drugie - jak już masz tę spację, to jak sobie wyobrażasz napisanie
> SQL z taką kolumną bez użycia kwalifikatora identyfikatora?
> Takie zapytanie nie przejdzie z oczywistych względów:
> select * from tab
> order by Nazwisko osoby
>
przejdzie order by nazwisko_osoby bo to jest nazwa kolumny w bazie
> ale takie:
> select * from tab
> order by [Nazwisko osoby] jest prawidłowe dla MSSQL. Dla Oracle/FB będzie
> to podwójny cudzysłów.
>
to też przejdzie :)
>
>> Zgodnie z dokumentacją "TField.Origin indicates the name of the field in
>> its original database table".
> No i to jest ZGODNE z tym co jest napisane.
> A napisane masz "name of the field in its original database table" a nie w
> SelectSQL, prawda?
> Prawda.
>
> Jak masz spację w nazwach, to masz kłopot.
Patrz wyżej. Nazwa kolumny w bazie nie ma spacji.
>> Jakieś sugestie? Wszystkie mile widziane.
>> Pozdrawiam,
> Sugestia jest taka, że nie da rady tego zrobić bo tak działa FireDAC i
> koniec.
> Dawno temu dyskutowałem na ten temat z Dymitrym i dowiedziałem się, że się
> nie da, bo ta informacja jest wykorzystywana przez SQLCommandGenerator i
> jak wpiszesz tam... wróć - zapędziłem się. Nie o to pytałeś :)
Bingo!! Właśnie w celu wygenerowania polecenia do bazy winno służyć
TField.Origin, ale z tym co tam aktualnie jest umieszczane nie da się tego
zrobić.
> A więc sugestia jest taka: NIE UŻYWAJ SPACJI.
nie użyłem
>
> A nie wiem czy wiesz, ale żeby takie zapytanie poprawnie odpalić w FireDAC
> na różnych bazach danych (bo różne silniki wymagają różnych kwalifikatorów
> dla identyfikatora) musisz je odpowiednio zapisać w FireDAC, czyli tak:
>
> select * from tab
> order by {id Nazwisko osoby}
wiem, ale to inna bajka
>
> Poza tym, wszystko jest w dokumentacji...
bez komentarza
>
> --
> 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