Dmitry.niimm
Junior Member / Новичок
Участник № / Member № 3380
отправлено / posted
Добрый (а, может, и не очень) день,
Нарыл я тут сразу несколько непоняток связанных со строками:
1. Создаем FBD программу с двумя аргументами типа STRING, один из них (s1) типа IN, второй (s2) - OUT. Пытаемся копировать s1 в s2 блоком move. После запуска в профайлере видим, что канал получает признак недостоверности и, соответственно, висит и не пересчитывается.
Абсолютно аналогичные результаты получаются если вместо FBD блока move использовать самописную ST-функцию, в теле которой делать переприсваивание строк. Более того, в процессе ковыряния выяснено, что для того, чтобы подвесить канал, достаточно из FBD вызвать функцию с одним входным аргументом: FUNCTION_BLOCK ff VAR_INPUT si : STRING; END_VAR var s : STRING; end_var s = si; END_FUNCTION_BLOCK
2. В табличном редакторе аргументов невозможно корректно ввести строковую константу - без кавычек ввод не воспринимается, а если вводить с кавычками - то последние тоже попадают внутрь строки, что есть совсем нехорошо.
3. Предыдущий пункт касается также редактора SQL запросов, что приводит к неудобствам при проверке запросов.
4. Вот нужно мне в базу ложить дату/время. Естественно, SQL драйвер не желает, да и не имеет право желать получения даты в виде каких-то там секунд не поймешь с какой даты, а честно ждет строку, только вот кто ее ему даст? И приходится создавать лишний канал типа TIME для конвертации времени в строку, что не только не есть хорошо, но и может иметь неприятности, а именно:
а) в некой программе мы вычислили несколько параметров, в том числе и типа дата/время, которые нужно положить в базу, и активировали SQL канал посылкой в него номера запроса; б) каналом TIME преобразовали время в строку; в) каналом SQL положили все данные в базу.
Вроде все нормально, только вот где гарантия, что пересчет каналов будет идти именно в таком порядке, а не в порядке а) в) б) и в запрос попадет неактуальное значение timestamp'а?
5. (в дополнение к п.4) А как, собственно, можно ввести строковую константу типа DATE_AND_TIME в редактор аргументов SQL запроса?
Заранее благодарю за разъяснения/исправления/дополнения.
отправлено / posted
1. FBD-блоки не работают со строчными типами данных. 2. Проверил в табличном редакторе аргументов программ – кавычки в строку не попадают.
4. Предусмотреть все возможные типы данных во всех существующих базах данных не представляется возможным. Механизм пересчета базы каналов описан в разделе справки Каналы и системные переменные \ Пересчет базы каналов. К тому же, можно достаточно легко написать свой алгоритм управления пересчетом каналов.
5. Значение аргумента типа DATE_AND_TIME задается в формате dt#yyyy-mm-dd-hh:mm:ss (год, месяц, день, час, минута, секунда).
Сообщения / Posts 58 | Из / From: Украина
| IP / IP: IP адрес / IP address |
Dmitry.niimm
Junior Member / Новичок
Участник № / Member № 3380
отправлено / posted
Спасибо за ответ, все понятно, за частичным исключением п.2: _двойные_ кавычки не попадают, а вот от одинарных открывающая попадает, а закрывающая - нет.
Но это касается редактора аргументов, а в редакторе SQL запросов кавычки не убираются совсем, и при тестировании запроса приходится кавычки из текста запроса убирать, а потом, для работы монитора, вставлять обратно.
отправлено / posted
Это происходит только в редакторе при отладке, в реальном времени все нормально. Поправим.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
drooha
Forum Haunter / Завсегдатай форума
Участник № / Member № 3306
отправлено / posted
Хотелось бы узнать есть ли в языке Техно ST какая нибудь функция для перевода числа в строку и наоборот??
отправлено / posted
Специальных функций преобразования таких данных друг в друга нет. Число конвертируется в свое строковое отображение. Строка конвертируется в число, если она представляет собой строковое отображение числа.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |