Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1226030309
Руслан
2008-11-07 06:58
2009.01.11
шлюз своими руками


2-1227969919
snake-as
2008-11-29 17:45
2009.01.11
Поиск в поткаталогах


15-1226651963
Поросенок Винни-Пух
2008-11-14 11:39
2009.01.11
Пятничное позитивище


1-1205406336
San1
2008-03-13 14:05
2009.01.11
перемещение содержимого ScrollBox


2-1227617979
Вопрошающий
2008-11-25 15:59
2009.01.11
TStringList или StringReplace меняет кодировку





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский