请教ADO+access数据库插入记录问题!

时间:2021-09-20 21:43:10
在数据库中,定义组号,组号申请人为文本,申请日期为时间日期类型!
with adoquery1 do
begin
  close;    //插入数据
  sql.Clear;
  sql.Add('insert into 编组表(组号,组号申请人,申请日期) values (:a,:b,:c)');
  Parameters.ParamByName('a').Value:= trim(edit2.text);
  Parameters.ParamByName('b').Value:= trim(edit3.text);
  Parameters.ParamByName('c').Value:= datetimePicker1.time;
  execsql;//若此行语句execsql则点击按钮错误为下面的提示一,若为open,则提示错误为提示二
end;//运行的时候没什么错误,只是在触发事件后才出现错误,并且错误后,有时侯记录也能写进去!

提示一:project Project1.exe raised exception class EAccessViolation with message'Access violation at address 1F487CAB in module'msado15.dll',Write of address 012C902C'.Process stopped.Use step or Run to continue.
提示二:当前提供者不支持从单一执行恢复多个记录集

12 个解决方案

#1


begin
  close;    //插入数据
  sql.Clear;
  active:=false;

#2


Parameters.ParamByName('c').Value:= datetimePicker1.time;

改为如下试试
Parameters.ParamByName('c').Value:= FormatDateTime('1900-1-1 hh:mm:ss',datetimePicker1.Datetime);
显示的时候需要截取下

其实,有时期也没有关系

#3


to wei_ping1979(南柯一梦)
  前面的adoquery1.close 已经把数据集关闭了,再加一句active:=false;好像是多余的吧!

to qizhanfeng(glacier)
 应该不是那的问题,我试验一下还是问题依旧,其实有时候记录的确是加进去了,可 就是再执行的时候出现上述的错误!

#4


Open肯定是不行的,因为open执行的结果是返回数据集的
对于ExecSql应该没有问题,你用的是delphi7吗,我写了一下
  with adoquery1 do
  begin
    close;    //插入数据
    sql.Clear;
    sql.Add('insert into aa(a,b,c) values (:a,:b,:c)');
    Parameters.ParamByName('a').Value:= trim(edit1.text);
    Parameters.ParamByName('b').Value:= trim(edit2.text);
    Parameters.ParamByName('c').Value:= Datetostr(datetimePicker1.time);
    execsql;
  end;


你试一下。

#5


当我用execsql语句执行时,则点击事件触发按钮后错误为下面的提示:project Project1.exe raised exception class EAccessViolation with message'Access violation at address 1F487CAB in module'msado15.dll',Write of address 012C902C'.Process stopped.Use step or Run to continue.
若用语句open,则错误为:当前提供者不支持从单一执行恢复多个记录集。
当我单步执行时,总是在执行execsql或open时出现弹出错误



#6


会不会是汉字的问题?

这句
sql.Add('insert into 编组表(组号,组号申请人,申请日期) values (:a,:b,:c)');
改成
sql.Add('insert into [编组表]([组号],[组号申请人],[申请日期]) values (:a,:b,:c)');
怎么样呢?

#7


本人也是刚学习连接数据库,我也随到了一个和你一模一样的问题啊,不知道这位老兄搞定了没有啊,搞定了的话,帮小弟我一把了,

#8


我试过拉,这样可以执行
with adoquery1 do
begin
  close;    //插入数据
  sql.Clear;
  sql.Add('insert into 编组表(组号,组号申请人,申请日期) values (:a,:b,:c)');
  Parameters.ParamByName('a').Value:= trim(edit2.text);
  Parameters.ParamByName('b').Value:= trim(edit3.text);
  Parameters.ParamByName('c').Value:= datetimetostr(datetimePicker1.datetime);
  execsql;//

#9


在之前加上
Parameters.AddParameter.Name := 'a'
Parameters.AddParameter.Name := 'b'
Parameters.AddParameter.Name := 'c'

