Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Мерзопакость HyTech и JOIN'ы / 18 сообщений из 18, страница 1 из 1
25.03.2010, 13:33
    #36542105
NetFantom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
Столкнулся с этим выкидышем отечественного производства, и сразу огреб кучу проблем. Таких разработчиков нужно сортиры чистить отправлять, а тех взяточников что внедрял этот недопродукт в ГОС компаниях (ну 100% там деньги просто на этом дерьме наваривали) нужно к стенке ставить.
Простой пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
close table A1;
close table A2;
drop table A1;
create table A1(
       id    int key,
       str   char( 10 )
);
drop table A2;
create table A2(
       id    int key,
       str   char( 10 )
);

insert into A1 values( 1 ,'A1-1');
insert into A1 values( 2 ,'A1-2');
insert into A1 values( 6 ,'A1-6');

insert into A2 values( 1 ,'A2-1');
insert into A2 values( 2 ,'A2-2');
insert into A2 values( 3 ,'A2-3');
insert into A2 values( 4 ,'A2-4');

а теперь выполним
Код: plaintext
1.
select * from A1,A2
where A1.id *= A2.id;

вы думаете это просто INNER JOIN? Да хрен там, обломитесь. Это всегда что-то типа LEFT JOIN. И результсет зависит от порядка перечисления таблиц! А в документации сказано, что левое и правое объединение делаются с помощью "*=" и "=*".
Кто-нибудь сталкивался с этим монстром? Можно тут что-то сделать?
...
Рейтинг: 0 / 0
25.03.2010, 13:36
    #36542111
NetFantom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
NetFantom,

Сори, в предыдущем посте ошибка, выполняемый код именно:
Код: plaintext
1.
select * from A1,A2
where A1.id = A2.id;
...
Рейтинг: 0 / 0
25.03.2010, 13:38
    #36542120
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
Hello, NetFantom!
You wrote on Thu, 25 Mar 10 10:36:25 GMT:

NetFantom N> Сори, в предыдущем посте ошибка, выполняемый код именно:
N> select * from A1,A2
N> where A1.id = A2.id;круто.
а явные INNER JOIN и LEFT/RIGHT OUTER JOIN оно понимает?

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25.03.2010, 13:46
    #36542150
NetFantom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
Нет, такого синтаксиса вообще нет.
Я вообще молчу про то что имеется встроенный компилятор-декомпилятор хранимых процедур, который при декомпиляции "теряет" ковычки и (самое главное!) скобки. Т.е. скомпиляв
Код: plaintext
1.
2.
3.
4.
var a;
var b;
var c;
....
@a = ((@b = @c) <= 0 );
вы получите при декомпиляции
Код: plaintext
@a = (@b = @c <=  0 );
при это в документации:
Код: plaintext
Приоритет операции присваивания ниже приоритета всех операций отношения
зашибись просто...
...
Рейтинг: 0 / 0
25.03.2010, 13:58
    #36542201
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
NetFantom,

1. Хайтеч конечно г-но (да и написано на трубопаскале), но она создавалась когда конкурентами были FoxPro и Clipper. Не надо мерять сегодняшними мерками.
2.SQL для нее - совсем неродной интерфейс. Лучше и не пытайтесь. И без него глюков море. ->
3. Линкуйте напрямую ее либки (под древний компилятор) и используйте ее родной навигационный доступ.

Мог приврать, лет 15 прошло. Но если припрет, по моему архивах что то валялось.
...
Рейтинг: 0 / 0
25.03.2010, 14:00
    #36542218
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
Предотвращая подобные вопросы
МимопроходящийПривет, Plisteron!
Ты пишешь:
Plisteron
[Sorry, skipped]
P> После прочтения возник вопрос, который я адресую знатокам HyTech

это мифические существа.
хотя, допускаю, что коллега ЧАЛ, таки видел живьём,
представителей этой гипотетической (негуманоидной) цивилизации...

--
With best regards, Мимопроходящий.

Я не ЧАЛ )))
...
Рейтинг: 0 / 0
25.03.2010, 14:16
    #36542283
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
Hello, Siemargl!
You wrote on Thu, 25 Mar 10 11:00:23 GMT:

Siemargl S> Я не ЧАЛ )))а сразу так и не отличишь...

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25.03.2010, 14:24
    #36542312
