有谁知道这个循环语句错在哪里?奖200分,谢谢 ( 积分: 100 )

  • 主题发起人 主题发起人 zjycpic
  • 开始时间 开始时间
Z

zjycpic

Unregistered / Unconfirmed
GUEST, unregistred user!
以下这个语句,最终希望客户端临时表里插入选择的数据,可是数据总是插入一条,但是把
以下语句的一条语句(lDataSet.AppendRecord([UserSession.CF_CX.FieldByName('CFID').Value,UserSession.CF_CX.FieldByName('CF_NAME').Value,UserSession.CF_CX.FieldByName('MEMO').Value]);)换成 "UserSession.CF_CX.delete"就符合我选中的记录都循环删除,可是添加数据循环就只能添加一条记录或者相同的记录,删除可以,为什么添加就不行。以下是代码,请指出哪里有问题!谢谢了。

procedure TCF_PRINT.TIWDBAdvWebGrid1ButtonClick(Sender: TObject; RowIndex,
ColumnIndex: Integer);
var
i,numdel: Integer;
lDataSet: TClientDataSet;
begin
lDataSet := TClientDataSet.Create(Self);
lDataSet.FieldDefs.Add('CFID', ftInteger, 0);
lDataSet.FieldDefs.Add('CF_NAME', ftString, 50);
lDataSet.FieldDefs.Add('MEMO', ftBlob, 80);
lDataSet.CreateDataSet;
numdel := 0;
for i := 1 to TIWDBAdvWebgrid1.RowCount do
begin
if TIWDBAdvWebGrid1.RowSelect[TIWDBAdvWebGrid1.RowOffset + i - 1] then
begin
UserSession.CF_CX.First;
UserSession.CF_CX.MoveBy(TIWDBAdvWebGrid1.RowOffset + i - 1 - numdel);
lDataSet.AppendRecord([UserSession.CF_CX.FieldByName('CFID').Value,UserSession.CF_CX.FieldByName('CF_NAME').Value,UserSession.CF_CX.FieldByName('MEMO').Value]);
Inc(numdel);
end;
end;
 
以下这个语句,最终希望客户端临时表里插入选择的数据,可是数据总是插入一条,但是把
以下语句的一条语句(lDataSet.AppendRecord([UserSession.CF_CX.FieldByName('CFID').Value,UserSession.CF_CX.FieldByName('CF_NAME').Value,UserSession.CF_CX.FieldByName('MEMO').Value]);)换成 "UserSession.CF_CX.delete"就符合我选中的记录都循环删除,可是添加数据循环就只能添加一条记录或者相同的记录,删除可以,为什么添加就不行。以下是代码,请指出哪里有问题!谢谢了。

procedure TCF_PRINT.TIWDBAdvWebGrid1ButtonClick(Sender: TObject; RowIndex,
ColumnIndex: Integer);
var
i,numdel: Integer;
lDataSet: TClientDataSet;
begin
lDataSet := TClientDataSet.Create(Self);
lDataSet.FieldDefs.Add('CFID', ftInteger, 0);
lDataSet.FieldDefs.Add('CF_NAME', ftString, 50);
lDataSet.FieldDefs.Add('MEMO', ftBlob, 80);
lDataSet.CreateDataSet;
numdel := 0;
for i := 1 to TIWDBAdvWebgrid1.RowCount do
begin
if TIWDBAdvWebGrid1.RowSelect[TIWDBAdvWebGrid1.RowOffset + i - 1] then
begin
UserSession.CF_CX.First;
UserSession.CF_CX.MoveBy(TIWDBAdvWebGrid1.RowOffset + i - 1 - numdel);
lDataSet.AppendRecord([UserSession.CF_CX.FieldByName('CFID').Value,UserSession.CF_CX.FieldByName('CF_NAME').Value,UserSession.CF_CX.FieldByName('MEMO').Value]);
Inc(numdel);
end;
end;
 
UserSession.CF_CX.MoveBy(TIWDBAdvWebGrid1.RowOffset + i - 1 - numdel); //????
是不是要移动到末尾阿?
UserSession.CF_CX.MoveBy(TIWDBAdvWebGrid1.RowOffset + i - 1);
 
循环里i每次加1了,你的numdel也加1 了,
TIWDBAdvWebGrid1.RowOffset + i - 1 - numdel 的值不是相当于没变吗
 
这样试试看:

for i := TIWDBAdvWebgrid1.RowCount downto 1 do
begin
if TIWDBAdvWebGrid1.RowSelect[TIWDBAdvWebGrid1.RowOffset + i - 1] then
begin
UserSession.CF_CX.First;
UserSession.CF_CX.MoveBy(TIWDBAdvWebGrid1.RowOffset + i - 1 - numdel);
lDataSet.AppendRecord([UserSession.CF_CX.FieldByName('CFID').Value,UserSession.CF_CX.FieldByName('CF_NAME').Value,UserSession.CF_CX.FieldByName('MEMO').Value]);
Inc(numdel);
end;
end;
 
按照 njxdh 的方法 在修改了语句,还是只有一条插入记录。
如果按照以下这样改,记录可以插入选择的多条记录,但是插入的记录与选择的不一致,老
是选择的第一条记录和其它N个记录。
for i := TIWDBAdvWebgrid1.RowCount downto 1 do
begin
if TIWDBAdvWebGrid1.RowSelect[TIWDBAdvWebGrid1.RowOffset + i - 1] then
begin
UserSession.CF_CX.First;
UserSession.CF_CX.MoveBy(TIWDBAdvWebGrid1.RowOffset + i - 1 - numdel);
lDataSet.insert
lDataSet.insertRecord([UserSession.CF_CX.FieldByName('CFID').Value,UserSession.CF_CX.FieldByName('CF_NAME').Value,UserSession.CF_CX.FieldByName('MEMO').Value]);
Inc(numdel);
end;
end;
 
将选择的数据插入到临时表中,这个"选择的数据"是不是在DBGRID中选啊?
设DBGRID是连接到 MyTable 的:
var
i:integer;
mybookmark:TBookmark ;
lDataSet :TClientDataSet ;
begin

//创建 lDataSet 部分,略去...........

for i:=0 to DBGrid1.SelectedRows.Count -1 do
begin
mybookmark := TBookmarkList( DBGrid1.SelectedRows );
MyTable.GotoBookmark(mybookmark);
lDataSet.Append;
lDataSet.Fields[0].Value := MyTable.Fields[0].Value;
lDataSet.Fields[1].Value := MyTable.Fields[1].Value;
lDataSet.Fields[2].Value := MyTable.Fields[2].Value;
lDataSet.Post;
end;
end;
 
谢谢。可是我的dbgrid 只有这两个选项
tiwdbadvwebgrid1.rowselect:[r:integer]:boolean
tiwdbadvwebgrid1.rowoffset:integer
 
分不够在加,yyzyw,的代码有问题
mybookmark := TBookmarkList( DBGrid1.SelectedRows );
 
是用的 DELPHI 自带的 DBGRID 吗?
我重新测试过了,没有问题啊.就是一个 DBGRID 的遍历问题.
界面: AdoTable,AdoConnection,DBGrid,DataSource,Button
代码:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
mybookmark:TBookmark ;
begin
for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
mybookmark := TBookmarkList(DBGrid1.SelectedRows);
ADOTable1.GotoBookmark(mybookmark );
ShowMessage(ADOTable1.Fields[0].asstring);
end;
end;
 
已经搞定了,非常感谢
来如风,yyzyw
 
已经搞定了,非常感谢
来如风,yyzyw
 
后退
顶部