Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL с датами [D7, MSSQL]


Страницы:   1 2

чайник1 ©   (2004-01-12 14:10:00) 

Уважаемые мастера, помогите правильно составить запрос, на форме два компонента типа TDataPicker, пользователь вводит начало и конец периода для обработки, нужно выбрать все записи
делаю так.
procedure Tvv_usl.BitBtn1Click(Sender: TObject);
var sr,sr1:TDateTime;
begin
sr:=t1.Date;
sr1:=t2.date;
if sr<sr1 then
begin
dat1.plan.SQL.Text:="select * from name_graf where dat_pl>= :par0 and dat_pl<= :par1 Order by dat_pl";
dat1.plan.Params[0].asDatetime :=sr;
dat1.plan.Params[1].asDatetime :=sr1;
dat1.plan.ExecSQL;
dat1.plan.Active:=true;
end;
end;
Выдает ошибку неверный тип поля. спасибо


sniknik   (2004-01-12 16:05:00) [1]

> поле у меня на сервере в базе точно типа даты, я ведь туда вношу информацию
не обязательно, то что вносиш это не показатель, работает автоприведение типа (не ко всем типам)
к примеру
запрос
UPDATE [Договоры производства] SET Товар1С = GetDate()
работает в MSSQL без ошибок, несмотря на то чо поле Товар1С = VarChar(50) и тоже вносит туда информацию.
т.е. по твоему DBTimeStamp в MSSQL = VarChar ?? раз вносит.

> В общем ни один совет пока не помог..
и не поможет, ясности нет, как и что делаеш. того что показал недостаточно. см. > Johnmen © (12.01.04 15:00) [16]


чайник1   (2004-01-12 15:39:00) [2]

>Johnmen
ругается на все, наверное нужно какой-то модуль подключить в uses..


Johnmen   (2004-01-12 15:30:00) [3]

А вот так

with ParamByName("MyParam") do begin
DataType := ftTimeStamp;
ParamType := ptInput;
AsSQLTimeStamp := DateTimeToSQLTimeStamp(sr);
end;


belyh   (2004-01-12 15:29:00) [4]


> чайник1

у меня такая же проблема - причем я пока нашел только один выход
создаешь новую пустую таблицу с полем типа ДАТА - и вместо твоих переменных sr и sr1 - вносишь даты в эту таблицу в соответсвующие поля - а потом, когда делаешь выборку - то сравниваешь не с введенными , так сказать, вручную значениями, а со значениями тех новых полей...
надеюсь объяснил нормально


чайник1   (2004-01-12 15:20:00) [5]

я использую компоненты с вкладки dbExpress для соединения с сервером.
поле у меня на сервере в базе точно типа даты, я ведь туда вношу информацию.
А при выборке не работает. В общем ни один совет пока не помог..


sniknik   (2004-01-12 15:08:00) [6]

ZrenBy © (12.01.04 14:59) [15]
лишнее, MSSQL прекрасно работает и с датой, во всяком случае у меня глюков по этому поводу не было ни разу.
всегда использую ADO (это для справки, т.к. тип доступа имеет значение)


Johnmen   (2004-01-12 15:00:00) [7]

>belyh © (12.01.04 14:54)

Ну что сказать... Пока мы не видели ни строчки кода, ни описание настроек, ни указание используемых компонент...
Частично это относится и к автору...


ZrenBy   (2004-01-12 14:59:00) [8]

Для MSSQL можно попробовать передавать дату как строку в ISO формате

dat1.plan.SQL.Text:="select * from name_graf where dat_pl>= :par0 and dat_pl<= :par1 Order by dat_pl";
dat1.plan.Params[0].asString := FormatDateTime("yyyymmdd",sr);
dat1.plan.Params[1].asString := FormatDateTime("yyyymmdd",sr1);

Тип параметра, естественно, должен быть ftString


belyh   (2004-01-12 14:54:00) [9]

НЕеееее пацаны - дело в незарезервированном слове - я щас переписал - у меня тот же глюг что и у
> чайник1

НУ не хочет он делать выборку по полю, типа date. Сам СКуЛ Билдер мучил долго долго - он все ощибку выдает.
Paradox 7
D7
Win 2000 - хотя вряд ли это имеет значение


GLFox   (2004-01-12 14:52:00) [10]

А еще может быть что где-то имена накладываются. Или параметр с полем или поле с полем...


GLFox   (2004-01-12 14:50:00) [11]

Ну так проверь тогда тип своего поля, блин. Должен быть какой-нибудь TIMESTAMP или DATE...


чайник1   (2004-01-12 14:43:00) [12]

>GlFox
я уже так делал, ошибка такая же.
Вот ума и неприложу как еще...


Mike Kouzmine   (2004-01-12 14:43:00) [13]

Johnmen © (12.01.04 14:36) [7] Безобразие, понаделали зарезервированных слов. С GROUP то же самое, блин.


belyh   (2004-01-12 14:42:00) [14]


> Johnmen

блин! че то я прогнал. теперь придется все переделывать. спс


GLFox   (2004-01-12 14:36:00) [15]

Если юзаешь IBX, то в D6 были проблемы в некоторых версиях.
Попробуй че-нить типа так:
{...}
with dat1.plan do begin
SQL.Text:="select * from name_graf where dat_pl between :par0 and :par1 Order by dat_pl";
ParamByName("par0").asDatetime :=sr;
ParamByName("par1").asDatetime :=sr1;
//dat1.plan.ExecSQL; <= это вообще глупость какая-то
plan.Active:=true;
end;
{...}


Johnmen   (2004-01-12 14:36:00) [16]

>belyh ©

Имена поле не должны совпадать с зарезервированными словами (keyword)!


belyh   (2004-01-12 14:33:00) [17]

Ээээ... а у меня проблема такая:
тоже с датой, но только возникает она прямо в SQL-buildere
создаю там простую выборку, где:
date = 10.10.2003 к примеру - и сам билдео пишет мне:
Error in Criteria: Invalid use of keyword
причем дату всяко разно вводил и ччерез слэш и в кавычках - все одно


sniknik   (2004-01-12 14:27:00) [18]

параметры создавать не надо если у тебя PapamCheck включен (по умолчанию так).


sniknik   (2004-01-12 14:24:00) [19]

> dat1.plan.ExecSQL;
> dat1.plan.Active:=true;
одно из двух лишнее (первое).


Johnmen   (2004-01-12 14:21:00) [20]

Что такое plan ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо