Форум: "Начинающим";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];
ВнизSQL запрос Найти похожие ветки
← →
Valerik © (2008-11-25 10:46) [0]Помгите пожалуйста с запросом!!!!
Form2.ADOQuery1.SQL.Add("select * from Otchet Where data="+DateTimePicker1.+"");
Дает ошибку:Число содержит синтаксическую ошибку в выражении запроса "data=24.11.2008"
В чем может быть проблема?
← →
Valerik © (2008-11-25 10:47) [1]Извините опечатка, вот запрос:
Form2.ADOQuery1.SQL.Add("select * from Otchet Where data="+DateToStr(DateTimePicker1.Date)+"");
← →
Sergey13 © (2008-11-25 10:50) [2]> [0] Valerik © (25.11.08 10:46)
> В чем может быть проблема?
В нежелании использовать параметры в запросе.
Where data=:data
← →
qqq (2008-11-25 10:53) [3]
> )+"");
этот хвостик зачем?
← →
sniknik © (2008-11-25 10:55) [4]> Дает ошибку:Число содержит синтаксическую ошибку в выражении запроса "data=24.11.2008"
а разве нет? правильным с точки зрения любого sql сервера будет число с одной точкой между целой и дробной частью типа "data=24.11"
используй параметры.
← →
stas © (2008-11-25 11:22) [5]Valerik © (25.11.08 10:46)
Дата в Access записывается в диезах
data=#24.11.2008#
← →
Sergey13 © (2008-11-25 11:57) [6]> [5] stas © (25.11.08 11:22)
А в другой СУБД в бемолях. А через параметры едят все.
← →
qqq (2008-11-25 13:10) [7]
> stas © (25.11.08 11:22) [5]
это зло!
← →
Valerik © (2008-11-25 13:35) [8]Form2.ADOQuery1.Close;
Form2.ADOQuery1.SQL.Clear;
Form2.ADOQuery1.SQL.Add("select * from Otchet Where data=:D1"); Form2.ADOQuery1.Parameters.ParamByName("D1").Value:=DateTimePicker1.Date;
Form2.ADOQuery1.Open;
Попробовал через параметры. Ошибки нет, но запрос возвращается пустым.
← →
Palladin © (2008-11-25 13:44) [9]значит нет ничего за эту дату
← →
Palladin © (2008-11-25 13:45) [10]у тебя поди в данных дата еще и со временем сидит...
← →
sniknik © (2008-11-25 14:03) [11]> у тебя поди в данных дата еще и со временем сидит...
по другому и не бывает, типа только дата в аксессе нет, и кстати DateTimePicker1.Date тоже не совсем Date...
← →
Valerik © (2008-11-25 14:08) [12]есть за эту дату данные. и функцию в Access задавал, что бы ставил только дату.
И все равно пусто.
← →
Правильный$Вася (2008-11-25 14:09) [13]
> есть за эту дату данные
начало и конец суток можешь определить?
BETWEEN юзай
← →
Palladin © (2008-11-25 14:11) [14]
> sniknik © (25.11.08 14:03) [11]
) я имею в виду, что значение времени в данных не 0 (взял да поставил значение по умолчанию на поле Date()+Time()),
> и кстати DateTimePicker1.Date тоже не совсем Date
а вот это, кстати да, упущение с моей стороны, причина скорее всего наоборотная )Form2.ADOQuery1.Parameters.ParamByName("D1").Value:=Trunc(DateTimePicker1.Date);
← →
Valerik © (2008-11-25 14:11) [15]Разобрался. Перевел дату в стринг и все заработало:
Form2.ADOQuery1.Parameters.ParamByName("D1").Value:=DateToStr(DateTimePicker1.Da te)
← →
Sergey13 © (2008-11-25 14:17) [16]> [15] Valerik © (25.11.08 14:11)
> Перевел дату в стринг и все заработало
Успехов тебе в нелегкой борьбе.
← →
sniknik © (2008-11-25 14:19) [17]> Перевел дату в стринг и все заработало:
ну это только на первый взгляд. ты просто перенес ошибку из очевидных в "плавающие" и трудно уловимые.
← →
sniknik © (2008-11-25 14:23) [18]> Form2.ADOQuery1.Parameters.ParamByName("D1").Value:=DateToStr(DateTimePicker1.Da te)
вместо этого выполни к примеру вот эту пару и сравни результат
Form2.ADOQuery1.Parameters.ParamByName("D1").Value:= "24.11.2008";
и
Form2.ADOQuery1.Parameters.ParamByName("D1").Value:= "11.24.2008";
← →
Valerik © (2008-11-25 14:50) [19]
> вместо этого выполни к примеру вот эту пару и сравни результатForm2.
> ADOQuery1.Parameters.ParamByName("D1").Value:= "24.11.2008";
> иForm2.ADOQuery1.Parameters.ParamByName("D1").Value:= "11.
> 24.200
Результат одинаковый)))
← →
Palladin © (2008-11-25 15:03) [20]
> Valerik © (25.11.08 14:50) [19]
а так ?
Form2.ADOQuery1.Parameters.ParamByName("D1").Value:= "12.11.2008";
и
Form2.ADOQuery1.Parameters.ParamByName("D1").Value:= "11.12.2008";
← →
Valerik © (2008-11-25 15:20) [21]
> а так ?Form2.ADOQuery1.Parameters.ParamByName("D1").Value:
> = "12.11.2008";иForm2.ADOQuery1.Parameters.ParamByName("D1").
> Value:= "11.12.2008";
А в чем разница????
← →
Palladin © (2008-11-25 15:39) [22]Это не разница. Это игра такая. Угадай где месяц. На какой машине.
← →
sniknik © (2008-11-25 15:42) [23]> А в чем разница????
дальтоник? нет разницы (в принципе задания. есть только в цифрах > 12 и <=), а результат для разных случаев различается. и подумай что будет если ты на таких недостоверных данных будешь к примеру зарплату начислять... побьют ведь (как минимум).
← →
stas © (2008-11-25 17:08) [24]Sergey13 © (25.11.08 11:57) [6]
qqq (25.11.08 13:10) [7]
Параметры параметрами, а синтаксис sql движка с которым работаешь надо знать.
← →
Правильный$Вася (2008-11-25 18:39) [25]
> stas © (25.11.08 17:08) [24]
многое нужно знать, а еще больше нужно знать, что делать НЕ надо
даже если есть такая возможность
← →
Palladin © (2008-11-25 18:41) [26]особенно для того, что бы потом не скакать по всему проекту исправляя запросы при смене СУБД
← →
stas © (2008-11-25 20:53) [27]>Правильный$Вася (25.11.08 18:39) [25]
Palladin © (25.11.08 18:41) [26]
Я нигде и не говорил что параметры не нужно использовать.
← →
Правильный$Вася (2008-11-25 21:50) [28]
> stas © (25.11.08 20:53) [27]
но ты и не говорил, что их нужно использовать
напротив, ты решительно подсовывал заведомо порочный способ
← →
Palladin © (2008-11-25 21:56) [29]негодяй! ;)
← →
Valerik © (2008-11-26 09:03) [30]
> sniknik © (25.11.08 15:42) [23]
Ты думаешь я не понял, что разницы ни какой????
← →
Valerik © (2008-11-26 09:03) [31]Так может кто нибудь подсказать, как это делается правильно????
← →
Palladin © (2008-11-26 09:13) [32]
> Valerik © (26.11.08 09:03) [31]
а ты всю ветку прочитал?
← →
stas © (2008-11-26 10:06) [33]Palladin © (25.11.08 21:56) [29]
))
Правильный$Вася (25.11.08 21:50) [28]
За параметры было написано в [4], зачем дублировать?
А я ничего не подсовывал ))
А сказал как правильно записывать запрос с использованием даты.
Я же не писал не слушай [4], а делай как в [5].
Valerik © (25.11.08 14:11) [15]
Если уже преобразовал в стринг, то нужно в такой формат YYYYMMDD, т.е.
20081126.
← →
Правильный$Вася (2008-11-26 11:08) [34]
> Если уже преобразовал в стринг, то нужно
не нужно!
параметр должен идти тем типом, какой он есть "в натуре", без всяких преобразований, которые даже если не обманывают СУБД (что часто случается), то вынуждают его делать обратные преобразования, что и накладно по времени/ресурсам, и может привести к неверному обратному преобразованию
и при нормальном "тип-в-тип" использовании параметров нет никакой необходимости помнить все эти бредовые недоформаты, специфичные для каждой СУБД каждой ее версии на каждой локали под каждой учеткой
← →
Sergey13 © (2008-11-26 11:49) [35]> [34] Правильный$Вася (26.11.08 11:08)
> параметр должен идти тем типом, какой он есть "в натуре",
Как я понял, он у автора так и идет. Его проблема в том, что у него в БД дата в строке хранится.
← →
Palladin © (2008-11-26 12:00) [36]
> Его проблема в том, что у него в БД дата в строке хранится.
хто сказал? variant - содержащий строковые данные при попытке обратиться к нему как к TDateTime будет пытаться преобразовать эту строку
← →
Anatoly Podgoretsky © (2008-11-26 12:34) [37]> Sergey13 (26.11.2008 11:49:35) [35]
Тогда это не дата, а набор символов.
← →
sniknik © (2008-11-26 13:02) [38]> Ты думаешь я не понял, что разницы ни какой????
ты это спросил, я на это ответил, а уж что я там при этом думал дело десятое.
но раз спрашиваешь отвечу и на это, думаю ты и сейчас ничего не понимаешь (не хочешь, хотя все написано тут же, но мозг почему то написанное частично не воспринимает...)
судя по
> Так может кто нибудь подсказать, как это делается правильно????
> Если уже преобразовал в стринг, то нужно в такой формат YYYYMMDD, т.е. 20081126.
не путай акцесс и мсскл
> Его проблема в том, что у него в БД дата в строке хранится.
вряд ли. если бы у него была строка мой тест не сработал бы.
← →
stas © (2008-11-26 13:05) [39]>sniknik © (26.11.08 13:02) [38]
Это вроде любая СУБД правильно понимает.
← →
sniknik © (2008-11-26 13:13) [40]> Это вроде любая СУБД правильно понимает.
а ты проверь... и огласи список.
если уж нужен строковый формат для любой(вернее для как можно большего количества, любая это слишком самоуверенно) то тогда надо брать формат представления odbc 2008-11-26, "засилье" odbc было длительным и многие вводили поддержку и ради совместимости будут держать дальше. тогда их будет больше, но не все естественно.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.006 c