Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

ACCESS SQL UPDATE в зависимости от даты   Найти похожие ветки 

 
pr20122012   (2012-05-03 20:29) [0]

Здравсвуйте!
Вот такой вопрос: есть БДAccess  и я к ней обращаюсь через SQL. Все столбцы в таблице у меня имеют тип данных String. (возможно, это важно???) Мне необходимо обновить данные в одном из столбцов в зависимости от даты в другом. Я пишу SQL запрос:
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add("Update Mytable set C= "+Chr(39)
  +"Поздно"+Chr(39)+" Where D<25/04/2012");
  ADOQuery1.ExecSQL;

Не  работает! Т.е. значение в столбце C не обновляет!  Перерыл инет – так и не понял, как же его сравнить чтоб корректно работало все????


 
Медвежонок Пятачок ©   (2012-05-03 20:33) [1]

Не обновляет - не значит что не работает.
Здесь скорее наоборот - если бы обновлял - был бы повод сказать что не работает.


 
Медвежонок Пятачок ©   (2012-05-03 20:38) [2]

кстати, сколько будет 25 разделить на 4, а затем еще на 2012?


 
Inovet ©   (2012-05-03 21:02) [3]

Используй параметры.


 
Anatoly Podgoretsky ©   (2012-05-04 07:05) [4]

> pr20122012  (03.05.2012 20:29:00)  [0]

> Все столбцы в таблице у меня имеют тип данных String.

Нет у тебя поля даты
А сам запрос тоже безграмотный


 
pr20122012   (2012-05-04 11:30) [5]

Переписал через параметр вот так:

 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Add("Update Orders set C= "+Chr(39)
 +"22222"+Chr(39)+" Where D<:Data1");
 ADOQuery1.Parameters.ParamValues["Data1"]:=Now;
ADOQuery1.ExecSQL;

Все равно не работает!
:((((


 
pr20122012   (2012-05-04 11:36) [6]

Да, если я меняю тип столбца на дата/время в Access то вроде как все работает! Но у меня тип - текстовый.... Можно ли в рамках запроса преобразовывать значения из В в дату????


 
Anatoly Podgoretsky ©   (2012-05-04 12:02) [7]

> pr20122012  (04.05.2012 11:30:05)  [5]

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


 
Anatoly Podgoretsky ©   (2012-05-04 12:03) [8]

> pr20122012  (04.05.2012 11:36:06)  [6]

Раз тип текстовый тогда не приходится говорить об датах и использовать их
как дату


 
Медвежонок Пятачок ©   (2012-05-04 12:29) [9]

Все равно не работает!

да неужели?

select * from orders where d < :dte

тоже "не работает"? ничего не возвращает?

а может все таки работает и то и другое?
просто апдейтить и возвращать нечего?


 
pr20122012   (2012-05-04 14:22) [10]

Спасибо всем за ответы!
Вот в таком варианте оно работает:


...
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("Update Orders set C= "+Chr(39)
 +"22222"+Chr(39)+" Where  Cdate(D)< Cdate(:Data1)");
 ADOQuery1.Parameters.ParamValues["data1"]:=DateToSQLStr;
 ADOQuery1.ExecSQL;
...

function DateToSQLStr: String ;
  var
     d, m, y : word ;
begin
  DecodeDate(Now-1, y, m, d) ;
  Result := IntToStr(d)+"/"+IntToStr(m)+"/"+IntToStr(y) ;
end;


Но при этом возникла новая проблема! Если какое-либо значение отсутствие (NULL или "") то Cdate() не выполняется и возвращает ошибку.

Вопрос: есть ли конструкция IF или что-то подобное, чтобы иметь дело только с датами без пустот


 
Медвежонок Пятачок ©   (2012-05-04 14:36) [11]

таких проблем еще будет милльон.
они - постоянные спутники тех, кто изначально неправильно спроектировал структуру данных.
ты - один из них.

where <условие на дату>
 and <поле не нулл>
 and <поле не пустая строка>

но это все равно не спасет от неизбежных ошибок конвертации строки в дату (в поле таблицы)


 
pr20122012   (2012-05-04 14:38) [12]

Пытаюсь вот такое но не работает
ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Add("Update Orders set C= "+Chr(39)
 +"22222"+Chr(39)+" Where  IsNull(Cdate([D]),0)< Cdate(:Data1)");
 ADOQuery1.Parameters.ParamValues["data1"]:=DateToSQLStr;
 ADOQuery1.ExecSQL;


 
Медвежонок Пятачок ©   (2012-05-04 14:42) [13]

не работает - значит у него выходной.

зы а почему в параметре строка, а в изнулле по дефолту число?


 
MsGuns ©   (2012-05-04 14:45) [14]

Вашу "задачку" можно режить "чистым" SQL преобразуя (CAST/CONVERT - читаем внимательно Jetsql40.chm) в числа дату-образец и строковую дату-поле  и сравнивая уже их (числа).
Но в целом будет задница ибо [11]


 
pr20122012   (2012-05-04 14:51) [15]

Медвежонок Пятачок

Ну это я так :))))
правда про другому тоже ничего не меняется

ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Add("Update Orders set C= "+Chr(39)
 +"11"+Chr(39)+" Where  IsNull(Cdate([d]),"+Chr(39)+"0"+Chr(39)+")< Cdate(:Data1)");
 ADOQuery1.Parameters.ParamValues["data1"]:=DateToSQLStr;
 ADOQuery1.ExecSQL;


 
MsGuns ©   (2012-05-04 14:52) [16]

Проблему "пустышек" решать с использованием where и, если нужно, UNION с запросом выборки "пустышек" и замены их на некоторую фикс.дату:

SELECT F1,F2,F3,MAYINVALIDDATE,F4
 where MAYINVALIDDATE is not null and MAYINVALIDDATE<>""
UNION
SELECT F1,F2,F3,"31/12/2012" as MAYINVALIDDATE,F4
 where MAYINVALIDDATE is null or MAYINVALIDDATE=""

Результирующий запрос:
SELECT A.* from
  (SELECT F1,F2,F3,MAYINVALIDDATE,F4
    where MAYINVALIDDATE is not null and MAYINVALIDDATE<>""
  UNION
  SELECT F1,F2,F3,"31/12/2012" as MAYINVALIDDATE,F4
    where MAYINVALIDDATE is null or MAYINVALIDDATE="") A
WHERE <вот тут выражение сравнения дат>



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.162 c
15-1338150603
Юрий
2012-05-28 00:30
2013.03.22
С днем рождения ! 28 мая 2012 понедельник


15-1342297802
Юрий
2012-07-15 00:30
2013.03.22
С днем рождения ! 15 июля 2012 воскресенье


15-1344504943
brother
2012-08-09 13:35
2013.03.22
верстка div ом


15-1338799914
Empleado
2012-06-04 12:51
2013.03.22
iOS - security guide


15-1351676690
Dimka Maslov
2012-10-31 13:44
2013.03.22
Какая муза





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский