Article View: pl.comp.lang.delphi.bazy-danych
Article #80999Re: FireDAC, TField.Origin
From: wloochacz
Date: Fri, 05 Aug 2016 14:40
Date: Fri, 05 Aug 2016 14:40
64 lines
2163 bytes
2163 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
Message-ID:
<57a48955$0$15206$65785112@news.neostrada.pl>
Path:
polish.pugleaf.net!archive.newsdeef.eu!apf1.newsdeef.eu!news.usenet.farm!..!..!not-for-mail
References:
<57a31d68$0$639$65785112@news.neostrada.pl>