NetFantom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
Siemargl,

HyTech начинал создавался в 94-95 году (по заявлениям разработчиков), когда уже были и Oracle и MSSQL. А если брать бесплатные то PostgreSQL и релиз MySQL в 95, так что не надо петь песни что это была "альтернатива". Это, скорее всего, было несколько талантливых математиков-программистов, которые заложили основы, а вот дальше над этим гиблым проектом трудились студенты-недоучки.
И как ему SQL-то не родным? =)) Роднее некуда. Я конечно не видел либы о которых вы говорите, но предполагаю что манипуляция данными все-равно на SQL диалекте ведется.
Да и не в этом дело - что же мне делать, если нужно сделать выборку в хранимой процедуре?
...
Рейтинг: 0 / 0
25.03.2010, 14:33
    #36542350
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
NetFantomSiemargl,

HyTech начинал создавался в 94-95 году (по заявлениям разработчиков), когда уже были и Oracle и MSSQL. А если брать бесплатные то PostgreSQL и релиз MySQL в 95, так что не надо петь песни что это была "альтернатива". Это, скорее всего, было несколько талантливых математиков-программистов, которые заложили основы, а вот дальше над этим гиблым проектом трудились студенты-недоучки.
И как ему SQL-то не родным? =)) Роднее некуда. Я конечно не видел либы о которых вы говорите, но предполагаю что манипуляция данными все-равно на SQL диалекте ведется.
Да и не в этом дело - что же мне делать, если нужно сделать выборку в хранимой процедуре?
Были, да не у нас. Жуткая экзотика была вообще сервер в перестройку, а уже тем более сервер БД (MSSQL тем более на чем, на Win3.11????)
PG и MY вообще относительно недавно стали юзабельными.

Когда я с HT работал, SQL там не видел в принципе. Скорее всего, дописали позже.

