Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Developer
Ветеран
Сообщения: 527
Зарегистрирован: 26 Март 2012, 16:18

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Сообщение Developer » 09 Декабрь 2018, 23:00

Привет всем!

Есть ли подробные примеры соответствия типов Clarion типам SQL серверов?

В частности - как правильно описать в Dictionery и исходном коде Clarion тип "bigint" в Microsoft SQL Server и SAP Sybase SQL Anywhere для создания таблицы, в которой будет создан столбец с типом "bigint" из приложения Clarion и возможна корректная работа со всеми Clarion Database Drivers (ODBC, MSSQL, SQLAnywhere, Oracle, SQLite, Scalable) :wink:

Пожалуйста, предложите больше конкретных примеров соответствия типов Clarion и SQL и соответствующей информации :D
С Уважением, Developer

Developer
Ветеран
Сообщения: 527
Зарегистрирован: 26 Март 2012, 16:18

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Сообщение Developer » 10 Декабрь 2018, 0:25

Обнаружил ссылку - https://www.icetips.com/showarticle.php?articleid=146
но информация не совсем точна в действительности :(

bigint LONG - не работает :(

Код: Выделить всё

MSSQL              CLARION

datetime           TimeStamp structure
smalldatetime         "
timestamp             "
float              SREAL
real               REAL
decimal            DECIMAL
money               "
smallmoney          "
bigint             LONG
int                LONG
smallint           SHORT
tinyint            BYTE
bit                STRING(1)
sql_variant        STRING
ntext                "
text                 "
image                "
binary               "
uniqueidentifier   CSTRING(37)
nvarchar           STRING or CSTRING
nchar                "
varchar              "
char                 "
varbinary            "
С Уважением, Developer

Developer
Ветеран
Сообщения: 527
Зарегистрирован: 26 Март 2012, 16:18

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Сообщение Developer » 10 Декабрь 2018, 0:45

Вот ещё одна ссылка https://clarionmag.jira.com/wiki/spaces ... quivalents

Вопрос: какой Clarion тип данных использовать для работы со столбцами в базах SQL серверов типа "bigint" с максимальным значением 9223372036854775807 (8 Bytes) для автоинкрементных полей с Primary Key :?:

Код: Выделить всё

David Harms
Последнее изменение Apr 26, 2013
Most of the C types are from Carl Barnes' excellent Clarion Magazine article Compiling C with the Clarion IDE, Part 1: It's Easier Than You Think.

*	pass by address - <omittable>
&	pass by address - required
[#]	Array, use DIM(#). The name of an array is actually a pointer to the first element of the array. So arrays tend to be passed by address even though you do not see an asterisk.
char, unsigned char, signed char	BYTE, but probably a string type
char *, char[]	CSTRING or STRING (need RAW). If the array has a dimension number it tends to be a fixed length string e.g. char Digest[16] is a STRING(16). A char * could be a *BYTE, but it is rare.
char **	
This is a pointer to a pointer. There's an example of this in John Taylor's ClarionMag article Embedding The SQLite Engine In Clarion Applications. The C parameter is char **errmsg and the Clarion parameter is a Long.

You need to declare two variables, a CString reference and a Long:

CStringRef &CString
CStringRefAddress Long

You pass in the CStringRefAddress variable to the function call. If it comes back as a non-zero value, you obtain the string this way:

CStringRef &= (CStringRefAddress)

If the pointer is to a string array you use a similar technique. From John Christ:

The value returned by the function is a pointer to the 1st (or in C, 0th) element of an array of pointers to strings.

You dereference the pointer to to the first element and that is a pointer to the first string.

You add 4 (in 32 bit code, 8 in 64 bit code which doesn't yet exist in the Clarion world) to the original pointer and you are now pointing to the second pointer.

Add 4 again, the third pointer, and so on.

When the derefenced pointer is zero, you've reached the end of the array.

struct	GROUP (need RAW)
unsigned short	USHORT
signed short, short	SHORT
int, signed int,

long, signed long,

signed

SIGNED or LONG - UNSIGNED is Equate(Long)

unsigned, unsigned long, unsigned int

ULONG - avoid using the ULONG type in Clarion. The object code created for ULONG math uses the decimal library, which is much slower than the code used for a LONG. The UNSIGNED type is equated to a LONG, which is preferable.
float	SREAL
double	REAL
void	Usually appears as a return type, indicating that nothing is returned.
void *	This is a pointer to something. Use a LONG or UNSIGNED.
С Уважением, Developer

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2322
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Сообщение Дед Пахом » 10 Декабрь 2018, 2:20

Создай таблицу на сервере и импортируй в словарь, посмотри, какой тип данных драйвер ожидает.

А "9223372036854775807 " это сколько? сто тысяч триллионов. Записей в базе. Стесняюсь спросить, где ты работаешь.
С уважением, ДП

Developer
Ветеран
Сообщения: 527
Зарегистрирован: 26 Март 2012, 16:18

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Сообщение Developer » 10 Декабрь 2018, 2:23

Дед Пахом писал(а):
10 Декабрь 2018, 2:20
Создай таблицу на сервере и импортируй в словарь, посмотри, какой тип данных драйвер ожидает.

А "9223372036854775807 " это сколько? сто тысяч триллионов. Записей в базе. Стесняюсь спросить, где ты работаешь
Пробовал, не импортирует :(

Совместная работа со сторонней внешней большой SQL базой :mrgreen:
С Уважением, Developer

kreator
✯ Ветеран ✯
Сообщения: 3469
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Сообщение kreator » 10 Декабрь 2018, 13:39

Если сторонняя база, зачем создавать поле bigint? Мне сдаётся, что bigint сейчас неактуален. Поэтому не заморачиваются поддержкой в драйверах.
Тут надо понимать, что SQL первичней, чем Кларионовский словарь. Посмотри в хелпе "ODBC data types". И Скульных типов явно больше. Посмотри ещё раздел справки "Synchronizer Support for SQL Server 2008 Data Types". Вот навводили типов.
We are hard at work… for you. :)

Developer
Ветеран
Сообщения: 527
Зарегистрирован: 26 Март 2012, 16:18

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Сообщение Developer » 10 Декабрь 2018, 14:00

Может кто в курсе, как объявить в Dictionery и Clarion коде создание базы данных и таблицы с ключевым полем (столбцом) типа "bigint" с автоинкрементным ключом IDENTITY для Microsoft SQL сервера, а также autoincrement и IDENTITY для SQL SAP Sybase SQL Anywhere :?:
С Уважением, Developer

Developer
Ветеран
Сообщения: 527
Зарегистрирован: 26 Март 2012, 16:18

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Сообщение Developer » 10 Декабрь 2018, 14:07

kreator писал(а):
10 Декабрь 2018, 13:39
Если сторонняя база, зачем создавать поле bigint? Мне сдаётся, что bigint сейчас неактуален. Поэтому не заморачиваются поддержкой в драйверах.
Тут надо понимать, что SQL первичней, чем Кларионовский словарь. Посмотри в хелпе "ODBC data types". И Скульных типов явно больше. Посмотри ещё раздел справки "Synchronizer Support for SQL Server 2008 Data Types". Вот навводили типов.
А что актуально - GUID в Primart Key?

Просто сначала сторонняя база а затем своя - аппетит заказчиков приходит во время работы :D
С Уважением, Developer

Developer
Ветеран
Сообщения: 527
Зарегистрирован: 26 Март 2012, 16:18

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Сообщение Developer » 10 Декабрь 2018, 14:10

kreator писал(а):
10 Декабрь 2018, 13:39
Посмотри ещё раздел справки "Synchronizer Support for SQL Server 2008 Data Types". Вот навводили типов
Kreator, спасибо за подсказку :D

Не в тему - почему-то у меня не работает синхронизация в Dictionery c SQL серверами или я неправильно что делаю?
С Уважением, Developer

kreator
✯ Ветеран ✯
Сообщения: 3469
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Сообщение kreator » 10 Декабрь 2018, 14:22

Я в таком случае написал бы скрипт и всё:

Код: Выделить всё

Examples:

SQLFile{PROP:SQL}='SELECT field1,field2 FROM table1'     |
          & 'WHERE field1 > (SELECT max(field1)'  |
          & 'FROM table2'                            !Returns a result set you 
                                                     ! get one row at a time
                                                     ! using NEXT(SQLFile)
SQLFile{PROP:SQL}='CALL GetRowsBetween(2,8)'          !Call stored procedure
SQLFile{PROP:SQL}='CREATE INDEX ON table1(field1 DESC)' !No result set
SQLFile{PROP:SQL}='GRANT SELECT ON mytable TO fred'   !DBA tasks
SQLString=SQLFile{PROP:SQL}                           !Get last SQL statement
We are hard at work… for you. :)

Developer
Ветеран
Сообщения: 527
Зарегистрирован: 26 Март 2012, 16:18

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Сообщение Developer » 10 Декабрь 2018, 14:29

SQL скрипт это возможное решение - но тогда теряем преимущества Clarion Dictionery :wink:
С Уважением, Developer

kreator
✯ Ветеран ✯
Сообщения: 3469
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Сообщение kreator » 10 Декабрь 2018, 15:03

Developer писал(а):
10 Декабрь 2018, 14:29
SQL скрипт это возможное решение - но тогда теряем преимущества Clarion Dictionery :wink:
Ничего не теряем. Кларионовское приложение работает через словарь. И пусть работает! А, если какие-то вещи на SQL-сервере сделать проблематично, есть скрипты. Может быть я даже с Вами соглашусь, что и настройка полей в словаре должна быть гибче, и настройка индексов, и чтобы можно было триггеры создавать из словаря, и хранимки. Но это несбыточная мечта. Даже может быть специфика. Вы так работает, ещё может быть кто-то. А у других в основном другой сценарий.
И, может быть Вы не знаете, повторюсь. Для посылки SQL-запросов, не возвращающих данные, на сервер необязательно открытия таблиц (файлов). Можно скрипт по созданию объектов на серваке и т.д. выполнять в самом начале программы, не мешая работе уже написанного кода.
We are hard at work… for you. :)

Ответить