#10


Parameters.ParamByName('c').Value:= Datetostr(datetimePicker1.time);
先去了
看看错误是不是和这句相关

#11


ADOQuery.Insert;
            ADOQuery.FieldValues['Data1'] := EncryptString( sDate, AES_MIMA );
            ADOQuery.FieldValues['Data2'] := EncryptString( sTime, AES_MIMA ) ;
            ADOQuery.FieldValues['Data3'] := EncryptString( sTime, AES_MIMA ) ;

#12


别用add了,用Insert吧

#1


begin
  close;    //插入数据
  sql.Clear;
  active:=false;

#2


Parameters.ParamByName('c').Value:= datetimePicker1.time;

改为如下试试
Parameters.ParamByName('c').Value:= FormatDateTime('1900-1-1 hh:mm:ss',datetimePicker1.Datetime);
显示的时候需要截取下

其实,有时期也没有关系

#3


to wei_ping1979(南柯一梦)
  前面的adoquery1.close 已经把数据集关闭了,再加一句active:=false;好像是多余的吧!

to qizhanfeng(glacier)
 应该不是那的问题,我试验一下还是问题依旧,其实有时候记录的确是加进去了,可 就是再执行的时候出现上述的错误!

#4


Open肯定是不行的,因为open执行的结果是返回数据集的
对于ExecSql应该没有问题,你用的是delphi7吗,我写了一下
  with adoquery1 do
  begin
    close;    //插入数据
    sql.Clear;
    sql.Add('insert into aa(a,b,c) values (:a,:b,:c)');
    Parameters.ParamByName('a').Value:= trim(edit1.text);
    Parameters.ParamByName('b').Value:= trim(edit2.text);
    Parameters.ParamByName('c').Value:= Datetostr(datetimePicker1.time);
    execsql;
  end;


你试一下。

#5


当我用execsql语句执行时,则点击事件触发按钮后错误为下面的提示:project Project1.exe raised exception class EAccessViolation with message'Access violation at address 1F487CAB in module'msado15.dll',Write of address 012C902C'.Process stopped.Use step or Run to continue.
若用语句open,则错误为:当前提供者不支持从单一执行恢复多个记录集。
当我单步执行时,总是在执行execsql或open时出现弹出错误



#6


会不会是汉字的问题?

这句
sql.Add('insert into 编组表(组号,组号申请人,申请日期) values (:a,:b,:c)');
改成
sql.Add('insert into [编组表]([组号],[组号申请人],[申请日期]) values (:a,:b,:c)');
怎么样呢?

#7


本人也是刚学习连接数据库,我也随到了一个和你一模一样的问题啊,不知道这位老兄搞定了没有啊,搞定了的话,帮小弟我一把了,

#8


我试过拉,这样可以执行
with adoquery1 do
begin
  close;    //插入数据
  sql.Clear;
  sql.Add('insert into 编组表(组号,组号申请人,申请日期) values (:a,:b,:c)');
  Parameters.ParamByName('a').Value:= trim(edit2.text);
  Parameters.ParamByName('b').Value:= trim(edit3.text);
  Parameters.ParamByName('c').Value:= datetimetostr(datetimePicker1.datetime);
  execsql;//

#9


在之前加上
Parameters.AddParameter.Name := 'a'
Parameters.AddParameter.Name := 'b'
Parameters.AddParameter.Name := 'c'

#10


Parameters.ParamByName('c').Value:= Datetostr(datetimePicker1.time);
先去了
看看错误是不是和这句相关

#11


ADOQuery.Insert;
            ADOQuery.FieldValues['Data1'] := EncryptString( sDate, AES_MIMA );
            ADOQuery.FieldValues['Data2'] := EncryptString( sTime, AES_MIMA ) ;
            ADOQuery.FieldValues['Data3'] := EncryptString( sTime, AES_MIMA ) ;

#12


别用add了,用Insert吧