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

ODBC

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

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

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

Сообщение Yufil »

Тремя способами, в зависимости от настроения левой ноги :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 КБ) 267 скачиваний
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

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

Сообщение Yufil »

Оживил, слегка причесал и выложил пример использования https://mega.nz/#!twZlWbCA!sPfsQM-cIist ... bDU8jEyoHA , адаптирован для MS SQL (проверено на MS SQL 2012 Express)
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

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

Сообщение gopstop2007 »

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

Оживил, слегка причесал и выложил пример использования https://mega.nz/#!twZlWbCA!sPfsQM-cIist ... bDU8jEyoHA , адаптирован для MS SQL (проверено на MS SQL 2012 Express)
Спасибо огромное!
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

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

Сообщение gopstop2007 »

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 осталась :)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

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

Сообщение Yufil »

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