🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi.bazy-danych
3 messages
3 total messages Started by "Trawnik" Thu, 04 Aug 2016 12:45
FireDAC, TField.Origin
#80998
Author: "Trawnik"
Date: Thu, 04 Aug 2016 12:45
15 lines
586 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
#80999
Author: 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
Re: FireDAC, TField.Origin
#81000
Author: "Jurek"
Date: Fri, 05 Aug 2016 23:19
98 lines
3118 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