Конференция "Начинающим" » SQL запрос [D7, Access]
 
  • Valerik © (25.11.08 10:46) [0]
    Помгите пожалуйста с запросом!!!!
    Form2.ADOQuery1.SQL.Add('select * from Otchet Where data='+DateTimePicker1.+'');

    Дает ошибку:Число содержит синтаксическую ошибку в выражении запроса 'data=24.11.2008'

    В чем может быть проблема?
  • Valerik © (25.11.08 10:47) [1]
    Извините опечатка, вот запрос:
    Form2.ADOQuery1.SQL.Add('select * from Otchet Where data='+DateToStr(DateTimePicker1.Date)+'');
  • Sergey13 © (25.11.08 10:50) [2]
    > [0] Valerik ©   (25.11.08 10:46)
    > В чем может быть проблема?

    В нежелании использовать параметры в запросе.
    Where data=:data
  • qqq (25.11.08 10:53) [3]

    > )+'');

    этот хвостик зачем?
  • sniknik © (25.11.08 10:55) [4]
    > Дает ошибку:Число содержит синтаксическую ошибку в выражении запроса 'data=24.11.2008'
    а разве нет? правильным с точки зрения любого sql сервера будет число с одной точкой между целой и дробной частью типа 'data=24.11'

    используй параметры.
  • stas © (25.11.08 11:22) [5]
    Valerik ©   (25.11.08 10:46)
    Дата в Access записывается в диезах
    data=#24.11.2008#
  • Sergey13 © (25.11.08 11:57) [6]
    > [5] stas ©   (25.11.08 11:22)

    А в другой СУБД в бемолях. А через параметры едят все.
  • qqq (25.11.08 13:10) [7]

    > stas ©   (25.11.08 11:22) [5]

    это зло!
  • Valerik © (25.11.08 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 © (25.11.08 13:44) [9]
    значит нет ничего за эту дату
  • Palladin © (25.11.08 13:45) [10]
    у тебя поди в данных дата еще и со временем сидит...
  • sniknik © (25.11.08 14:03) [11]
    > у тебя поди в данных дата еще и со временем сидит...
    по другому и не бывает, типа только дата в аксессе нет, и кстати DateTimePicker1.Date тоже не совсем Date...
  • Valerik © (25.11.08 14:08) [12]
    есть за эту дату данные. и функцию в Access задавал, что бы ставил только дату.
    И все равно пусто.
  • Правильный$Вася (25.11.08 14:09) [13]

    > есть за эту дату данные

    начало и конец суток можешь определить?
    BETWEEN юзай
  • Palladin © (25.11.08 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 © (25.11.08 14:11) [15]
    Разобрался. Перевел дату в стринг и все заработало:
    Form2.ADOQuery1.Parameters.ParamByName('D1').Value:=DateToStr(DateTimePicker1.Da te)
  • Sergey13 © (25.11.08 14:17) [16]
    > [15] Valerik ©   (25.11.08 14:11)
    > Перевел дату в стринг и все заработало

    Успехов тебе в нелегкой борьбе.
  • sniknik © (25.11.08 14:19) [17]
    > Перевел дату в стринг и все заработало:
    ну это только на первый взгляд. ты просто перенес ошибку из очевидных в "плавающие" и трудно уловимые.
  • sniknik © (25.11.08 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 © (25.11.08 14:50) [19]

    > вместо этого выполни к примеру вот эту пару и сравни результатForm2.
    > ADOQuery1.Parameters.ParamByName('D1').Value:= '24.11.2008';
    > иForm2.ADOQuery1.Parameters.ParamByName('D1').Value:= '11.
    > 24.200


    Результат одинаковый)))
  • Palladin © (25.11.08 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 © (25.11.08 15:20) [21]

    > а так ?Form2.ADOQuery1.Parameters.ParamByName('D1').Value:
    > = '12.11.2008';иForm2.ADOQuery1.Parameters.ParamByName('D1').
    > Value:= '11.12.2008';

    А в чем разница????
  • Palladin © (25.11.08 15:39) [22]
    Это не разница. Это игра такая. Угадай где месяц. На какой машине.
  • sniknik © (25.11.08 15:42) [23]
    > А в чем разница????
    дальтоник? нет разницы (в принципе задания. есть только в цифрах > 12 и <=), а результат для разных случаев различается. и подумай что будет если ты на таких недостоверных данных будешь к примеру зарплату начислять... побьют ведь (как минимум).
  • stas © (25.11.08 17:08) [24]
    Sergey13 ©   (25.11.08 11:57) [6]
    qqq   (25.11.08 13:10) [7]

    Параметры параметрами,  а синтаксис sql движка с которым работаешь надо знать.
  • Правильный$Вася (25.11.08 18:39) [25]

    > stas ©   (25.11.08 17:08) [24]

    многое нужно знать, а еще больше нужно знать, что делать НЕ надо
    даже если есть такая возможность
  • Palladin © (25.11.08 18:41) [26]
    особенно для того, что бы потом не скакать по всему проекту исправляя запросы при смене СУБД
  • stas © (25.11.08 20:53) [27]
    >Правильный$Вася   (25.11.08 18:39) [25]
    Palladin ©   (25.11.08 18:41) [26]
    Я  нигде и не говорил что параметры не нужно использовать.
  • Правильный$Вася (25.11.08 21:50) [28]

    > stas ©   (25.11.08 20:53) [27]

    но ты и не говорил, что их нужно использовать
    напротив, ты решительно подсовывал заведомо порочный способ
  • Palladin © (25.11.08 21:56) [29]
    негодяй! ;)
 
Конференция "Начинающим" » SQL запрос [D7, Access]
Есть новые Нет новых   [134477   +40][b:0][p:0.001]