奇怪的问题:关于ACCESS2000和QUERY ( 积分: 100 )

  • 主题发起人 主题发起人 幼虫2004
  • 开始时间 开始时间
如果把SQL语句改成这样呢?
INSERT INTO dd ( 短日期,长时间)
SELECT "2001-1-1" AS 表达式1, "10:30:03" AS 表达式2;
 
我没搞过Access啊,我的意思是你数据库里的时间格式要和你从delphi中插入的一致
 
打开数据库察看字段值发现和我要输入的一样。就是不行

????
* /*
==
 
对了,如果这么写就可以,但是日期、时间是个固定值,无法用参数变量。
总不会让我逐个字符处理吧?
main0.Query1.SQL.Add('insert into dd(短日期,短时间,文本,备注,文本) values(#2005-4-11#,#12::12::12#,123,:p1,:p2)');
main0.Query1.Params[0].AsString := 'kkkk';
main0.Query1.Params[1].AsMemo := main0.suiMemo1.Text;
 
帮我走走这段程序在您的机器上
 
procedure TForm1.Button11Click(Sender: TObject);
begin
query1.Close;
query1.SQL.Clear;

query1.SQL.Add('insert into dd(短日期,短时间,文本,备注,文本) values(:v1,:v2,:v3,:v4,:v5)');
query1.Params[0].AsDate := strtodate('2005-5-5');//edit4输入2005-5-5,用strtodate可以转换成日期,
query1.Params[1].AsTime := strtotime('07:20、7:20、17:20'
query1.Params[2].AsString := edit5.Text;//‘111’
query1.Params[3].AsString := edit6.Text;//‘试验试验试验’
query1.Params[4].AsString := edit7.Text;//‘小王’

query1.Prepare;
query1.ExecSQL;

end;
 
?????
{ @/@}
==
 
boy2002cn应该有点小问题,你试试这个,ACCESS日期要用'#'号,我试了可以的
main0.Query1.SQL.clear;
sqltmp := 'insert into 库表名(短日期,长时间,文本,备注) ';
sqltmp :=sqltmp + 'values(#'+main0.edit1.text+'#,#'+main0.maskedit1.text+'#,''';
sqltmp :=sqltmp +main0.SpinEdit1.Text+''','''+main0.Memo1.Text+''')';
main0.Query1.SQL.Add(sqltmp);
main0.Query1.Prepare;
main0.Query1.execsql;
 
谢谢大家,今天在朋友们的帮助下我终于懂了!

wqyzsh的段子也不行吧,不信您再试试,问题出在时间上,就是maskedit1.text上,因为Access要求(这块我也不确定,也可能是Delphi把SQL语句传送给Access后造成的)时间写成**::**::**,至少是**::**,

正确的如下,我在单位D6+ACCESS2000走通了,完全符合设计:
procedure TForm1.Button11Click(Sender: TObject);
var
tmpd,tmpt:tdatetime;
tmpd1,tmpt1:string;
begin
query1.Close;
query1.SQL.Clear;
tmpd := strtodate(edit4.text);
tmpt := strtotime(maskedit5.text);
tmpd1 := formatdatetime('yyyy-mm-dd',tmpd); // 'yyyy/mm/dd' 'yyyy/m/d' 都行
tmpt1 := formatdatetime('hh::mm',tmpt); // 必须是::否则错!
query1.SQL.Add('insert into dd(短日期,短时间,文本,备注,文本) values(#'+tmpd1+'#,#'+tmpt1+'#,:v1,:v2,:v3)');
query1.Params[0].AsString := edit5.Text;//‘111’
query1.Params[1].AsString := edit6.Text;//‘试验试验试验’
query1.Params[2].AsString := edit7.Text;//‘小王’

query1.Prepare;
query1.ExecSQL;

end;

请各位同好注意,这是Delphi+ACCESS处理日期、时间型字段的正解。
 
后退
顶部