🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi.bazy-danych
Article #80999

Re: FireDAC, TField.Origin

#80999
From: wloochacz
Date: Fri, 05 Aug 2016 14:40
64 lines
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>