adoquery.insert问题,奇怪的错误

greenwaterandice 2003-08-23 11:00:49
程序如下:
procedure TfrmTongJi.displaymianji; //显示统计的结果

var
strtime,stroldtime,linb:string;
begin

ADOQGridMianji.CursorLocation:=clUseServer;
ADOQGridMianJi.CursorType:=ctkeySet;
ADOQGridMianJi.LockType:=LtBatchoptimistic;
//上面是缓存更新的一些设置
// ADOQGridMianJi.CachedUpdates:= true 这两句编译不过去
// ADOQGridMianJi.RequestLive:=True;
ADOQGridMianJi.Close;
ADOQgridMianJi.SQL.Clear;
ADOQGridMianJi.SQL.Add('select * from tffarea where lbid =:lib order by tjsj');
ADOQGridMianJi.Parameters.ParamByName('lib').Value:=trim(TTSFanWeiTree.Selected.Text);
ADOQGridMianJi.Prepared ;
ADOQGridMianJi.Open ;
上面是库里原有的纪录
ADOQMianJi2.Close;
ADOQMianJi2.SQL.Clear;
ADOQMianJi2.SQL.Add('select tjsj,sum(zmj) as zmj,sum(ludhj) as ludhj,sum(lindhj) as lindhj,sum(slhj) as slhj,sum(zyl) as zyl,');
ADOQMianJI2.SQL.Add('sum(kyl) as kyl,sum(zkhjl) as zkhjl,sum(zl) as zl ,sum(sl) as sl,sum(gmldhj) as gmldhj,sum(qmszfwngm) as qmszfwngm,sum(qmszfwwgm) as qmszfwwgm,');
ADOQMianJi2.SQL.Add('sum(wlmldhj) as wlmldhj,sum(cfjd) as cfjd,sum(hsjd) as hsjd,sum(wclzld) as wclzld,sum(trgxld) as trgxld,sum(ybzld) as ybzld,');
ADOQMianJi2.SQL.Add('sum(mpd) as mpd,sum(hdhj) as hdhj,sum(qmszfwnhd) as qmszfwnhd,sum(qmszfwwhd) as qmszfwwhd,sum(lwszd) as lwszd,sum(nlyd) as nlyd,sum(spszd) as spszd,');
ADOQMianJi2.SQL.Add('sum(nlsy) as nlsy,sum(slfgl) as slfgl from tffarea where lbid=''107'' group by tjsj order by tjsj') ;
ADOQMianJi2.Prepared;
ADOQMianJi2.Open;

//上边是把库里原有记录按时间相同的加和
//下边是想把加和的记录插入到原记录中间
while not ADOQGridMianJi.Eof
do
begin

strtime:=ADOQGridMianJi.Fields.fieldbyname('tjsj').Value ;
linb:=ADOQGridMianJi.Fields.fieldbyname('lbid').Value;

