急,急,哪个富翁给我看看下列代码。 (20分)

  • 主题发起人 主题发起人 kent100
  • 开始时间 开始时间
K

kent100

Unregistered / Unconfirmed
GUEST, unregistred user!
var
i:Integer;
s:String;
begin
s:='';
for i := 0 to ListBox1.Items.Count - 1 do
begin
//取选中的项:用Selected属性
if ListBox1.Selected then
s:=s+ListBox1.Items;
end;
if s<> '' then
begin
with table1 do
if table1.Locate('jbdw',s,[]) then
begin
delete;
end;
end
else
showmessage('请选择列表中的一项');
end;

=====================
第一个问题
上述代码无任何问题,但我想在数据库删除数据的同时,把LISTBOX1中选中的ITEMS也删除。
listbox1.Items.Delete(i);
break
上面两句不知道放在哪里好呢?
请大家帮个忙,急。。。。。

+++++++++++++++++++++++++
第二个问题。
还有下面是修改LISTBOX的代码
和数据库关联的,
修改第一次能通过,再修改一次出错,不知道是何问题。

procedure TForm3.Button1Click(Sender: TObject);
var
i:Integer;
begin
for i := 0 to form1.ListBox1.Items.Count - 1 do
begin
//取选中的项:用Selected属性
if form1.ListBox1.Selected then
begin
form1.listbox1.Items.Delete(i);
form1.listbox1.items.add(edit2.text);
end;
end;

table1.open;
table1.edit;
table1.fieldbyname('jldm').asstring:=edit1.text;
table1.FieldByName('jbdw').asstring:=edit2.text;
table1.fieldbyname('jlmc').asstring:=edit3.text;
table1.fieldbyname('ywxs').asstring:=edit4.text;
table1.fieldbyname('hsbl').asinteger:=strtoint(edit5.text);
table1.post;
table1.close;
showmessage('修改数据成功');
form3.close;
end;
 
应该用 for i := form1.ListBox1.Items.Count - 1 downto 0 do
第一个问题也应该用上面的语句,删除语句就写在循环中。
 
//在数据库删除数据的同时,把LISTBOX1中选中的ITEMS也删除。
就写在第一个循环里面,不过第一个循环要改一下:
s := '';
i := 0;
// for i := 0 to ListBox1.Items.Count - 1 do
while i <= ListBox1.Items.Count - 1 do
begin
//取选中的项:用Selected属性
if ListBox1.Selected then
begin
s := s + ListBox1.Items;
ListBox1.Items.Delete(i);
end
else
inc(i);
end;

对于第二个问题,建议用动态生成 SQL 语句的方法解决。
 
liuxi,
删除语句写在哪个循环里,能说清楚一点吗/
beta
谢谢你的解答,不过我还要找到数据库中的那一项把他删除呀。
如果直接删除LISTBOX中一项是很容易的。
 
to kent100: 同样也可以用动态生成 SQL 语句的方法解决啊
将 s 改为 TStringList 类型,用两个循环:
var
s: TStringList;
SQLStr: string;
i: Integer;
begin
s := TStringList.Create;
try
i := 0;
// for i := 0 to ListBox1.Items.Count - 1 do
while i <= ListBox1.Items.Count - 1 do
begin
//取选中的项:用Selected属性
if ListBox1.Selected then
begin
s.Add(ListBox1.Items);
ListBox1.Items.Delete(i);
end
else
inc(i);
end;
SQLStr := 'delete from 表名 where';
for i := 0 to s.Count - 1 do //动态生成 SQL 语句
begin
SQLStr := SQLStr + ' 某字段名=''' + s + '' or'
end;
Delete(SQLStr, Length(SQLStr) - 2, 3); //清除最后多余的一个 ' or'
//执行删除:
ADOCommand1.CommandString := SQLStr;
ADOCommand1.Execute;
finally
s.Free;
end;
end;
 
for i := ListBox1.Items.Count - 1 downto 0 do
begin
if ListBox1.Selected then
begin
s:=s+ListBox1.Items;
listbox1.Items.Delete(i);
//其实完全可以把数据库操作放到这里来
break;
end;
end;
 
to liuxi: 你这样每循环一次,就到数据库中删除一个,会降低效率吧?:-)
 
非常感谢liuxi和beta
删除的问题已解决,但修改还有点问题,
请两位大哥好事做到底,我一定另开帖子给两位加分,谢谢了。
是这样的以下这段代码不知道哪里出错,运行第一次时无错,第二次修改时就出错。
以下代码的意思是说,当我选择LISTBOX中的某项时,我把选中的那项给删除掉,然后把
edit2.text的值做为一个listbox的某项。
然后其他的有修改部分写回数据库,能否在我的代码上找出毛病并修改呢?
拜托各位了,要分的尽管说,我会兑现的。
procedure TForm3.Button1Click(Sender: TObject);
var
i:Integer;
begin
for i := form1.ListBox1.Items.Count - 1 downto 0 do

begin
//取选中的项:用Selected属性
if form1.ListBox1.Selected then
begin
form1.listbox1.Items.Delete(i);
form1.listbox1.items.add(edit2.text);
end;
end;

table1.open;
table1.edit;
table1.fieldbyname('jldm').asstring:=edit1.text;
table1.FieldByName('jbdw').asstring:=edit2.text;
table1.fieldbyname('jlmc').asstring:=edit3.text;
table1.fieldbyname('ywxs').asstring:=edit4.text;
table1.fieldbyname('hsbl').asinteger:=strtoint(edit5.text);
table1.post;
table1.close;
showmessage('修改数据成功');
form3.close;
end;

end.
 
to beta
如果讲效率的话,我同意你的看法,我只是更正他程序中的错误:-)

to kent100
form1.listbox1.Items.Count的值总在变,你的循环应该改一下。
你Delete一次Count就减1,Add一次Count就加1。
怎么改就不用我说了吧?
 
程序我改了一下,发现不能写数据到库里去了,各位帮忙看看。
edit.text的值写不进数据库了,郁闷中。。。。我是菜鸟

procedure TForm3.Button1Click(Sender: TObject);
var
i:Integer;
begin
with table1 do
begin
if table1.Locate('jbdw',edit2.text,[]) then
begin
table1.open;
table1.edit;
table1.fieldbyname('jldm').asstring:=edit1.text;
table1.FieldByName('jbdw').asstring:=edit2.text;
table1.fieldbyname('jlmc').asstring:=edit3.text;
table1.fieldbyname('ywxs').asstring:=edit4.text;
table1.fieldbyname('hsbl').asinteger:=strtoint(edit5.text);
table1.post;
table1.close;
end;
end;
for i := form1.ListBox1.Items.Count - 1 downto 0 do
begin
//取选中的项:用Selected属性
if form1.ListBox1.Selected then
begin
form1.ListBox1.Items := edit2.text;
end;
end;
showmessage('修改数据成功');
form1.table1.refresh;
end;
 
你已经with table1 do了,你下面还table1.个什么呀?
 
搞半天我前面都白将了?你这样的循环是不行的,在这种情况下,不要用 for 循环

to liuxi: 这不会导致问题

不过我现在到是搞不清楚他到底想要干什么了:-)
 
问题已经解决了,谢谢两位,给分。
 
多人接受答案了。
 
to beta
我知道不会有问题,但这种写法不是一个好的习惯。
 

Similar threads

I
回复
0
查看
705
import
I
I
回复
0
查看
756
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部