我建立了个数据表,是datetime数据类型,我想把stringgrid中的字符串时间格式("2005-5-10")
转化为datetime类型后导入到建立好的数据表中,关键代码如下:for a:=1 to stringgrid1.RowCount-1 do
  begin
    with adoquery2 do
    begin
      close;
      sql.Clear;
      sql.Add('insert into 表X(字段A,字段B) values(:a,:b)');      for b:=0 to stringgrid1.ColCount-1 do
        rs1[b]:=stringgrid1.Cells[b,a];
        adoquery2.Parameters[0].Value:=rs1[0];//rs1是我定义的数组
        adoquery2.Parameters[1].Value:=strtodatetime(rs1[1]);//这是我转化的方式!!!        execsql;
    end;
  end;为什么运行的时候总是报错啊:"插入错误,列名或所提供值的数据与表定义不匹配"我想问题可能是在数据转化没有成功,请各位帮我看下,是不是我的转化方式,语句语法有错误啊????
谢谢啊~~

解决方案 »

  1.   

    FormatDateTime('yyyy-mm-dd',StrToDateTime(rs1[1]));
    这样试试...
      

  2.   

    你已经用了with块了
    直接写
    Parameters[0].Value:=....就是了,前面不要去指定AdoQuery2
      

  3.   

    adoquery2.Parameters[1].Value:=strtodate(rs1[1]);你若用strtodatetime(rs1[1]) 则rsl[1]的值必须具有MM/DD/YY HH:MM:SS[AM|PM]格式,其中日期和时间分隔符与系统日期时间常量设置相关
      

  4.   

    建议不要这样写 ,调试的时候不方便.
    这样写比较好
    for b:=0 to stringgrid1.ColCount-1 do
    begin
      rs1[b]:=stringgrid1.Cells[b,a];
      with adoquery2 do
      begin
        sql.text:='Insert into 表X(字段A,字段B) values ('+quotedstr(rs1[0])+','+quotedstr(strtodatetime(rs1[1]))+')';
        try
          ExecSQL;
        except
          inputbox('','',sql.text);//执行失败,输出SQL语句,到查询分析器里执行查看语句错误 
        end;
      end;
    end;
      

  5.   

    楼主你似乎搞错了,你用的是参数传递,这样在接受参数值时必须是日期型的,所以不需要转换,你多此一举了,或者你不用参数也行直接写:如楼上(pengxuan(网虫先生))的写法