请教~~(20分)

  • 主题发起人 主题发起人 千年飞鸟
  • 开始时间 开始时间

千年飞鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
想问问。。我设一个button键,对查询出来的数据进行修改,可能是我写的代码有问题,
一直不能正常运行,请高手指教,或者可否写写更简洁的代码。。我是新手中的新手,
请大家关照!!
table1.fieldbyname('班级').asstring:=edit11.Text;
table1.fieldbyname('学号').asstring:=edit12.Text;
table1.fieldbyname('出生年月').asstring:=edit13.Text;
table1.fieldbyname('祖籍').asstring:=edit14.Text;
table1.fieldbyname('专业').asstring:=edit15.Text;
table1.cachedupdates:=true;
table1.applyupdates;
table1.commitupdates;
table2.fieldbyname('课程名称').asstring:=edit16.Text;
table2.fieldbyname('课程学分').asstring:=edit17.Text;
table2.cachedupdates:=true;
table2.applyupdates;
table2.commitupdates;
abort;
 
Table是没有CacheUpdate的属性的,Query才有,至于事务的处理是这样的结构
try
database.Transration
...处理语句
database.commit
except
database.rollback
end;
 
这样吗!?不行啊~~能详细点吗?
try
database.Transration
table1.fieldbyname('班级').asstring:=edit11.Text;
table1.fieldbyname('学号').asstring:=edit12.Text;
table1.fieldbyname('出生年月').asstring:=edit13.Text;
table1.fieldbyname('祖籍').asstring:=edit14.Text;
table1.fieldbyname('专业').asstring:=edit15.Text;
table2.fieldbyname('课程名称').asstring:=edit16.Text;
table2.fieldbyname('课程学分').asstring:=edit17.Text;
database.commit
except
database.rollback
end;
end.
 
应该可以的
或者你可以用edit
post;

 
改成这样就行了
database.Transration
table1.edit;
table1.fieldbyname('班级').asstring:=edit11.Text;
table1.fieldbyname('学号').asstring:=edit12.Text;
table1.fieldbyname('出生年月').asstring:=edit13.Text;
table1.fieldbyname('祖籍').asstring:=edit14.Text;
table1.fieldbyname('专业').asstring:=edit15.Text;
table1.post
table2.edit
table2.fieldbyname('课程名称').asstring:=edit16.Text;
table2.fieldbyname('课程学分').asstring:=edit17.Text;
table2.post
database.commit
except
database.rollback
end;
end.
database.commit
except
database.rollback
end;
end.
 
//設置table1.cachedupdates:=true;
//設置table2.cachedupdates:=true;
table1.close;//要修改那個記錄自己找到那個記錄
table1.edit;
table1.fieldbyname('班级').Value:=edit11.Text;
table1.fieldbyname('学号').Value:=edit12.Text;
table1.fieldbyname('出生年月').Value:=edit13.Text;
table1.fieldbyname('祖籍').Value:=edit14.Text;
table1.fieldbyname('专业').Value:=edit15.Text;

table1.post;
table1.commitupdates;
table2.close;//要修改那個記錄自己找到那個記錄
table2.edit;
table2.fieldbyname('课程名称').Value:=edit16.Text;
table2.fieldbyname('课程学分').Value:=edit17.Text;
table2.post;
table2.commitupdates;
abort;
 
Table是有CacheUpdates的属性的,只是没有显示在属性编辑器里
建议你在TableOpen前就设cachedupdates:=true
在需要时再提交。
procedure TForm1.ApplyButtonClick(Sender: TObject);
begin
with CustomerQuery do
begin
Database1.StartTransaction;
try
ApplyUpdates; {try to write the updates to the database};
Database1.Commit; {on success, commit the changes};
except
Database1.Rollback; {on failure, undo the changes};
raise; {raise the exception to prevent a call to CommitUpdates!}
end;
CommitUpdates; {on success, clear the cache}
end;
end;
 
TO:chshanghai按你的方法,会出现这样的错误~~这是???
[Error] Unit1.pas(221): Undeclared identifier: 'database'
[Error] Unit1.pas(222): Missing operator or semicolon
[Error] Unit1.pas(229): Missing operator or semicolon
[Error] Unit1.pas(234): 'END' expected but 'EXCEPT' found
[Warning] Unit1.pas(238): Text after final 'END.' - ignored by compiler
[Fatal Error] Project1.dpr(5): Could not compile used unit '../Unit1.pas'
 
TO:stuwe你的方法我也试了!
能运行,,但在修改完成的时候会报错!!晕!
 
我剛才修改了一下
重新試一下
 
TO:stuwe。。报这样的错
project project1.exe raised exception class EDatabaseError with
message'table1:cannot perform this operation on a closed
dataset'.process stopped.use step or run to continue.

好箱POST这能用在DBedit里面的。。是吗?
 
在table.Edit;語句之前要先把table打開

如果table1.cachedupdates:=true;這樣設置的話,Post后就要table1.commitupdates;
才能保存

所出現的錯誤只是數據表沒有打開
你可以打開Table,把記錄移到要修改的記錄后才Edit;
這樣就不會有錯誤,也不會修改錯了數據;

 
//設置table1.cachedupdates:=true;
//設置table2.cachedupdates:=true;
//要修改那個記錄自己找到那個記錄
table1.edit;
table1.fieldbyname('班级').Value:=edit11.Text;
table1.fieldbyname('学号').Value:=edit12.Text;
table1.fieldbyname('出生年月').Value:=edit13.Text;
table1.fieldbyname('祖籍').Value:=edit14.Text;
table1.fieldbyname('专业').Value:=edit15.Text;

table1.post;
table1.commitupdates;
//要修改那個記錄自己找到那個記錄
table2.edit;
table2.fieldbyname('课程名称').Value:=edit16.Text;
table2.fieldbyname('课程学分').Value:=edit17.Text;
table2.post;
table2.commitupdates;
abort;


這樣應該可以,要是還不行的話,要實現什么就發我郵箱吧stuwe@163.com
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部