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
Author: "Trawnik"
Date: Thu, 04 Aug 2016 12:45
Date: Thu, 04 Aug 2016 12:45
15 lines
586 bytes
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
Author: 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
Re: FireDAC, TField.Origin
Author: "Jurek"
Date: Fri, 05 Aug 2016 23:19
Date: Fri, 05 Aug 2016 23:19
98 lines
3118 bytes
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