Ошибка ms sql "нарушение атрибута с ограничением на тип данных"

ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Yufil
Ветеран движения
Сообщения: 898
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

Ошибка ms sql "нарушение атрибута с ограничением на тип данных"

Сообщение Yufil » 06 Октябрь 2017, 18:54

Тремя способами, в зависимости от настроения левой ноги :D

1. Программа LoadQueueFromSQL принимает дату и в текстовое поле формата ГГГГ/ММ/ДД чч:мм:cc , а при разборке если строка соответствует шаблону, это дело расписывается не в одно, а в два - дата и время. В одном из проектов время было нафиг не нужно, даты хватило, тогда ещё проще.
2. В SQL написана аккуратная функция, которая переводит поле DateTime ( в MS SQL DateTime - число с плавающей точкой, одна единица равнаяется одним суткам, час равен 1/24 и т.д в строку клариона ('дата время'), а дальше уже я сам.
3. Можно просто использовать CAST или CONVERT, дабы передать дату и время как хочется....

Ну и повторный проход по очереди тоже юзал... Только была функция типа QueueDateTime( *Queue Q, *? DatetimeField, *? DateField, *? TimeField)
Тогда один вызов преобразует нужное поле во всей очереди сразу.

P.S. - тестовое приложение в понедельник выложу...
LoadQueueFromSQL.zip
Загрузка в очередь
(783.8 КБ) 4 скачивания

Yufil
Ветеран движения
Сообщения: 898
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

Ошибка ms sql "нарушение атрибута с ограничением на тип данных"

Сообщение Yufil » 09 Октябрь 2017, 11:29

Оживил, слегка причесал и выложил пример использования https://mega.nz/#!twZlWbCA!sPfsQM-cIist ... bDU8jEyoHA , адаптирован для MS SQL (проверено на MS SQL 2012 Express)

gopstop2007
Ветеран
Сообщения: 894
Зарегистрирован: 25 Март 2009, 21:55

Ошибка ms sql "нарушение атрибута с ограничением на тип данных"

Сообщение gopstop2007 » 09 Октябрь 2017, 19:10

Yufil писал(а):
09 Октябрь 2017, 11:29
LoadQueueFromSQL.zip

Оживил, слегка причесал и выложил пример использования https://mega.nz/#!twZlWbCA!sPfsQM-cIist ... bDU8jEyoHA , адаптирован для MS SQL (проверено на MS SQL 2012 Express)
Спасибо огромное!
С уважением РА

gopstop2007
Ветеран
Сообщения: 894
Зарегистрирован: 25 Март 2009, 21:55

Ошибка ms sql "нарушение атрибута с ограничением на тип данных"

Сообщение gopstop2007 » 12 Октябрь 2017, 19:47

Yufil писал(а):
09 Октябрь 2017, 11:29
Оживил, слегка причесал и выложил пример использования https://mega.nz/#!twZlWbCA!sPfsQM-cIist ... bDU8jEyoHA , адаптирован для MS SQL (проверено на MS SQL 2012 Express)
Попробовал сегодня, спасибо - классная вещь :)
Только с ходу не нашел или не понял, как получить ошибку, если при правильном запросе нет результата

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

LoadQueueFromSQL('SELECT id, name FROM user WHERE id=5',,loc:id, loc:name)
IF Errorcode()
  Message('Запись не найдена')
ELSE
  ! делаем с этой записью что то
END
Поспешил, наверное так
IF loc:id <>0 AND LEN(CLIP(loc:name)) <> 0 THEN мое действие END

и очередь
IF RECORDS(Queue) THEN мое действие END

Привычка от TPS осталась :)
С уважением РА

Yufil
Ветеран движения
Сообщения: 898
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

Ошибка ms sql "нарушение атрибута с ограничением на тип данных"

Сообщение Yufil » 12 Октябрь 2017, 23:50

Собственно, Null преображается в 0 для числа и пустую строку для символьного поля. В 99% случаев это правильное поведение, а кому надо - пусть явно укажет. Поэтому в запросе будет возвращено id=0, name='', никакой ошибки Errorcode/FileErrorCode не будет.

Ответить