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

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

ADODataSet - SELECT с параметром типа Date [D5, dBase, FoxPro]


Страницы:   1 2

Zn ©   (2003-01-15 16:01:00) 

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


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


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

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


blackman   (2003-01-20 17:09:00) [2]

Converts a TDateTime value to a TSQLTimeStamp value.


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

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


Zn   (2003-01-17 17:03:00) [4]


> sniknik © (17.01.03 16:15)


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

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


sniknik   (2003-01-17 16:15:00) [5]

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

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

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


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

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

> 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-15 19:43:00) [7]

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

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

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

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


TTCustomDelphiMaster   (2003-01-15 19:20:00) [8]


> 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);


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


> 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


sniknik   (2003-01-15 18:13:00) [10]

ну не может быть, если
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 17:46:00) [11]


> sniknik © (15.01.03 17:36)

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


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

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


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

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

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

Не работает.


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


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

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


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

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



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

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 может различно но одинаково)


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


> 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))?


Delirium^.Tremens   (2003-01-15 16:33:00) [18]

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

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


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


> sniknik © (15.01.03 16:18)

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



sniknik   (2003-01-15 16:18:00) [20]

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


Страницы:   1 2

Наверх

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