Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.06;
Скачать: CL | DM;

Вниз

ADODataSet - SELECT с параметром типа Date   Найти похожие ветки 

 
Zn   (2003-01-15 16:01) [0]

В ADODataSet стоит SELECT с параметром типа Date. Смотрю на результат выполнения - 01.12.02 воспринимает как 12 января 2002 года, а 13.12.02 воспринимает правильно. Параметр передается из DateTimePicker. Где глючит - в ADODataSet или DateTimePicker? И может где-то устанавливается формат даты?
Подключаюсь к dbf через Jet.


 
Delirium^.Tremens ©   (2003-01-15 16:04) [1]

:-) :-) :-)
Это к Alexandr ©


 
sniknik ©   (2003-01-15 16:15) [2]

Jet виноват, выставляется (для dBase, FoxPro не поддерживается) в реестре
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase.Date = MDY (по умолчанию месяц первый, но если месяц > 12 а второе число < то тоже правильно считает что перепутали) мне это тоже очень не нравится.
можеш использовать dateserial(2002,1,12) однозначно YMD, но если например месяц 13 тоже не ошибка добавляет год и месяц 1.


 
sniknik ©   (2003-01-15 16:16) [3]

Delirium^.Tremens © (15.01.03 16:04)
ой. извините что помешал. я не он.


 
sniknik ©   (2003-01-15 16:18) [4]

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


 
Zn   (2003-01-15 16:33) [5]


> sniknik © (15.01.03 16:18)

Параметр передаю так: ADODataSet1.Parameters[0].Value:=DateTimePicker1.DateTime.
Где ещё может быть ошибка?




 
Delirium^.Tremens ©   (2003-01-15 16:33) [6]

sniknik © (15.01.03 16:18)
> кстати извини, но передача параметром должна в любом случае
> правильно работать может чегото спутал?

Сам себе противоречишь? Вот не передается же правильно.


 
Zn   (2003-01-15 16:42) [7]


> sniknik © (15.01.03 16:15)


> можеш использовать dateserial(2002,1,12)

Т.е. в SELECT использовать вместо
SELECT ...... WHERE Table1.Date1 < :BeginDate
что-то типа
SELECT ...... WHERE Table1.Date1 < :dateserial(Year(BeginDate),Day(BeginDate),Month(BeginDate))?



 
sniknik ©   (2003-01-15 16:49) [8]

Delirium^.Tremens © (15.01.03 16:33)
не противоречу, если в запрос попадает строка в формате 13.12.02 то так и происходит как вначале писал но параметр(в Parameters) задается типом TDataTime он общий. (могу и ошибатся но пока он меня ни разу не подводил)

Zn (15.01.03 16:33)
ADODataSet1.CommandText:= "select :MDat as MyDate";
ADODataSet1.Parameters.ParamByName("MDat").Value:= DateTimePicker1.DateTime;
ADODataSet1.Open;
а если так то что выдает? должно один в один дату какую выбрали. (местоположение MD или DM может различно но одинаково)


 
sniknik ©   (2003-01-15 16:51) [9]

Zn (15.01.03 16:42)
вроде
только
SELECT ...... WHERE Table1.Date1 < dateserial(Year(BeginDate), Month(BeginDate), Day(BeginDate))




 
Zn   (2003-01-15 16:55) [10]


> SELECT ...... WHERE Table1.Date1 < :dateserial(Year(BeginDate),Day(BeginDate),Month(BeginDate))?

Извините,
SELECT ...... WHERE Table1.Date1 < dateserial(Year(:BeginDate),Day(:BeginDate),Month(:BeginDate))


 
Zn   (2003-01-15 17:05) [11]

Что-то связь тормозит...

> ADODataSet1.CommandText:= "select :MDat as MyDate";
> ADODataSet1.Parameters.ParamByName("MDat").Value:= DateTimePicker1.DateTime;
> ADODataSet1.Open;

Не работает.


 
sniknik ©   (2003-01-15 17:36) [12]

вот это странно. а что говорит? может версия jet старая.


 
Zn   (2003-01-15 17:46) [13]


> sniknik © (15.01.03 17:36)

Jet 4. Ну, в смысле результат выдаёт, но месяц и день по-прежнему путает.


 
sniknik ©   (2003-01-15 18:13) [14]

ну не может быть, если
ADODataSet1.CommandText:= "select :MDat as MyDate";
ADODataSet1.Parameters.ParamByName("MDat").Value:= DateTimePicker1.DateTime;
ADODataSet1.Open;
выдает значения для датапикера 01.12.2002
в селекте (1) 01.12.2002 или (от установок) (2) 12. 01.2003
а для
выдает значения для датапикера 13.12.2002
в селекте (1) 13.12.2002 или (от установок) (2) 12. 13.2003
главное равны по первому (DMY) или второму (MDY) номеру то и твоих запросах будут те же значения, не пересекаясь. (день я выделил)

скорее поверю что у тебя путаница. вобщето с этого надо но лутше поздно чем никогда. выкладывай код. все что имеет отношение к "ошибке". и описывай где глюк по твоему.



 
Zn   (2003-01-15 19:01) [15]


> sniknik © (15.01.03 18:13)



> выкладывай код. все что имеет отношение к "ошибке". и описывай
> где глюк по твоему.

Даю сам модуль и dfm к DataModule.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls, Grids, DBGrids, Unit2;

type
TForm1 = class(TForm)
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
DBGrid1: TDBGrid;
Button3: TButton;
Bevel1: TBevel;
Bevel2: TBevel;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var D,M,Y : Word;
begin
DecodeDate(Date,Y,M,D);
if M=1 then
begin
DateTimePicker1.DateTime:=EncodeDate(Y-1,12,1);
DateTimePicker2.DateTime:=EncodeDate(Y,M,1);
end
else
begin
DateTimePicker1.DateTime:=EncodeDate(Y,M-1,1);
DateTimePicker2.DateTime:=EncodeDate(Y,M,1);
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
DBGrid1.Visible:=false;
DataModule2.ADODataSet1.Active:=false;
DataModule2.ADODataSet1.Parameters[0].Value:=DateTimePicker1.DateTime;
DataModule2.ADODataSet1.Active:=true;
DBGrid1.Visible:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
DBGrid1.Visible:=false;
DataModule2.ADODataSet1.Active:=false;
DataModule2.ADODataSet1.Parameters[0].Value:=DateTimePicker1.DateTime;
DataModule2.ADODataSet1.Active:=true;
DBGrid1.Visible:=true;
end;

end.



object DataModule2: TDataModule2
OldCreateOrder = False
Left = 257
Top = 197
Height = 375
Width = 551
object ADOConnection1: TADOConnection
Connected = True
ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data " +
"Source=D:\Base;Mode=ReadWrite;Extended Pr" +
"operties=dBase 5.0;Jet OLEDB:System database="";Jet OLEDB:Regist" +
"ry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=" +
"18;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bu" +
"lk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Data" +
"base Password="";Jet OLEDB:Create System Database=False;Jet OLED" +
"B:Encrypt Database=False;Jet OLEDB:Don"#39"t Copy Locale on Compact=" +
"False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:S" +
"FP=False"
LoginPrompt = False
Mode = cmReadWrite
Provider = "Microsoft.Jet.OLEDB.4.0"
Left = 40
Top = 16
end
object ADODataSet1: TADODataSet
Connection = ADOConnection1
CursorType = ctStatic
LockType = ltReadOnly
CommandText =
"SELECT den FROM MES WHERE MES.DEN <= :BeginDate ORDER BY MES.den"
ParamCheck = False
Parameters = <
item
Name = "BeginDate"
DataType = ftDate
NumericScale = 255
Precision = 255
Size = 510
Value = 37622d
end>
Prepared = True
Left = 40
Top = 72
end
object DataSource1: TDataSource
DataSet = ADODataSet1
Left = 136
Top = 64
end
end



 
TTCustomDelphiMaster ©   (2003-01-15 19:20) [16]


> DecodeDate(Date,Y,M,D);
> if M=1 then
> begin
> DateTimePicker1.DateTime:=EncodeDate(Y-1,12,1);
> DateTimePicker2.DateTime:=EncodeDate(Y,M,1);
> end
> else
> begin
> DateTimePicker1.DateTime:=EncodeDate(Y,M-1,1);
> DateTimePicker2.DateTime:=EncodeDate(Y,M,1);
> end;
>
> end;


DecodeDate(Date,Y,M,D);
DateTimePicker2.Date := EncodeDate(Y,M,1);
DateTimePicker1.Date :=IncMonth(DateTimePicker2.Date, -1);



> DataModule2.ADODataSet1.Parameters[0].Value:=DateTimePicker1.DateTime;

DataModule2.ADODataSet1.Parameters[0].Value := FormatDateTime("mm/dd/yyyy", DateTimePicker1.Date);


 
sniknik ©   (2003-01-15 19:43) [17]

описания нет :-((, будем "догадыватся".

я так понимаю 2 кнопки это сравнение нажмеш на первую один запрос на вторую другой. так? и для этого 2 "пикера".

но сравнения не получается используется DateTimePicker 1.DateTime; в обоих случаях.

TTCustomDelphiMaster © (15.01.03 19:20)
передавать строку :(( и так геморой а так еще добавится.


 
Zn   (2003-01-17 15:53) [18]

Извините, сутки не было связи...

> sniknik © (15.01.03 19:43)


> но сравнения не получается используется DateTimePicker1.DateTime;
> в обоих случаях.

Это пока для отладки, потом поменяю.
Но в целом "догадка" правильная.

> TTCustomDelphiMaster © (15.01.03 19:20)

> DataModule2.ADODataSet1.Parameters[0].Value := FormatDateTime("mm/dd/yyyy", DateTimePicker1.Date);

На это я пойтить не могу. Ваще, маразм какой-то - есть переменные типа Date, но работать с ними невозможно.

В Access отладил все запросы, думал, только вставить в ADODataSet, ADOQuery - и можно работать. Не тут-то было.


 
sniknik ©   (2003-01-17 16:15) [19]

мое мнение. разберись до конца с параметрами. должно работать и передаватся один в один. а вот передавать в Access строку с датой тут истинный геморой и начнется.

вообще если строкой то для Access надо строку #12/13/2002#

но попробуй
SELECT #12/13/2002#
и
SELECT #13/12/2002#
результат одинаковый. чуеш чем это грозит?



 
Zn   (2003-01-17 17:03) [20]


> sniknik © (17.01.03 16:15)


> результат одинаковый. чуеш чем это грозит?

Чую, чую, не глухой.
Что ж, попробуем разобраться.
Спасибо за помощь!


 
Zn   (2003-01-20 16:46) [21]

Ура! Заработало!
Случилось так, что Delphi 5 стал виснуть постоянно, даже при загрузке элементарного модуля. Деинсталлировал, а затем установил Delphi 6.
Теперь всё работает.
Так чтоm, всё-таки, это наверное глюк Delphi 5.


 
blackman ©   (2003-01-20 17:09) [22]

Converts a TDateTime value to a TSQLTimeStamp value.


 
Zn   (2003-01-20 17:30) [23]


> blackman © (20.01.03 17:09)
> Converts a TDateTime value to a TSQLTimeStamp value.

Извините, я с этим типом не работал. Он чем-то лучше TDateTime?
Или он специально для SQL-запросов разработан?



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

Текущий архив: 2003.02.06;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.013 c
14-15824
Ketmar
2003-01-20 18:58
2003.02.06
---|Ветка была без названия|---


1-15759
Новичок
2003-01-28 11:10
2003.02.06
Как сделать задержку?


3-15523
Beglec
2003-01-21 12:52
2003.02.06
Exclusive или not Exclusive


3-15412
MsGuns
2003-01-21 19:36
2003.02.06
Вывод в QReport DBMemo


1-15563
Arkady
2003-01-28 16:07
2003.02.06
try … except