У Вас шансов нет. Только танцы вприсядку, летопись багов итп
Если одна процедура - еще ничего, а вот программу писать, это да...
...
Рейтинг: 0 / 0
25.03.2010, 14:37
    #36542364
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
Нашел в архивах ядро Hitech1.5. Дата октябрь 1991г.
...
Рейтинг: 0 / 0
25.03.2010, 14:39
    #36542371
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
Вот интерфейс. Все три раза Ку.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
#ifndef HYTECH_DEF
#define HYTECH_DEF
#ifdef __cplusplus
#include <mem.h>
extern "C"{
#endif
/* Вектор для HyTech задан как 123 (7Bh)                    */
/* Может быть изменен в переменной hytech_vector, но должен */
/* соответствовать параметру 'v' при загрузке ядра          */
extern	hytech_vector;

/* Блок Доступа к Результатам поиска (для функций Get...() ) */
struct	RESULT {
  void     far *buf;       /* Адpес буфеpа для чтения */
  unsigned buflen;         /* Длина буфеpа для чтения */
  unsigned rlen;           /* Число считанных байтов результатов */
  long     number;         /* Номер записи */
  char     reserve1[ 7 ];    /* Зарезервировано для системных целей */
  long     pos;            /* Позиция для перемещения указателя */
  char     reserve2[ 24 ];   /* Зарезервировано для системных целей */
};

/* Новый тип - Блок Доступа к Результатам */
typedef	struct RESULT RAB;

struct  BCB {
#ifdef __cplusplus
  BCB(){ ::setmem(this,sizeof(BCB), 0 ); }
#endif

  int    Operation;           /* Код опеpации             */
  int    RetCode;             /* Код возвpата             */
  int    SubSchema;           /* Обработчик подсхемы      */
  int    KeyNumber;           /* Номеp ключа              */
  void   far *Value1;         /* Адрес пеpвого поpогового значения ключа */
  void   far *Value2;         /* Адрес втоpого поpогового значения ключа */
  struct BCB far *Chain;      /* Указатель на следующий БДС в  цепочке   */
  long   ItemFound;           /* Число найденных записей  */
  struct RESULT far *Result;  /* Адрес Блока Доступа к Результатам поиска*/
  char   Reserved[ 27 ];        /* Зарезервировано для системных целей     */
  long   TimeMark;            /* Временная отметка                       */
};

/* Новый тип - Блок Доступа к Сервису СУБД */
typedef	struct BCB SAB;	

/*            Описатель поля записи в подсхеме              */
/* Адрес массива таких описателей содержится в поле Field   */
/* структуры SUBSCHEMA, указатель на которую можно получить */
/* при помощи функции SubSchemaInfo() */
struct	FIELD {
  char     type;		/* Тип поля (см. #define FLD_???) */
  unsigned len;			/* Длина поля    */
  unsigned ofs;			/* Смещение поля */
  int   number;                 /* Номер поля среди ключевых */
};

/* Константы, используемые для работы с полем type структуры FIELD */

#define	FLD_MSK	0xC0			/* Маска для вырезания признаков поля */
#define	FLD_DAT	0x00			/* Поле данных */
#define	FLD_KEY	0x40			/* Поле ключевое */
#define	FLD_UNC	0x80			/* Поле уникальное */

#define	FLD_TYP 0x3F			/* Маска для вырезания типа поля */
#define	FLD_ASC	0x00			/* Поле - массив символов ASCII */
#define	FLD_BYT	0x01			/* Поле - короткое целое (байт) */
#define	FLD_INT	0x02			/* Поле - целое со знаком */
#define	FLD_LNG	0x03			/* Поле - длинное целое */
#define	FLD_FLT	0x04			/* Поле - действительное */
#define	FLD_DUB	0x05			/* Поле - длинное действительное */

/* Описание подсхемы (длинный указатель на нее */
/*   возвращается функцией SubSchemaInfo() )   */
struct	SUBSCHEMA {
  long     BaseRec;               /* Число записей в подсхеме */
  unsigned RecordLen;             /* Длина записи в подсхеме  */
  int      Fields;                /* Число полей в подсхеме   */
  int      Keys;                  /* Число ключей в подсхеме  */
  char     Name[ 9 ];               /* Общий префикс имен файлов подсхемы   */
  char     Path[ 51 ];              /* Путь на файлы подсхемы   */
  struct   FIELD far *Field;      /* Указатель на описание полей подсхемы */
  char     Reserved[ 29 ];          /* Зарезервировано для системных целей  */
};


/* Функции работы с подсхемами */

int  SubSchemaOpen ( SAB *B, char * SubSchemaName, int Mode );
int  SubSchemaClose(int SubSchemaNum );
int  AllSubSchemasClose( void );
struct SUBSCHEMA far * SubSchemaInfo( int SubSchemaNum );

/* Константы, используемые как третий аргумент функции SubSchemaOpen() */
#define	S_PRIVATE  0      /* Подсхема используется в монопольном режиме */
#define S_SHARE    1      /* Подсхема используется в совместном режиме */



/* Редактирование записей БД */

int  RecordAdd   ( SAB *Block, int SubSchema, void *Record );
int  RecordDelete( SAB *Block, int SubSchema, long RecordNo );
int  RecordEdit  ( SAB *Block, int SubSchema, long RecordNo, void *Record );


/* Функции работы с результатами поиска */

int  GetOpen       ( SAB *Block, struct RESULT * Access );
int  GetNumbersRead( SAB *Block, void *ReadBuf, unsigned BufLen );
int  GetRead       ( SAB *Block, void *ReadBuf, unsigned BufLen );
long GetSeek       ( SAB *Block, long Pos, int Mode );
int  GetItemDelete ( SAB *Block, long ItemNo );
int  GetClose      ( SAB *Block );
int  GetPhysRecord ( SAB *Block, int SubSchema, long *RecordNumber, void *ReadBuf, unsigned BufLen );
int  SortRecords   ( SAB *Block, SAB *Result, int KeyNumber, int Order );

/* Константы, используемые как третий аргумент функции GetSeek() */
#define S_SEEK_CUR	 1        /* От текущей позиции */	
#define S_SEEK_END	 2        /* От конца */
#define S_SEEK_SET	 0        /* От начала */

/* Константы, используемые как четвертый аргумент функции SortRecords() */
#define SORT_ASC	 1 	/* В порядке возрастания */
#define SORT_DSC	 0 	/* В порядке убывания */

/* Функции поиска по одному ключу */

SAB  * KeyEqual      (SAB *B, int SubSchema, int KeyNumber, void *Value);
SAB  * KeyGreat      (SAB *B, int SubSchema, int KeyNumber, void *Value);
SAB  * KeyLess       (SAB *B, int SubSchema, int KeyNumber, void *Value);
SAB  * KeyGreatEqual (SAB *B, int SubSchema, int KeyNumber, void *Value);
SAB  * KeyLessEqual  (SAB *B, int SubSchema, int KeyNumber, void *Value);
SAB  * KeyInside     (SAB *B, int SubSchema, int KeyNumber, void *Value1, void *Value2);
SAB  * KeyMinimum    (SAB *B, int SubSchema, int KeyNumber, void *Value);
SAB  * KeyMaximum    (SAB *B, int SubSchema, int KeyNumber, void *Value);
SAB  * KeyNotEqual   (SAB *B, int SubSchema, int KeyNumber, void *Value);
SAB  * KeyNotGreat   (SAB *B, int SubSchema, int KeyNumber, void *Value);
SAB  * KeyNotLess    (SAB *B, int SubSchema, int KeyNumber, void *Value);
SAB  * KeyOutside    (SAB *B, int SubSchema, int KeyNumber, void *Value1, void *Value2);
SAB  * KeyNotMinimum (SAB *B, int SubSchema, int KeyNumber, void *Value);
SAB  * KeyNotMaximum (SAB *B, int SubSchema, int KeyNumber, void *Value);


/* Функции вертикального поска */

SAB  * AllKeyValues      (SAB *B, int SubSchema, int KeyNumber);
SAB  * ValuesByCondition (SAB *B, int KeyNumber, SAB *Cond);
SAB  * Implication       (SAB *B, int SubSchema, int KeyNumber, SAB *Cond, SAB *List);


/* Функции логических отношений для результатов поиска */

SAB  * NotResults (SAB *Block, SAB *Result);
SAB  * AndResults (SAB *Block, SAB *Result1, SAB *Result2);
SAB  * OrResults  (SAB *Block, SAB *Result1, SAB *Result2);


/* Функции специального поиска */

SAB  * MaxKeyValueInResult (SAB *B, int KeyNumber, void *Value, SAB *Res);
SAB  * MinKeyValueInResult (SAB *B, int KeyNumber, void *Value, SAB *Res);
SAB  * RecordsByKeyValues  (SAB *B, int SubSchema, int KeyNumber, SAB *List );
long   KeyHistogram        (SAB *B, int SubSchema, int KeyNumber);
long   ResultHistogram     (SAB *B, int KeyNumber, SAB *Res);


/* Прочие функции */

int    HyTech( SAB *Block );     /* Прямой вызов ядра */
int    HyTechBreak( void );      /* Прерывание текущей операции ядра */

int    ClearResults  ( SAB *Result );      /* Убить результаты для БДС */
int    TouchTimeMark ( SAB *Result );      /* Приведение временной метки */

int    ResultType( SAB *Result );     /* Определение типа результата */

/* Константы, описывающие коды возврата функции ResultType() */
#define RES_NPROC  - 1    /* БДС не обработан, или результаты удалены */
#define RES_HORIS    0    /* БДС содержит результаты горизонтального поиска */
#define RES_VERT     1    /* БДС содержит результаты вертикального поиска */
#define RES_HISTO    2    /* БДС содержит гистограмму */
#define RES_SORTED   3    /* БДС содержит отсортированные результаты горизонтального поиска  */

char far *ExtError( int *DosError, int *Operation );/* Получить информацию об ошибке В/В */
char far *TmpPath( void );			/* Каталог для временных файлов */
char *Version( char *Buffer15 );		/* Номер версии СУБД */

#ifdef __cplusplus
}
#endif

#endif
...
Рейтинг: 0 / 0
31.03.2010, 16:06
    #36553300
Simonik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
NetFantom,
Это всегда что-то типа LEFT JOIN. И результсет зависит от порядка перечисления таблиц!Отключи relation(1). Это специфический режим, который используется в особых случаях.
...
Рейтинг: 0 / 0
13.07.2010, 00:17
    #36737120
axlm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
Найн, мерзопакость это дельфёвые кодеры которые к ней клиентов пишут и основ сиквеля не знают, и метадологи которые не владеют своей предметной областью, а дбмэска очень стройная. Вполне годится для средних баз данных, бесплатна но виндовая и код закрыт. Так-что напрасно вы так хаите.
...
Рейтинг: 0 / 0
09.08.2010, 13:41
    #36782070
NetFantom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
axlm,

Вы один из разработчиков этой пакости, судя по всему. Потому что никто кроме разработчиков этой СУБД, да еще тех кто материально был заинтересован при протаскивании этого устаревшего хлама в гос контракты, слова доброго не услышишь.

Когда-то видимо это была не плохая задумка, начатая талантливыми программистами. На больше чем за пару десятков лет эта СУБД так и не вышла в продакшн, и место ей в песочнице.
Автомобиль Запорожец тоже в свое время. Но вот современные дети увидев его покрутят пальцем у виска или спросят "сам сделал?".Так же и с этим чудом, место ему в истории.
...
Рейтинг: 0 / 0
17.08.2010, 18:36
    #36796351
