Article View: pl.comp.lang.delphi.bazy-danych
Article #82702Re: FireDAC, TField.Origin
From: 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
Technical Details
Message-ID:
<57a48955$0$15206$65785112@news.neostrada.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!cyclone01.ams2.highwinds-media.com!voer-me.highwinds-media.com!peer01.am1!peering.am1!peer03.fr7!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mailReferences:
<57a31d68$0$639$65785112@news.neostrada.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!cyclone01.ams2.highwinds-media.com!voer-me.highwinds-media.com!peer01.am1!peering.am1!peer03.fr7!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail Subject: Re: FireDAC, TField.Origin Newsgroups: pl.comp.lang.delphi.bazy-danych References: <57a31d68$0$639$65785112@news.neostrada.pl> From: wloochacz <wloochacz@no.spam.gmail.com> Date: Fri, 5 Aug 2016 14:40:53 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <57a31d68$0$639$65785112@news.neostrada.pl> Lines: 65 Message-ID: <57a48955$0$15206$65785112@news.neostrada.pl> Organization: Telekomunikacja Polska NNTP-Posting-Host: 79.186.26.130 X-Trace: 1470400853 unt-rea-a-02.news.neostrada.pl 15206 79.186.26.130:49377 X-Complaints-To: abuse@news.neostrada.pl X-Received-Body-CRC: 2666234953 X-Received-Bytes: 3224 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit