Имя: Пароль:
1C
 
Работа с Timestamp
0 Minilaus
 
07.02.07
10:56
Значит обращаюсь к внешней базе Paradox, мне нужно ограничить выборку датой, но не знаю как установить параметр из 1с, чтобы он нормально заработал с TimeStamp. Делаю следующее:
Запрос = СоздатьОбъект("ODBCRecordSet");
   Запрос.SetDatabase(БД);
   ТекстЗапроса = "
   |SELECT MessageDate FROM Traffic
   |Where MessageDate>?
   |";                    

   Запрос.Подготовить(ТекстЗапроса);
   
   Запрос.ДобПараметр(1,10,Дата("05.02.2007"),0);
   
   Запрос.ВыполнитьИнструкцию(ТекстЗапроса,ТЗ,1);

При выполнении выдает такую ошибку:
Запрос.ВыполнитьИнструкцию(ТекстЗапроса,ТЗ,1);  
{Обработка.ЗагрузкаТрафика.Форма.Модуль(25)}: State 22007, native 35, message [Microsoft][Драйвер ODBC Paradox]Недопустимый формат поля даты и времени (null)
1 Морозов Александр
 
07.02.07
11:00
мож типа 2-у дату надо поставить
2 Minilaus
 
07.02.07
11:05
Не понял
3 ATI
 
07.02.07
11:16
1. Напрямую в запрос втыкай, не параметром
2. Играйся с форматами типа  так .. 05/02/2007 точно не помню.
3. Оптимальный вариант - переконверт из Paradox в dBase, и работай как душе угодно
4 Minilaus
 
07.02.07
11:19
Переконверт будет долго, база большая :( (для этого и ставлю условию в SQL, хотя можно и потом проверочкой). Ща попробую форматы пошурудить
5 smaharbA
 
07.02.07
11:22
Запрос.ДобПараметр(1,10,"05.02.2007",0);
6 Minilaus
 
07.02.07
11:28
Блин никак не хочет
7 smaharbA
 
07.02.07
11:49

Запрос = СоздатьОбъект("ODBCRecordSet");
Запрос.SetDatabase(БД);
ТекстЗапроса = "
   |SELECT MessageDate FROM Traffic
   |Where MessageDate>cast(? as datetime)
   |";                    
Запрос.Подготовить(ТекстЗапроса);
Запрос.ДобПараметр(1,10,"05.02.2007",0);
Запрос.ВыполнитьИнструкцию(ТекстЗапроса,ТЗ,1);

или

Дат="05.02.2007";
ТекстЗапроса = "
   |SELECT MessageDate FROM Traffic
   |Where MessageDate>'"+Дат+"'
   |";                    
8 Minilaus
 
07.02.07
11:55
На первый вариант ругаетсо гаденыш:
Запрос.ВыполнитьИнструкцию(ТекстЗапроса,ТЗ,1);  
{Обработка.ЗагрузкаТрафика.Форма.Модуль(28)}: State 42000, native 4294964196, message [Microsoft][Драйвер ODBC Paradox] Ошибка синтаксиса (пропущен оператор) в выражении запроса 'MessageDate>cast(Pa_RaM000 as datetime)'.

А второй вариант, говорит что типы не совместимы
9 smaharbA
 
07.02.07
12:07
MessageDate>convert(datetime,?)
10 Minilaus
 
07.02.07
12:08
И так тоже пробовал :) уже выдает о несовместимости :(
11 Minilaus
 
07.02.07
12:08
и че у меня все сообщения по 2 раза идут
12 smaharbA
 
07.02.07
12:12
Дат="05.02.2007";
ТекстЗапроса = "
   |SELECT MessageDate FROM Traffic
   |Where MessageDate>convert(datetime,'"+Дат+"')
   |";    
либо MessageDate не дата
13 Minilaus
 
07.02.07
12:22
Ваще смех да и только. Теперь ругается, что он не знает функцию convert. Хотя если указать вот так
ТекстЗапроса = "
   |SELECT MessageDate FROM Traffic
   |Where MessageDate>convert(datetime,?)
   |";                    

   Запрос.Подготовить(ТекстЗапроса);
   
   Запрос.ДобПараметр(1,10,Дата("05.02.2007"),0);

То ругается опять на не совместимость типов (то есть получается тут он уже знает функцию convert)

А тип у MessageDate TimeStamp.

Ладно чуствую легче проверкой условия потом делать
14 romix
 
модератор
07.02.07
12:29

///////////////////////////////////////////////////////////////////////
Функция Число0(прм_ч);
   Если прм_ч<10 Тогда
       Возврат "0"+прм_ч;
   Иначе
       Возврат ""+прм_ч;
   КонецЕсли;    
КонецФункции    

///////////////////////////////////////////////////////////////////////
Функция Число4(прм_ч);
   ч=""+прм_ч;
   
   Пока СтрДлина(ч)<4 Цикл
       ч="0"+ч;
   КонецЦикла;
   Возврат ч;
КонецФункции    


///////////////////////////////////////////////////////////////////////
Функция ФорматДатыSQL(прм_Дата);
   д=Дата(прм_Дата);
   год=ДатаГод(д);
   мес=ДатаМесяц(д);
   день=ДатаЧисло(д);
   Если мес=0 Тогда
       мес=1;
   КонецЕсли;
   Если день=0 Тогда
       день=1;
   КонецЕсли;
   
   Возврат СокрЛП(""+Число4(год)+"-"+Число0(мес)+"-"+Число0(день));
   
КонецФункции
15 romix
 
модератор
07.02.07
12:30
Уточни только формат даты который принимает Парадокс.
16 smaharbA
 
07.02.07
15:55
блин

ТекстЗапроса = "
   |SELECT MessageDate FROM Traffic
   |Where MessageDate>convert(datetime,?)
   |";                    

   Запрос.Подготовить(ТекстЗапроса);
   
   Запрос.ДобПараметр(1,10,"05.02.2007",0);//Ненада Дата()


17 Билли Г
 
07.02.07
15:57
Независимо от того, куда вы едете — это в гору и против ветра!