FSS
FSS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
а я хочу защитить HYTech. Для относительно небольших баз данных (порядка 20 Гб) отличная вещь!!! Зная основы SQL, достаточно быстро поняла "сложности" написания скриптов. Насчет JOIN, может пригодится:

1. Обычный join, или join по полной паре (=). Например, запрос

select a.field1, b.field2 from tab1 a, tab2 b
where a.field1 = b.field2;

выберет из таблиц tab1 и tab2 только те записи, у которых совпадают значения в полях field1 и field2 соответственно, и соединит их.

2. join по неполной паре (*=, =*, **).

2.1. Запрос

select a.field1, b.field2 from tab1 a, tab2 b
where a.field1 *= b.field2;

выберет из таблицы tab2 все записи и присоединит к ним те записи из tab1, у которых совпадают значения в полях field2 и field1 соответственно. В результате у тех записей из tab2, для которых не нашлось соответствий в tab1, присоединенные поля из tab1 будут пустые.

2.2. Запрос

select a.field1, b.field2 from tab1 a, tab2 b
where a.field1 =* b.field2;

выберет из таблицы tab1 все записи и присоединит к ним те записи из tab2, у которых совпадают значения в полях field1 и field2 соответственно. В результате у тех записей из tab1, для которых не нашлось соответствий в tab2, присоединенные поля из tab2 будут пустые.

2.3. Запрос

select a.field1, b.field2 from tab1 a, tab2 b
where a.field1 ** b.field2;

выберет все записи из таблиц tab1 и tab2 и попытается соединить их по полям field1 и field2 соответственно. У тех записей из tab1, для которых не нашлось соответствий в tab2, присоединенные поля из tab2 будут пустые; и наоборот соответственно - у тех записей из tab2, для которых не нашлось соответствий в tab1, присоединенные поля из tab1 будут пустые.

******
Так что все понятно!
...
Рейтинг: 0 / 0
07.09.2010, 10:32
    #36833415
NetFantom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
FSS,

Ага, а если сюда запостить документацию по PostgreSQL или MySQL? =)
Вообщем HyTech это
1. Старье
2. Не продакшн. Куча багов, в т.ч. связанных с целостностью данных, что вскрылось только при миграции
3. Скудная документация, полное отсутствие какой-либо поддержки.
...
Рейтинг: 0 / 0
09.09.2010, 12:14
    #36837721
FSS
FSS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
[quot NetFantom ,

Ага, а если сюда запостить документацию по PostgreSQL или MySQL? =)
quot]
Был конкретный вопрос, на него был дан конкретный ответ. Помощь оказалось не нужна, может другим это поможет?!
Насчет поддержки. Никто и не претендовал на вселенскую известность. Это и была российская разработка для госпредприятий. Конечным пользователям продукта оказывается прямое "адресное" хорошее сопровождение, мне есть с чем сравнивать.
...
Рейтинг: 0 / 0
30.09.2010, 08:06
    #36873507
брадобрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мерзопакость HyTech и JOIN'ы
В век OracleXE и PostgreSQL кто-то юзает такие поделки? жесть какая

хотя было дело, руководил IT департаментом, один старпер мне птался впарить какую-то залипуху на Cache. Я то ему все сказал что думаю про его поделку, так вот думаю ведь другого старпера он мог уговорить. По его словам он это уже несколько раз успешно проделал и поделие стоит в разных конторах.
...
Рейтинг: 0 / 0
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Мерзопакость HyTech и JOIN'ы / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]