时间问题(100分)

  • 主题发起人 主题发起人 ych2071
  • 开始时间 开始时间
Y

ych2071

Unregistered / Unconfirmed
GUEST, unregistred user!
我想通过月份来得到库中一些记录。
程序简单如下:
....
query1.sql.clear;
query1.sql.add('select * from database.db');
query1.sql.add('where copy(datetostr(sj),4,2)='+''''+combobox1.text+'''');
try
query1.open
except
query1.execsql;
....
其中sj是date型的字段,combobox中是月份。
出错 :‘project raised exception class EDBEnginerError with message'capacity not
supported' process stopped'
请问why?
如何通过月份来取出一部分记录?
谢谢了!!!!
 
var
Year, Month, Day: Word;
begin
Year := StrtoInt(Edit1.Text);
Month := StrtoInt(ComboBox1.text);
with query1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from employee where hiredate>=:v_date1 and hiredate<=:v_date2');
parambyname('v_date1').AsDateTime := EncodeDate(Year,Month,1);
case Month of
1: Day := 31;
2: if IsLeapYear(Year) then Day := 29 else Day := 28;
3: Day := 31;
4: Day := 30;
5: Day := 31;
6: Day := 30;
7: Day := 31;
8: Day := 31;
9: Day := 30;
10: Day := 31;
11: Day := 30;
12: Day := 31;
end;
parambyname('v_date2').AsDateTime := EncodeDate(Year,Month,Day);
Open;
end;
end;
 
简单一些
case Month of
1,3,5,7,8,10,12: Day := 31;
2: if IsLeapYear(Year) then Day := 29 else Day := 28;
4,6,9,11: Day := 30;
end;
 
老兄:Copy 和 DateToStr 是 Delphi 的库函数,数据库引擎并不认识啊。
比如:Paradox 的取子串函数就是 SubString ,用 Copy 就错了。上面两位大虾的意思
是让你用时间区间的方法来做。See it ?
 
你最好通過斷點設定來看一下到底錯出在哪儿﹖我想你可能是SQL語句中不支持copy這個函
數﹐所以你最好先用一個變量將其值得到后再加在SQL語句中就沒有問題了。
var Strsj:string;
begin
Strsj:=copy(datetostr(sj),4,2)
query1.sql.clear;
query1.sql.add('select * from database.db');
query1.sql.add('where '+Strsj+'='+''''+combobox1.text+'''');
try
query1.open
except
query1.execsql;
end;
這樣你試試看有沒有問題。'where '+Strsj+'='+這一段沒有測試﹐不知能不能正確運用﹐
若不能再稍作修改﹐沒時間試了﹐sorry!
 
同意zhangkan,我也是这样做的,没问题.
 
多人接受答案了。
 
后退
顶部