Текущий архив: 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.51 MB
Время: 0.017 c