Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: CONVERT_IMPLICIT

Доброго времени суток!
Заметил непонятное. Есть таблица параметров, в ней поле значение Value varchar(50) null, есть переменная @order varchar(50).
В одном из запросов, где есть фильтр на Value=@order, в плане заметил, что для @order применяется CONVERT_IMPLICIT(varchar, @order, 50). Почему такое может происходить? Ведь размерность и тип данных одинаковые, чего то я недопонимаю?

Microsoft SQL Server 2008 R2 (SP3)
Ответ: o-o,

Спасибо за информацию. Посмотрел - у базы такой же как на сервере.
Вопрос: Cognos. Не работает связка IF THEN ELSE.

Всех приветствую, в очередной раз.

Задача стояла такая, указать первое число месяца, следующего за отчетным.
Пользователь на странице приветствия выбирает год и месяц отчета. месяца заданы, как статические варианты выбора.
+картинка
В отчете сделал текстовый элемент, настроил формат вывода даты, тип источника указал "выражение отчета"
+выражение следующее
IF (string2int32(ParamValue('MONTH')) >=10 )
THEN
(string2date (ParamDisplayValue('YEAR')+'-'+number2string (string2int32 (ParamValue('MONTH'))+1)+'-01') )
ELSE
(string2date (ParamDisplayValue('YEAR')+'-0'+number2string (string2int32 (ParamValue('MONTH'))+1)+'-01') )

Тут видно, если номер месяца больше или равен 10, то используем его без всяких изменений, иначе, добавляем перед номером месяца "ноль"
Но вот с чем я столкнулся, эта конструкция не работает. Работает отдельно без ELSE
+ эта
IF (string2int32(ParamValue('MONTH')) >=10 )
THEN
(string2date (ParamDisplayValue('YEAR')+'-'+number2string (string2int32 (ParamValue('MONTH'))+1)+'-01') )
+или эта
IF (string2int32(ParamValue('MONTH')) <10 )
THEN
(string2date (ParamDisplayValue('YEAR')+'-0'+number2string (string2int32 (ParamValue('MONTH'))+1)+'-01') )
но с ELSE отрабатывает только то, что указано до ELSE.
Кто -нибудь сталкивался с подобным поведением Gognos?

PS: пока не обращайте внимания на то, что в выражениях не учитывается переход по годам, пока бы разобраться с поведением конструкции. У меня Cognos 10.2.1 FP6
Ответ: Ничего проще не придумал, как создать в одной ячейке два текстовых элемента, с содержимым в виде вычисляемого отчета.
Отчеты те же самые.
Если условие не выполняется, то элемент становиться пустым текстовым элементом и его не видно.
Т.е. когда месяц до октября (например август) то получаем на выходе следующее: текстовый элемент "по состоянию на ", текстовый элемент "1 сентября 2015 г.", текстовый элемент "(пусто)".
Когда месяц октябрь-декабрь (например ноябрь) то получаем на выходе следующее: текстовый элемент "по состоянию на ", текстовый элемент "(пусто)", текстовый элемент "1 декабря 2015 г.".
Вопрос: не работает скрипт по On Timer

Добрый вечер. Помогите разобраться в следующей проблеме.

у меня на форме на свойте On Timer каждые 5 минут отрабатывает скрипт, которые обрабатывает xml файлы.

когда компьютер разлочен, то все работает нормально, но когда я его залочиваю, то скрипт по таймеру может еще поотрабатывать час полтора и затем останавливается. в чем может быть проблема?

Спасибо
Ответ: Сделал несколько действий: что помогло не могу точно сказать:

Накатил все патчи на window
проапгрейдил офис с 7 до 10
поставил все патчи на 10й офис


сейчас работает как часы
Вопрос: Когда использовать WITH (NOLOCK)?

Документацию читал, но:
1. Когда следует использовать WITH (NOLOCK)?
2. Когда не следует использовать WITH (NOLOCK)?
Просьба отвечать своими словами, а не кидать ссылки столетней давности.
Ответ:
o-o
приведите плиз пример на read committed, чтобы такое получить.



автор
Транзакции, работающие на уровне изоляции READ COMMITTED, используют совмещаемые блокировки, однако блокировки строк и страниц снимаются после чтения строки. В любом случае, если во время сканирования индекса другой пользователь изменит ключевой столбец индекса для строки, считывание которой происходит в данный момент, причем строка была перемещена в позицию, до которой операция сканирования еще не дошла, эта строка может появиться повторно. Аналогично, если изменение ключа переместило строку в позицию, считывание которой уже прошло, то она может не отобразиться.
Вопрос: Как бы лучше работать с Дата/Время?

Как бы лучше работать с Дата/Время? Имеется ввиду ввод, хранение и чтение...

До этого использовали только свойства типа %Date... Но теперь нужно и время. Все еще усложняется тем, что данные будут вводить в CSP-страничке, а потом это все будет записываться в DBF-файл.
Форматы нужны в итоге такие:
ТипФормат
ДатаДД.ММ.ГГГГ
ВремяЧЧ:ММ:СС

----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
Ответ:
Alexey Maslov
ИМХО, правильно терзают :) Выбор формата хранения данных в БД в последнюю очередь должен зависеть от формата выходных данных, а в первую очередь - от того, какие запросы будут преобладать. E.g., будет ли поиск по дате и по интервалам дат, будет ли отдельный поиск по времени.
Представьте, что у вас будет поиск по дате и по интервалам дат (но не времени), тогда при формате TIMESTAMP время ляжет избыточным бременем на индекс, следовательно, замедлится и скорость. Либо придется делать вычисляемые поля и строить индекс по ним - не головная боль ли это?
Это соображения сугубо прагматические, "классиков", возможно, еще покоробило бы, что тип TIMESTAMP противоречит 1НФ. Мы не будем об этом спорить :) Я когда-то тоже мучился подобным выбором, и выбрал раздельное хранение Date и Time (в стандартном формате Cache) именно погоняв запросы, которые на этапе проектирования считались типовыми :)
На DC вышла статья на эту тему:
Представленный там трюк подходит лишь для частного случая: когда TimeStamp1 < TimeStamp2 if and only if ID1 < ID2 for all IDs and TimeStamp values in table и в запросах учитывается вся отметка (дата/время) целиком.

В общем случае целесообразней использовать , позволяющие очень быстро искать как по отметке целиком, так и её частям или совокупности частей.
Состав подобного индекса со временем может безболезненно дополняться новыми неучтёнными комбинациями.
Кроме того в нём можно хранить данные необязательно в отображаемом виде ["2016-07-01"], а например в логическом [64100] для экономии дисковой памяти.