if (not ADOQMianJi2.Eof) and (trim(ADOQMianJi2.Fields.fieldbyname('tjsj').Value) =trim(strtime)) and (strtime<>stroldtime) then//这个条件是为了判断插入位置而设的
begin
stroldtime:=strtime;
ADOQGridMianJi.Insert ;
ADOQGridMianJi.Edit ;
ADOQGRIDMianJi.FieldByName('lbid').AsString:=linb;
ADOQGRIDMianJi.FieldByName('tjsj').AsString :=strtime;
ADOQGRIDMianJi.FieldByName('qs').AsString :='总和';
ADOQGRIDMianJi.FieldByName('zmj').AsFloat :=ADOQMianji2.FieldByName('zmj').Value;
ADOQGRIDMianJi.FieldByName('ludhj').AsFloat :=ADOQMianji2.FieldByName('ludhj').Value;
ADOQGRIDMianJi.FieldByName('lindhj').AsFloat :=ADOQMianji2.FieldByName('lindhj').Value;
ADOQGRIDMianJi.FieldByName('slhj').AsFloat :=ADOQMianji2.FieldByName('slhj').Value;
ADOQGRIDMianJi.FieldByName('zyl').AsFloat :=ADOQMianji2.FieldByName('zyl').Value;
ADOQGRIDMianJi.FieldByName('kyl').AsFloat :=ADOQMianji2.FieldByName('kyl').Value;
ADOQGRIDMianJi.FieldByName('zkhjl').AsFloat :=ADOQMianji2.FieldByName('zkhjl').Value;
ADOQGRIDMianJi.FieldByName('zl').AsFloat :=ADOQMianji2.FieldByName('zl').Value;
ADOQGRIDMianJi.FieldByName('sl').AsFloat :=ADOQMianji2.FieldByName('sl').Value;
ADOQGRIDMianJi.FieldByName('gmldhj').AsFloat :=ADOQMianji2.FieldByName('gmldhj').Value;
ADOQGRIDMianJi.FieldByName('qmszfwngm').AsFloat :=ADOQMianji2.FieldByName('qmszfwngm').Value;
ADOQGRIDMianJi.FieldByName('qmszfwwgm').AsFloat :=ADOQMianji2.FieldByName('qmszfwwgm').Value;
ADOQGRIDMianJi.FieldByName('wlmldhj').AsFloat :=ADOQMianji2.FieldByName('wlmldhj').Value;
ADOQGRIDMianJi.FieldByName('cfjd').AsFloat :=ADOQMianji2.FieldByName('cfjd').Value;
ADOQGRIDMianJi.FieldByName('hsjd').AsFloat :=ADOQMianji2.FieldByName('hsjd').Value;
ADOQGRIDMianJi.FieldByName('wclzld').AsFloat :=ADOQMianji2.FieldByName('wclzld').Value;
ADOQGRIDMianJi.FieldByName('trgxld').AsFloat :=ADOQMianji2.FieldByName('trgxld').Value;
ADOQGRIDMianJi.FieldByName('ybzld').AsFloat :=ADOQMianji2.FieldByName('ybzld').Value;
ADOQGRIDMianJi.FieldByName('mpd').AsFloat :=ADOQMianji2.FieldByName('mpd').Value;
ADOQGRIDMianJi.FieldByName('hdhj').AsFloat :=ADOQMianji2.FieldByName('hdhj').Value;
ADOQGRIDMianJi.FieldByName('qmszfwnhd').AsFloat :=ADOQMianji2.FieldByName('qmszfwnhd').Value;
ADOQGRIDMianJi.FieldByName('qmszfwwhd').AsFloat :=ADOQMianji2.FieldByName('qmszfwwhd').Value;
ADOQGRIDMianJi.FieldByName('lwszd').AsFloat :=ADOQMianji2.FieldByName('lwszd').Value;
ADOQGRIDMianJi.FieldByName('nlyd').AsFloat :=ADOQMianji2.FieldByName('nlyd').Value;
ADOQGRIDMianJi.FieldByName('spszd').AsFloat :=ADOQMianji2.FieldByName('spszd').Value;
ADOQGRIDMianJi.FieldByName('nlsy').AsFloat :=ADOQMianji2.FieldByName('nlsy').Value;
ADOQGRIDMianJi.FieldByName('slfgl').AsFloat :=ADOQMianji2.FieldByName('slfgl').Value;
ADOQGridMianJI.Post ;但执行到这儿的时候就出现了这样的错误:provider cannot determine the value Possible reasons:The record was just created the default value for the field was not available,or the user has not set a new value
可是我对每一个字段都赋值了呀

ADOQMianJI2.Next;
ADOQGridMianJi.Next ;
end
else
ADOQGridMianJi.Next;

end;
end;
请高手看看是什么问题,总体上是想在本地插入加和的记录,不想在数据库里写,
...全文
92 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
DouZHlang 2003-08-23
  • 打赏
  • 举报
回复
必须先关闭数据集,才能修改数据的属性,将ADOQGridMianJi.Close;放到第一句可能会行
不过我没试

greenwaterandice 2003-08-23
  • 打赏
  • 举报
回复
记录能插入了,是要设置成ADOQGridMianji.CursorLocation:=clUseclient,但对query里的记录怎么排序呢?比方说按统计时间tjsj,我用adoquery.sort:='tjsj asc'他就报错,说是找不到tjsj asc字段
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, ADODB, OleServer, Excel2000, ExtCtrls, Grids, DBGrids; type TForm1 = class(TForm) ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; DataSource1: TDataSource; DBGrid1: TDBGrid; Label1: TLabel; Edit1: TEdit; Label2: TLabel; Edit2: TEdit; ComboBox1: TComboBox; Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ADOQuery1.Close; ADOQuery1.SQL.Clear; if edit2.Text='13440101' then begin if combobox1.Text='全部学期' then begin ADOQuery1.SQL.Add('Select * From 13440101 Where xm=:sxm and xh=:sxh '); ADOQuery1.Parameters.ParamByName('sxm').Value := Edit1.Text; ADOQuery1.Parameters.ParamByName('sxh').Value := Edit2.Text; ADOQuery1.Open end; if combobox1.Text='第一学期' then begin ADOQuery1.SQL.Add('Select * From 13440101 Where xm=:sxm and xh=:sxh and xq=:sxq '); ADOQuery1.Parameters.ParamByName('sxm').Value := Edit1.Text; ADOQuery1.Parameters.ParamByName('sxh').Value := Edit2.Text; ADOQuery1.Parameters.ParamByName('sxq').Value :='1'; ADOQuery1.Open end; if combobox1.Text='第二学期' then begin ADOQuery1.SQL.Add('Select * From 13440101 Where xm=:sxm and xh=:sxh and xq=:sxq '); ADOQuery1.Parameters.ParamByName('sxm').Value := Edit1.Text; ADOQuery1.Parameters.ParamByName('sxh').Value := Edit2.Text; ADOQuery1.Parameters.ParamByName('sxq').Value :='2'; ADOQuery1.Open end; if combobox1.Text='第三学期' then begin ADOQuery1.SQL.Add('Select * From 13440101 Where xm=:sxm and xh=:sxh and xq=:sxq '); ADOQuery1.Parameters.ParamByName('sxm').Value := Edit1.Text; ADOQuery1.Parameters.ParamByName('sxh').Value := Edit2.Text; ADOQuery1.Parameters.ParamByName('sxq').Value :='3'; ADOQuery1.Open end; if combobox1.Text='第四学期' then begin ADOQuery1.SQL.Add('Select * From 13440101 Where xm=:sxm and xh=:sxh and xq=:sxq '); ADOQuery1.Parameters.ParamByName('sxm').Value := Edit1.Text; ADOQuery1.Parameters.ParamByName('sxh').Value := Edit2.Text; ADOQuery1.Parameters.ParamByName('sxq').Value :='4'; ADOQuery1.Open end; end; if edit2.Text='13440102' then begin ADOQuery1.SQL.Add('Select * From 13440101 Where xm=:sxm and xh=:sxh and xq=:sxq'); ADOQuery1.Parameters.ParamByName('sxm').Value := Edit1.Text; ADOQuery1.Parameters.ParamByName('sxh').Value := Edit2.Text; ADOQuery1.Parameters.ParamByName('sxq').Value :='1'; ADOQuery1.Open end; dbgrid1.Columns.Items[0].Width:=60; dbgrid1.Columns.Items[1].Width:=60; dbgrid1.Columns.Items[2].Width:=60; dbgrid1.Columns.Items[3].Width:=150; dbgrid1.Columns.Items[4].Width:=80; dbgrid1.Columns.Items[5].Width:=60; dbgrid1.Columns.Items[6].Width:=60; dbgrid1.Columns.Items[7].Width:=60; dbgrid1.Columns.Items[8].Width:=60; dbgrid1.Columns.Items[9].Width:=60; dbgrid1.Columns.Items[10].Width:=60; end; procedure TForm1.Button2Click(Sender: TObject); begin ADOQuery1.Close; ADOQuery1.SQL.Clear; if edit2.Text='13440101' then begin ADOQuery1.SQL.Add('Select * From 13440101 Where cj<60 and xh=:sxh'); ADOQuery1.Parameters.ParamByName('sxh').Value := Edit2.Text; ADOQuery1.Open; end; if edit2.Text='13440102' then begin ADOQuery1.SQL.Add('Select * From 13440101 Where cj<60 and xh=:sxh'); ADOQuery1.Parameters.ParamByName('sxh').Value := Edit2.Text; ADOQuery1.Open; end; dbgrid1.Columns.Items[0].Width:=60; dbgrid1.Columns.Items[1].Width:=60; dbgrid1.Columns.Items[2].Width:=60; dbgrid1.Columns.Items[3].Width:=150; dbgrid1.Columns.Items[4].Width:=80; dbgrid1.Columns.Items[5].Width:=60; dbgrid1.Columns.Items[6].Width:=60; dbgrid1.Columns.Items[7].Width:=60; dbgrid1.Columns.Items[8].Width:=60; dbgrid1.Columns.Items[9].Width:=60; dbgrid1.Columns.Items[10].Width:=60; end; procedure TForm1.Button3Click(Sender: TObject); begin form1.ADOQuery1.Close; form1.ADOQuery1.SQL.Clear; form1.ADOQuery1.SQL.Add('Select xh From xsmessage Where xh=:sxh'); form1.ADOQuery1.Parameters.ParamByName('sxh').Value := Edit2.Text; form1.ADOQuery1.Open; form2.qrdbtext1.DataField:='xh'; form2.quickrep1.Preview; end; procedure TForm1.FormCreate(Sender: TObject); begin end; end.

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