数据插入的怪问题

tjzxh 2008-06-14 03:41:08
下面是原码:
procedure TForm3.N2Click(Sender: TObject);
var
a:integer;
sql,bianhao,current_time,state,beizhu:string;

begin

for a:=listbox2.items.count -1 downto 0 do

begin
if listbox2.Selected[a]=true then

begin
name:=listbox2.Items[a];
sqldataset1.Active:=false;
sqldataset1.CommandText:='SELECT bianhao, name FROM jbhk WHERE name=''' +name + '''';
sqldataset1.Active:=true;
sqldataset1.DisableControls ;
while not sqlDataSet1.Eof do
begin
{ID := ADODataSet1.FieldByName('ID').AsString;}

{Number := ADODataSet1.FieldByName('Number').AsString;}
bianhao := sqldataSet1.FieldByName('bianhao').AsString ;
current_time:=DateTimeToStr(Now);
state:='0' ;
beizhu:='' ;
sql := 'Insert Into hzk(name,bianhao,szsj,state,operator,beizhu) ';
sql := sql + 'Values(''' + name + ''',''' + bianhao + ''', ''' + current_time + ''','''+ state + ''',''' + denglu.form2.p_name + ''','''+ beizhu +''')' ;
sqldataset1.Next;
end;
sqlQuery1.SQL .Add (SQL);


sqlQuery1.ExecSQL;
name:=listbox2.Items[a];
listbox2.items.Delete(a);
listbox1.Items.add(name);
// listbox1.items.Delete(a);
end
end;
//执行到这里数据库中,仍只有添加一行数据
clientdataset1.Active :=false;

clientdataset1.Active :=true;
//执行此两句后,数据库的数据跟循环次数增加了。
showmessage('增加检查成功!');

end;

请高手帮我解决一下。
...全文
185 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjzxh 2008-06-17
  • 打赏
  • 举报
回复
呵呵,我自己已解决了。谢谢个位了。
tjzxh 2008-06-16
  • 打赏
  • 举报
回复
我将如何实现更新呢?dbgrid,数据在clientdataset1中.
tjzxh 2008-06-16
  • 打赏
  • 举报
回复
我根据楼上的检查了。如果将clientdataset1.Active :=false;

clientdataset1.Active :=true;两行去掉后,数据就正常了。加上两条,就多数据出来,是否要加其它指令呢。
simonhehe 2008-06-14
  • 打赏
  • 举报
回复

procedure TForm3.N2Click(Sender: TObject);
var
a:integer;
sql,bianhao,current_time,state,beizhu:string;
begin

for a:=listbox2.items.count -1 downto 0 do
begin
if listbox2.Selected[a]=true then
begin
name:=listbox2.Items[a];
sqldataset1.Active:=false;
sqldataset1.CommandText:='SELECT bianhao, name FROM jbhk WHERE name=''' +name + '''';
sqldataset1.Active:=true;
showmessage(inttostr(sqldataset1.recordcount)); // 如果> 1 then在后边的循环中多次插入
sqldataset1.DisableControls ;
while not sqlDataSet1.Eof do
begin
{ID := ADODataSet1.FieldByName('ID').AsString;}
{Number := ADODataSet1.FieldByName('Number').AsString;}
bianhao := sqldataSet1.FieldByName('bianhao').AsString ;
current_time:=DateTimeToStr(Now);
state:='0' ;
beizhu:='' ;
sql := 'Insert Into hzk(name,bianhao,szsj,state,operator,beizhu) ';
sql := sql + 'Values(''' + name + ''',''' + bianhao + ''', ''' + current_time + ''','''+ state + ''',''' + denglu.form2.p_name + ''','''+ beizhu +''')' ;
sqldataset1.Next;
end;
showmessage(sql); //看一下,肯定会有多个插入语句的情况
sqlQuery1.SQL .Add (SQL);
sqlQuery1.ExecSQL; // 执行这句后并不会刷新客户端的数据显示
name:=listbox2.Items[a];
listbox2.items.Delete(a);
listbox1.Items.add(name);
// listbox1.items.Delete(a);
end
end;
//执行到这里数据库中,仍只有添加一行数据
clientdataset1.Active :=false;

clientdataset1.Active :=true; // 执行这句后刷新客户端的数据显示
//执行此两句后,数据库的数据跟循环次数增加了。
showmessage('增加检查成功!');

end;
Jerry289 2008-06-14
  • 打赏
  • 举报
回复
你的思路有点乱,再整理下
tjzxh 2008-06-14
  • 打赏
  • 举报
回复
[img=
在执行clientdataset1.Active :=false;

clientdataset1.Active :=true;

tjzxh 2008-06-14
  • 打赏
  • 举报
回复
我把截图发上来。
tjzxh 2008-06-14
  • 打赏
  • 举报
回复
一般是一次的。
阿三 2008-06-14
  • 打赏
  • 举报
回复
sqlDataSet1你的这循环几次呀。
tjzxh 2008-06-14
  • 打赏
  • 举报
回复
问题在于clientdataset1.Active :=false;

clientdataset1.Active :=true;
执行后,数据本来是一条,但变成多条了。
tjzxh 2008-06-14
  • 打赏
  • 举报
回复
我的意思是说数据插入多了,本来只一条,执行后,有多条了。不是sqlQuery1.SQL .Add (SQL); 这句放在循环里。的问题。
auqfiudh 2008-06-14
  • 打赏
  • 举报
回复
while not sqlDataSet1.Eof do
begin
{ID := ADODataSet1.FieldByName('ID').AsString;}

{Number := ADODataSet1.FieldByName('Number').AsString;}
bianhao := sqldataSet1.FieldByName('bianhao').AsString ;
current_time:=DateTimeToStr(Now);
state:='0' ;
beizhu:='' ;
sql := 'Insert Into hzk(name,bianhao,szsj,state,operator,beizhu) ';
sql := sql + 'Values(''' + name + ''',''' + bianhao + ''', ''' + current_time + ''','''+ state + ''',''' + denglu.form2.p_name + ''','''+ beizhu +''')' ;
sqlQuery1.SQL .Add (SQL);
sqlQuery1.ExecSQL;
sqldataset1.Next;
end;
一定是最后一行添加了吧
sqlQuery1.SQL .Add (SQL);
sqlQuery1.ExecSQL;
这两个要放在Next 句子上面才行的哦



阿三 2008-06-14
  • 打赏
  • 举报
回复
sqlQuery1.SQL .Add (SQL); 这句放在循环里。

2,499

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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