При всём при этом отметка хранится именно как %TimeStamp, а не два отдельных поля %Date и %Time.
+ Повторил тест с задействованием "умного" индекса и беспорядочной последовательностью ID:
Class sqlru.TSOrder Extends (%Persistent%Populate)
{

Index Extent [ ExtentType = bitmap ];

Index iSmartTS On (TS(KEYS), TS(ELEMENTS));

Index iTS On TS;

Property TS As %TimeStamp(MAXVAL "2016-07-31 23:59:59.999999"MINVAL "2016-07-01 00:00:00.000000");

Property Data As %String(MAXLEN 200MINLEN 100);

ClassMethod TSBuildValueArray(
  
value,
  
ByRef arrayAs %Status
{
  
value="" {
    
array(0)=value
  
}else{
    
date=$p(value," ",1),
    
time=$p(value," ",2),
    
array("date")=date,
    
array("time")=time,
    
array("ddhh")=$p(date,"-",3)_"-"_$p(time,":",1)
  
}
  
q $$$OK
}

ClassMethod Fill(= {30e6})
{
  
..%KillExtent(), ..Populate(N), ..%BuildIndices(,,,$$$NO), $system.SQL.TuneTable("sqlru.TSOrder",$$$YES), $system.OBJ.Compile("sqlru.TSOrder","cu-d")
}

}
Результаты из Портала:

select distinct null from sqlru.TSOrder where TS between {ts '2016-07-01 00:00:00.00000'} AND {ts '2016-07-01 23:59:59.999999'}

2.431 cекунд
2107560 глобальных ссылок
(количество выбранных записей 967378, используется обычный индекс)

select distinct null from sqlru.TSOrder where for some %element(TS) (%key='date' and %value '2016-07-01')

2.332 cекунд
1934766 глобальных ссылок
(количество выбранных записей 967378, используется "умный" индекс)

select distinct null from sqlru.TSOrder where for some %element(TS) (%key='ddhh' and %value '01-13')

0.102 cекунд
80754 глобальных ссылок
(количество выбранных записей 40372, используется "умный" индекс)

PS: у Kyle ошибка в коде:
Property Data as %String (MAXLEN=100MINLEN=200);
Вопрос: Не работает UPDATE mysql

Точнее, работает, но phpmyadmin выдает затронуто 0 строк, хотя строка в базе есть

я предполагаю, что проблема здесь

Потому если написать `bread_crumb` = "44445" все работает, я как понимаю какие символы что ли использую ни те? Тип поля bread_crumb - text

UPDATE hi_caches SET `bread_crumb` = "44445" WHERE `material` = "68683" LIMIT 1


работает

UPDATE hi_caches SET `bread_crumb` = "&lt;ul class=&quot;bread_crumb&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://tvoy*adres.ru&quot;&gt;Главная&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://tvoy*adres.ru/index.php?region=31&quot;&gt;Республика Татарстан&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://tvoy*adres.ru/index.php?region=31&amp;city=25&quot;&gt;Казань&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://tvoy*adres.ru/search.php?region=31&amp;city=25&amp;type=8&quot;quot;&gt;Районы&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;"
WHERE `material` = "68683" LIMIT 1


не работает
Ответ: Там должна была быть одно, это таблица кеширования, я просто когда переписывал и перезапуска, походу не дождался окончания предыдущего, вот и за дублировался.

А вы курсе чем лучше сжимать данные перед передачей в базу на запись, чтоб там сжатые уже хранились, а то у меня база уже почти 10 ГБ весит, вот и пришлось делать частичное кеширование, иначе все жестко тормозило
Вопрос: Иерархический запрос завис (год работал)

Добрый день. Очень нужна помощь.
Есть маленький запрос вида
SELECT
(SELECT d.psid
FROM sps.vw_dept_l d
WHERE connect_by_isleaf = 1
START WITH d.psid = st.pid
AND d.ondate <= sysdate
AND d.todate > sysdate
CONNECT BY psid = prior tpsid
AND d.ondate <= sysdate
AND d.todate > sysdate
AND d.tpsid IS NOT NULL) upr
FROM sps.vw_stat_l st
WHERE st.sid = :SID

sps.vw_stat_l, sps.vw_dept_l маленькие таблички справочники
запрос успешно работал больше года и вдруг стал виснуть намертво, к администрированию базы доступа у меня нет, админ клянется, что ничего не трогал.
Важное замечание - запрос не виснет если его запустить через Developer, но если использовать через клиент (в отчеты типа Reports, написаны на delphi (программист delphi тоже клянется что ничего не трогал)) так что проблема легко решается, если оформить получение результата запроса в пакетную функцию и вызывать эту функцию из отчета.
Но теперь я крайняя - из-за чего могла произойти поломка?
Ответ: Оракл вообще страшно глючная штука.

Вот имеется, например, запрос и отлично работает из sql*plus или еще какого другого девелопера
SQL> select t1.id, t2.x
  2    from    (select (connect_by_root n.id) root_id, n.id
  3               from t n
  4             start with n.id in (1, 2)
  5             connect by prior n.parent_id = n.id) t1
  6         left join
  7            (select 1 id, 'X' x from dual) t2
  8         on t1.root_id = t2.id;

        ID X
---------- -
         1 X
Думаешь ну отлично, теперь добавлю его в хранимый код и пусть клиент его дергает. Но не тут то было
SQL> create or replace procedure p(rc out sys_refcursor)
  2  as
  3  begin
  4
  5     open rc for
  6        select t1.id, t2.x
  7          from    (select (connect_by_root n.id) root_id, n.id
  8                     from t n
  9                   start with n.id in (1, 2)
 10                   connect by prior n.parent_id = n.id) t1
 11               left join
 12                  (select 1 id, 'X' x from dual) t2
 13               on t1.root_id = t2.id;
 14
 15  end;
 16  /

Warning: Procedure created with compilation errors.

SQL>
SQL> sho err
Errors for PROCEDURE P:

LINE/COL ERROR
-------- -----------------------------------------------------------------
6/7      PL/SQL: SQL Statement ignored
6/7      PL/SQL: ORA-00600: internal error code, arguments: [qctcte1],
         [0], [], [], [], [], [], [], [], [], [], []
Если добавить cast, то проблема решается
SQL> create or replace procedure p(rc out sys_refcursor)
  2  as
  3  begin
  4
  5     open rc for
  6        select t1.id, t2.x
  7          from    (select cast(connect_by_root n.id as number) root_id, n.id
  8                     from t n
  9                   start with n.id in (1, 2)
 10                   connect by prior n.parent_id = n.id) t1
 11               left join
 12                  (select 1 id, 'X' x from dual) t2
 13               on t1.root_id = t2.id;
 14
 15  end;
 16  /

Procedure created.
Но суть в том, что один и тот же запрос сам по себе нормально работает, но при добавлении его в хранимый код возникает ORA-00600.
С таким же успехом можно найти случай когда возникает не ORA-00600 а ORA-03113 и не при компиляции а при выполнении и кучу других вариантов.
Вопрос: Запрос работает в SQLExpress 2005 и не работает в SQLExpresss 2012

Уважаемые гуру, требуется ваша помощь.
Есть вот такой запрос:
SELECT * FROM [grdb].[dbo].[GTP_CurrentValues] WHERE  (YEAR(dt) = YEAR(GETDATE())) AND (MONTH(dt) = MONTH(GETDATE()))

и он замечательно работает в SQLExpress 2005.
Переношу задачу на новый сервер SQLExpress2012 (подобных запросов ТУЧА и они много сложнее) и результат - возвращается 0 строк. Если модифицировать его вот так -
SELECT * FROM [grdb].[dbo].[GTP_CurrentValues] WHERE  (YEAR(dt) = YEAR(GETDATE())) AND (MONTH(dt) = 1)
, т.е. конкретизировать значение второго параметра, выборка происходит корректно. Т.е. если несколько раз внутри одного запроса вызвать GETDATE(), получаем в итоге дырку от бублика, причем без ошибок.
Можно ли что-нибудь покрутить в настройках, чтобы существующие запросы таки работали? Можно, конечно, надекларить переменных и сформировать запрос, но этот вариант смерти подобен.
Ответ:
Иван2016
Программа _сдана в промышленную эксплуатацию_ 2 года назад. Финансировать никакие телодвижения никто не будет, вышеописанный нюанс выявлен только при переходе на новый SQL и более производительное железо. Система управляет теплогенераторами суммарной мощностью около 500 МВт в час, каждый размером с 5-ти этажный дом. Любая неточность в расчетах приведет к _милионным_ штрафам в сутки. На изменения при этом никто не выделит _ни копейки_.
Что сказать, обычное дело, когда ответственные промышленные решения разрабатывают студенты-дилетанты, и что после внедрения и подписания актов все на всё забивают, даже не думая о необходимости техподдержки (хотя поддержка обычно предусматривается даже для вполне надёжных серийных решений вполне уважаемых фирм).
Вопрос: С какой БД лучше работать, если знаешь HTML?

Добрый день, сейчас закидаете камнями я знаю. Но простите меня за этот флуд - юзера.

Работаю в вузе, что -то типо системного администратора, но по правде просто шарю чуть больше чем опытные юзеры. К своему большому сожалению, я не знаю языков программирования кроме как HTML. Поэтому работаю в основном с сайтом и по всякай мелочи. Дали задачу создать с нуля базу данных, я решил что я как самый хитрожопый сделаю это через access2007. Это же такой удобный интерфейс. в школе даже учат....Но когда я стал сталкиваться с множеством неудобств( скорее всего из -за того что уровень моих знаний равен =1 из 10000000.) Мне пришлось писать через вижуал бесик модули и sql запросы. На изучения которых уходили день и ночь. Так вот в чем загвоздка, мне поставили задачу чтоб понятнее было ( что-то на подобии базы деканат). Которые используют в вузах, у нас она есть...Разработчик который нам её написал требует хорошую сумму за новую на подобии её но с другими формами и отчетами. Решили раз у нас есть свой человек в отделе, пусть пишет. Так вот, знания у меня нулевые, а базу сделать надо. На каком языке програмирования её писать и в какой среде? Разумеется с многопользовательским режимом. Скорее всего на свой сервак. Так вот в какой среде мне будет проще разобраться для моией задачи. Английский тоже не знаю совсем. Так что жду ваших идей. Платить и т.п. не вариант, отказаться не позволят...
Ответ: И ещё уточнение - MSSQL работает на платной Windows. А серверная Windows ещё более платная.
Вопрос: Не работают фильтры

На компьютере пользователя установлен Windows 2010, Office 2013, в том числе Access 2013.
Дополнительно на компьютер установлен Office 2003 в составе только Access 2003.
На компьютер пользователя скопирован файл ADP, в котором нет ничего, кроме подключения.
Проект запущен на компьютере пользователя, введён логин и пароль, видны таблицы и запросы.
Открываю таблицу из нескольких сотен записей.
Внизу в области перехода появляется: запись 1 из 872
Встаю на непустое симольное поле. в непервой записи.
Внизу в области перехода появляется: запись 41 из 872
Вызываю контекстное меню.
Выбираю пункт "фильтр по выделенному".
В результате:
Количество записей не меняется.
Текущей становится первая запись.
Фильтр "не работает".
Внизу в области перехода появляется: запись 1 из 872 (Фильтр)

Сортировка работает нормально.
При попытке создать VBA код для простейшего проекта все ссылки находятся и компиляция идёт успешно.
Но в предельном случае проект чистый, без форм, отчётов, VBA.

Установил на комп РАНТАЙМ. Тоже фильтры на этом пользовательском компьютере не работают. Ни родные, ни созданные из специального контекстного меню.
Прошу посоветовать: где именно следует поискать причину.
Могут ли какие-нибудь настройки Access 2013 портить таким образом картину?
спасибо.
Ответ: Спасибо.
Первым шагом, когда получу доступ к компу пользователя, будет проверка версии библиотеки mscdm.dll , попытка накатить более старую и проверка работоспособности фильтров в таблицах.