Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 SQLVar TableAlias  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9740
Есть запрос, в котором одна таблица джойнится дважды. Пусть будет типа такого
SELECT
  mod1."NAME",
  mod2."NAME"
FROM
  moduls mod1,
  moduls mod2

Вопрос - можно ли как-то получить алиасы таблиц для двух полей? Сами таблицы можно получить через
SqlVar.RelName
но для этих полей RelName одинаков. Можно ли как-то выкусить именно алиасы таблиц

Сервер Interbase 2009/XE3

С уважением, Vasilisk
5 окт 17, 16:42    [20845938]     Ответить | Цитировать Сообщить модератору
 Re: SQLVar TableAlias  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 247
_Vasilisk_,

Вообще не понятно. Откуда выкусить? Алиасы работают только в запросах.
5 окт 17, 16:58    [20846000]     Ответить | Цитировать Сообщить модератору
 Re: SQLVar TableAlias  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9740
KreatorXXI
. Откуда выкусить?
Из подготовленного стейтмента
IBSQL1.SQL.Text := .......
IBSQL1.Prepare;
ShowMessage(IBSQL1.Fields[0].SqlVar.RelName);
5 окт 17, 17:07    [20846056]     Ответить | Цитировать Сообщить модератору
 Re: SQLVar TableAlias  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7275
_Vasilisk_,

не проще ли в самом запросе нормальные алиасы полям давать?
5 окт 17, 17:08    [20846062]     Ответить | Цитировать Сообщить модератору
 Re: SQLVar TableAlias  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 43631

_Vasilisk_
но для этих полей RelName одинаков. Можно ли как-то выкусить именно алиасы таблиц

Sqlvar.AliasName?..

Posted via ActualForum NNTP Server 1.5

5 окт 17, 17:09    [20846064]     Ответить | Цитировать Сообщить модератору
 Re: SQLVar TableAlias  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9740
Dimitry Sibiryakov
Sqlvar.AliasName?..
Там алиас поля
SELECT
  mod1."NAME" AS "MOD1_NAME",
  mod2."NAME" AS "MOD2_NAME"
FROM
  moduls mod1,
  moduls mod2

Для первого поля возвращаются такие значения
ПолеЗначения
RelNamemoduls
SqlNameNAME
AliasNameMOD1_NAME

Можно ли добраться до mod1? Или хотя бы до mod1."NAME"
5 окт 17, 17:17    [20846092]     Ответить | Цитировать Сообщить модератору
 Re: SQLVar TableAlias  [new]
чччД
Guest
_Vasilisk_, э... ну, вот костыль (направление):

uses SqlTxtRtns;
...
var
  fFields: TStringList;
  fParser: TSQLParser;
  fDotPos: Integer;
begin
...
  fParser := TSQLParser.Create(pFIBQuery1.SQL.Text);
  fFields := TStringList.Create;
  try
   fFields.Text := fParser.GetFieldsClause;
   fDotPos := Pos('.', fFields[0]);
   if fDotPos > 0 then
     ShowMessage(Copy(fFields[0],1, fDotPos - 1))
5 окт 17, 17:51    [20846179]     Ответить | Цитировать Сообщить модератору
 Re: SQLVar TableAlias  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9740
чччД
ну, вот костыль
Так и я умею :)

Вопрос возник по мотивам MySQL
typedef struct st_mysql_field {
  char *name;                 /* Name of column */
  char *org_name;             /* Original column name, if an alias */
  char *table;                /* Table of column if column was a field */
  char *org_table;            /* Org table name, if table was an alias */
  char *db;                   /* Database for table */
  char *catalog;	      /* Catalog for table */
  char *def;                  /* Default value (set by mysql_list_fields) */
Думал и в IB есть нечто подобное
5 окт 17, 20:15    [20846423]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить