Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.02.06;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.015 c
1-15737
Chubais
2003-01-27 18:07
2003.02.06
Посоветуйте средства для построения диаграмм


14-15899
IronHawk
2003-01-05 20:14
2003.02.06
Помощь в плане поиска для реферата!


14-15872
denisac
2003-01-18 14:55
2003.02.06
Работа продолжается!!!!!


14-15841
gsu
2003-01-21 17:17
2003.02.06
А что там с дотом ?


4-15997
VirginKiller
2002-12-24 10:10
2003.02.06
Как получить возможные размеры шрифта?





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