На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
Страницы: (3) [1] 2 3  все  ( Перейти к последнему сообщению )  
> Непонятки с датой
    На своём компе поставил MS SQL Server и в запросах из делфей использую следующий формат дат: yyyy-mm-dd, все работает, переношу прогу на другой компьютер, где в свою очередь, тоже стоит MS SQL Server с этой же базой, при попытке сделать запрос вылетает исключение - мол не могу конвертнуть дату, если же исправить формат даты на dd.mm.yyyy, то все пашет, но дома у меня так не работает. Короче, если кто-нить что-нить понял, объясните мне пожалуйста, как сделать "универсальный" формат даты?
      Универсальный формат - "YYYYMMDD HH:MM:SS".
      Ещё можно использовать команду "SET DATEFORMAT". В качестве аргумента передаётся "mdy", "ymd". А потом задавать дату в программе в соответствующем формате. Но эта команда действительна только внутри текущего коннекта.
        Цитата Lector @ 30.12.04, 11:35
        Универсальный формат - "YYYYMMDD HH:MM:SS".

        Короче у меня на компе работает, а на другом нет! Там прокатывают даты только в формате dd.mm.yyyy, почему? Может это от языка зависит?
          самы безапасныи вариант, ползоватся параметрами.
          можно восползоватся функциеи
          ExpandedWrap disabled
            FormatDateTime('YYYYMMDD', Date)

          или в запросе восползоватся функциеи
          ExpandedWrap disabled
            select CONVERT(varchar, GETDATE(), 112)
          варианты третего параметра могут быть разными.
            Цитата Kobra @ 30.12.04, 12:55
            самы безапасныи вариант, ползоватся параметрами.
            можно восползоватся функциеи FormatDateTime('YYYYMMDD', Date)

            Таки я ей и пользуюсь. У меня работает, а на другом компе - нет!
              ползуишся параметрами или ишеш в запрос отформатированую дату?
              покажи код
                Цитата Kobra @ 30.12.04, 15:32
                ползуишся параметрами или ишеш в запрос отформатированую дату?

                Шлюв запрос отформатированную дату.
                ExpandedWrap disabled
                  StrFmt(pszSQLQuery, 'select val, DateM from INTCELL where (DateM >= ''%s'' and DateM <= ''%s'') ' +
                  'and (%s) and (CounterId = %d) ORDER BY DateM ASC',
                  [FormatDateTime('yyyy.mm.dd', dtpBegin.DateTime), FormatDateTime('yyyy.mm.dd', dtpEnd.DateTime),
                  pszCells, lbCounters.ItemIndex + 1]);
                  А DateSeparator у вас не разный ?
                    Цитата Bas @ 30.12.04, 16:04
                    А DateSeparator у вас не разный ?

                    А кто его знает? Где это посмотреть?
                      ExpandedWrap disabled
                        FormatDateTime('yyyymmdd', dtpBegin.DateTime)


                      но честно сказать с параметрами работать на много безапаснее, тем более когда дело касается дат. так что я бы сделал так:
                      ExpandedWrap disabled
                          pszSQLQuery.Close;
                          pszSQLQuery.SQL.Clear;
                          pszSQLQuery.SQL.Add('select val, DateM');
                          pszSQLQuery.SQL.Add('from INTCELL');
                          pszSQLQuery.SQL.Add('where DateM >= :D1 and DateM <= :D2');
                          pszSQLQuery.SQL.Add('and ' + pszCells + ' and CounterId = :P2' );
                          pszSQLQuery.SQL.Add('ORDER BY DateM ASC');
                          pszSQLQuery.ParamByName('D1').Value := dtpBegin.DateTime;
                          pszSQLQuery.ParamByName('D2').Value := dtpEnd.DateTime;
                          ...
                          pszSQLQuery.ParamByName('P2').Value := lbCounters.ItemIndex + 1;
                          pszSQLQuery.Open;

                      pszCells - не понял что ето такое, так что написал как написал

                      Добавлено
                      кстати ету часть
                      Цитата
                      DateM >= :d1 and DateM <= :d2
                      лудше писать так
                      Цитата
                      DateM BETWEEN :d1 and :d2
                      Сообщение отредактировано: Kobra -
                        pszSQLQuery и pszCells это у меня PChar'ы ;) Ладно смысл понял, сейчас попробую...

                        Добавлено
                        1. У меня делфи говорит, что у ADOQuery нет метода ParamByName, по-идеи нужно привести его к TQuery, но хрен его знает как это делать на делфи, я на С++ пишу в основном. :whistle:
                        2. Есть ли разница в использовании методов Open()/Close() и свойства Active?
                        3.
                        Цитата Kobra @ 30.12.04, 16:40
                        кстати ету часть Цитата
                        DateM >= :d1 and DateM <= :d2
                        лудше писать такЦитата
                        DateM BETWEEN :d1 and :d2

                        Почему? Я так раньше писал, но мне больше нравиться когда видно включены ли границы интервала или нет.
                          1.
                          ExpandedWrap disabled
                            ADOQuery.Parameters.ParamByName()

                          2. разницы нет. просто когда даю команду пишу Open/Close а когда проверяю открит или нет Active
                          3. BETWEEN быстрее. а так дело хазяиское
                            Цитата Kobra @ 30.12.04, 18:00
                            3. BETWEEN быстрее. а так дело хазяиское

                            А пачему и на скока?
                              Цитата .alex @ 30.12.04, 18:34
                              А пачему и на скока?

                              наверное потому что ета одна команда, подточенная под свою задачу, а не два.
                              честно говоря не тестировал
                              Сообщение отредактировано: Kobra -
                                Цитата .alex @ 30.12.04, 08:53
                                1. У меня делфи говорит, что у ADOQuery нет метода ParamByName, по-идеи нужно привести его к TQuery, но хрен его знает как это делать на делфи, я на С++ пишу в основном.


                                Примерно так: (это лучше чем использование строк)

                                ExpandedWrap disabled
                                    pszSQLQuery.Close;
                                    pszSQLQuery.SQL.Clear;
                                    pszSQLQuery.SQL.Add('select val, DateM');
                                    pszSQLQuery.SQL.Add('from INTCELL');
                                    pszSQLQuery.SQL.Add('where DateM >= :D1 and DateM <= :D2');
                                    pszSQLQuery.SQL.Add('and ' + pszCells + ' and CounterId = :P2' );
                                    pszSQLQuery.SQL.Add('ORDER BY DateM ASC');
                                    pszSQLQuery.Parameters.ParseSQL(pszSQLQuery.SQL.text, true);
                                    
                                    pszSQLQuery.Parameters.ParamByName('D1').Value := dtpBegin.DateTime;
                                    pszSQLQuery.Parameters.ParamByName('D2').Value := dtpEnd.DateTime;
                                    ...
                                    pszSQLQuery.Parameters.ParamByName('P2').Value := lbCounters.ItemIndex + 1;
                                    pszSQLQuery.Open;
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0378 ]   [ 16 queries used ]   [ Generated: 29.03.24, 14:25 GMT ]