На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Обязательно указание:
1) типа базы данных (Paradox/Oracle/Interbase и т.п.)
2) способа доступа к базе данных (ODBC/ADO/DAO/BDE и т.п.)
Например: Paradox/BDE, MS Access/ADO

Наиболее часто задаваемые вопросы:
Базы даных для начинающих. Первые шаги. Понятие о BDE.
Переход на клиент-сервер и начала ADO
Приёмы работы с BLOB (OLE/Memo) полями
Запросы и параметры или как избавиться от многих проблем. Проблемы с датами в запросах.
Нужели мне нужно устанавливать BDE? (или почему не работает программа на другом компьютере)
Модераторы: Bas, Rouse_
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Запрос по дате , Создание запроса по дате
    попробуи вместо asDateTime - Value. пусть сам с типом разберется
      Use a number (as date value) in SQL text.

      Example:

      'SELECT * FROM Country WHERE Date1=36736'

      Actually, a date value is a number.

      So, #07.29.2000# = 36736.

      If you find a date value as a number then can use FormatFloat function:

      str1=FormatFloat('#', Date) //str1='36736'

      Finally,

      Query1.SQL.Text= 'SELECT * FROM Country WHERE Date1=' + FormatFloat('#', Date);

      Note: This solution is properly work BDE, VB, MS-Access, MS-SQL.
        При следующем коде:
        Close;
        SQL.Clear;
        SQL.Add('SELECT *');
        SQL.Add('FROM TDAT');
        SQL.Add('WHERE S_DDT=#'+DE.EditText+'#');
        SQL.Add('ORDER BY sss');
        Open;
        ошибок синтаксиса программа не выдает, но странно себя ведет. Т.е. на некоторые даты реагирует как положено(10.20.2004, 20.10.2004), а все остальные просто не видит. Что за чертовщина?
        Кстати проблемма в синтаксисе была в том, что было не соответствие в маске ввода в Accesse и в компонентах Delphi. Везде в delphi подставил английскую маску даты и ошибка исчезла.
        Сообщение отредактировано: nikvicfc -
          Kobra, Пробовал и Value, результат тот же.
            Цитата nikvicfc, 12.10.04, 12:00
            (10.20.2004, 20.10.2004),

            Какой формат даты (DD.MM.YYYY or MM.DD.YYYY)? Да и что лежит в DE.EditText
              select * from mytable where mydate = ' + FormatFloat('#', DE.Date)
                Огромное всем спасибо!
                Решение моего вопроса следующее:
                SQL.Clear;
                SQL.Add('SELECT *');
                SQL.Add('FROM Table');
                SQL.Add('WHERE S_Date=dateValue("'+DateEdit.EditText+'")');

                Фильтрация выполняется как положено. " - двойные кавычки.
                Но видимо прав Show работать с параметрами надежнее, не нужно бутет подстраиваться на каждой машине. ;)
                Сообщение отредактировано: nikvicfc -
                  Vmesto ispol'zovaniia AsDateTime ili AsDate neobhodimo ispol'zovat' AsSQLTimeStamp. Dlia preobrazovaniia peremennoj tipa TDateTime v TimeStamp ispol'zujte funkciiu DateTimeToSQLTimeStamp iz modulia SqlTimSt (neobhodimo vstavit' ssylku na etot modul' v sekciiu uses).
                  A voobshche otvet na etot vopros nahoditsia na
                  http://bdn.borland.com/article/0%2C1410%2C30078%2C00.html.
                  Nadeius' u Vas s inglish vs? OK.
                  IA prosto perev?l vkratce :)

                  Добавлено
                  У меня тоже возникает ошибка "dbExpress Error: Invalid Field Type"
                  в режиме исполнения программы. Но не с полем Дата-Время, а даже и в таком коде:

                  var FloatParam1, FloatParam2: Float;
                  ...
                  SQLDataSet1.Close;
                  SQLDataSet1.ParamByName('FloatParam1').AsFloat := FloatParam1;
                  SQLDataSet1.ParamByName('FloatParam2').AsFloat := FloatParam2;
                  SQLDataSet1.Open;// <-----error :(

                  Использую связку Delphi - Oracle
                    попробуи вместо AsFloat - Value. пусть сам с типом разберется
                      ExpandedWrap disabled
                        Close;
                        SQL.Clear;
                        SQL.Add('SELECT *');
                        SQL.Add('FROM TDAT');
                        SQL.Add('WHERE S_DDT=:d');
                        SQL.Add('ORDER BY sss');
                        parameters.ParseSQL(SQL.Text, true);
                        parameters.parambyname('d').value:=DE.EditText;
                        Open;
                        Я сталкивасля с проблемой использования Даты в SQL запросах:
                        Вот что накопал:

                        1) Для каждой БД (MySQL, MSSQL, Access, BDE) в запросе должен использоваться свой формат даты: MM.DD.YYYY, DD.MM.YYYY, MM/DD/YYYY и т.д. какой формат конкретно у какой БД я вычислял эксперементально
                        2) В запросе я всегда дату ставлю в одиночные кавычки: "SELECT * FROM tablename WHERE date='24.11.2004'"
                        "INSERT INTO tablename (id,date) VALUES(1,'24.11.2004')"
                        3) В программе на Delphi есть очень полезная функция: FormatDateTime
                        Рабочий пример:

                        dt:TDateTime;
                        Query_SQL:String;

                        dt := DateTimePicker1.DateTime;
                        Query_SQL := 'INSERT INTO ClientCatalog (Name, Id_Group, Address, Description, DateCreate) VALUES('+
                        ''''+Edit2.Text+''''+
                        ','+Edit4.Text+
                        ','''+Edit3.Text+''''+
                        ','''+Memo1.Text+''''+
                        ','''+FormatDateTime('MM.DD.YYYY',dt)+''')';
                        DataModule1.ADOQuery1.Active := False;
                        DataModule1.ADOQuery1.SQL.Clear;
                        DataModule1.ADOQuery1.SQL.Add(Query_SQL);
                        DataModule1.ADOQuery1.ExecSQL;

                        Проблемы исчезали...
                          Meverik, угу, спасибо тебе за наблюдения, только оформляй пожалуйста текст программы тегом code. Как - написано вверху в красной рамке.
                          M
                          Сообщения были разделены в тему "две проблемы при конвертации"
                          M
                          Сообщения были разделены в тему "две проблемы при конвертации"
                          Сообщение отредактировано: Song_Bot -
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,3421 ]   [ 16 queries used ]   [ Generated: 6.08.25, 10:10 GMT ]