当前位置:主页>销售管理软件> 列表

我在写代码时候写不进去了,老是报错!!?各位近来帮我看下! 找家庭记账软件哪个好

销售管理软件版1楼: 我想把suistringgrid(sui控件grid)的数据写到数据库中,代码如下:
with datamodule1.tijiaoshuju1 do
begin
Close;
SQL.Clear;
SQL.Add(''select top 1 kkhcode,kkhname,zjm,idcard,callnum,dzdh,zipno,csrq,leijijf,sexid,isdj,beactive,''
+''fkrq,sxrq from cardcust'');
open;
append;
for i1:=1 to 50 do
begin
fieldbyname(''kkhcode'').AsString:=suistringgrid1.Cells[1,i1];
fieldbyname(''kkhname'').AsString:=suistringgrid1.Cells[2,i1];
fieldbyname(''zjm'').AsString:=suistringgrid1.Cells[3,i1];
fieldbyname(''idcard'').AsString:=suistringgrid1.Cells[4,i1];
fieldbyname(''callnum'').AsString:=suistringgrid1.Cells[5,i1];
fieldbyname(''dzdh'').AsString:=suistringgrid1.Cells[6,i1];
fieldbyname(''zipno'').AsString:=suistringgrid1.Cells[7,i1];
fieldbyname(''csrq'').AsString:=suistringgrid1.Cells[8,i1];

fieldbyname(''leijijf'').AsString:=suistringgrid1.Cells[9,i1];
fieldbyname(''sexid'').AsString:=suistringgrid1.Cells[10,i1];
fieldbyname(''isdj'').AsString:=suistringgrid1.Cells[11,i1];
fieldbyname(''beactive'').AsString:=suistringgrid1.Cells[12,i1];
fieldbyname(''fkrq'').AsString:=suistringgrid1.Cells[13,i1];
fieldbyname(''sxrq'').AsString:=suistringgrid1.Cells[14,i1];
end;
end;
with datamodule1.tijiaoshuju2 do
begin
close;
sql.Clear;
sql.Add(''select top 1 riqi,kkhcode,jifen,beizhu from jifensc'');
open;
append;
for i1:=1 to 50 do
begin
fieldbyname(''riqi'').AsString:=formatdatatime(''YYYY-MM-DD'',now());
fieldbyname(''kkhcode'').AsString:=suistringgrid1.Cells[1,i1];
fieldbyname(''jifen'').AsString:=suistringgrid1.Cells[9,i1];
fieldbyname(''beizhu'').AsString:=''添加卡片增加的积分'';
end;
end;
try
datamodule1.gong.BeginTrans;
datamodule1.tijiaoshuju1.UpdateBatch();
datamodule1. //当我写到这里时候写不进去了老是报错:Access violation at address 00B5574F in module ''DCC70.DLL'',write of address ABF36EEC
这是什么原因呀?我想这样写完:
try
ADOConnection1.BeginTrans;
ADOQuery1.UpdateBatch();
ADOConnection1.CommitTrans; //写到这里就不行了
except on E: Exception do
begin
ADOConnection1.RollbackTrans;
messagedlg(''保存失败:''+e.Message,mtError,[mbOK],0);
end;
end;
还有我的代码存储数据到数据库中是否合理??? 各位大哥帮我指点一下呀!

2楼: 这样看起来太乱了吧。
用Format多好。事例:
procedure TForm1.InsertTabCard;
const
cnSql=''insert into TabCard(a,b) values(''''%s'''',''''%s'''') '';
var ExeSql:string;
begin
ExeSql:=Format(cnSql,[''12345'',''张三'']);
try
adocon.BeginTrans;


with dm.adoQry do
begin
close;
sql.clear;
sql.add(ExeSql);
ExecSql;
end;
adocon.CommitTrans;
except
adocon.RollbackTrans;
end;
end; 如易友进销存软件

3楼: 可是我的例子是多行数据,不是一行啊,
能帮我的看下,尽量帮我的修改一下,然后贴出来好吗?
我毕竟是菜鸟呀 帮帮忙呀!

4楼: 事务:是指在过程中对数据库的多张表或字段进行修改操作时,中途出现异常只这成了一部分的数据操作,
则通过取消事务中止整个过程对数据的操作,并恢复原数据


ADOQuery1.Close ;
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.Text :=''select * from 寝室评分表'';
ADOQuery1.Open ;

ADOQuery1.Append ;
ADOQuery1.FieldByName(''寝室号'').AsString :=trim(Edit1.Text);
ADOQuery1.FieldByName(''评分'').AsInteger :=StrToInt(trim(Edit2.Text));
ADOQuery1.FieldByName(''第几周'').AsString :=trim(Edit4.Text );
ADOQuery1.FieldByName(''年分'').AsString :=trim(Edit3.Text );


ADOQuery1.FieldByName(''备注'').AsString :=Memo1.Text ;
ADOQuery1.Prepared ; //准备执行
try
DataModule2.ADOConnection1.BeginTrans; //事务提交
ADOQuery1.Post ; //执行
ADOQuery2.Post ;
Query.ExecSQL ;
DataModule2.ADOConnection1.CommitTrans ; //结束事务
MessageBox(handle,''学生信息录入成功!'',''提示'',MB_OK+MB_ICONINFORMATION);
except
DataModule2.ADOConnection1.RollbackTrans ; //提交失败,事务回滚
MessageBox(handle,''学生信息录入失败!'',''提示'',MB_OK+MB_ICONWARNING);
end;

你参照这个代码吧

5楼: to sun4268,
我要提交的数据是stringgrid是多行呀,不是单行数据提交?
能用post吗? 还有我想用循环提交多行数据合理吗?
能不能批量提交数据呀?

6楼: for i1:=1 to 50 do //Is OK
ExeSql:=Format(cnSql,[no,name]);
try
adocon.BeginTrans;
with dm.adoQry do
begin
close;
sql.clear;
sql.add(ExeSql);
ExecSql;
end;
adocon.CommitTrans;
except
adocon.RollbackTrans;
end;

销售管理软件版7楼: to skyjacker,
我明白你的意思了,但你这个还是一行一行的post,这样的话用你的方法或者存储过程都可以的,
可是我想用ADOQuery1.UpdateBatch()来批量添加数据,就象grid的数据批量添加一样,那样维护都很简单方便,这方面能实现吗/?

8楼: 我估计可能跟上面句有关:datamodule1.tijiaoshuju1.UpdateBatch();

9楼: 我估计有几种情况
1.你datamodule1.tijiaoshuju1.UpdateBatch();上面的代码有问题,导致这个情况发生
2.你的delphi的codeinsigh有问题,你可以重装
3.你可以试一下,直接把datamodule1.gong.CommitTrans;拷贝到那个地方,不一定非要敲进去

10楼: 首先谢谢楼上各位帮忙!
我的第一个问题:
1:我在stringgrid有50行记录,我现在把它提交到数据库中:
with adoquery1 do
close;
sql.clear;
sql.add(''select kkhcode,kkhname from cardcust'');
open;
for i:=0 to 50 do
begin
append;
fieldbyname(''kkhcode'').asstring:=stringgrid.cells[1,i];
fieldbyname(''kkhname'').asstring:=stringgrid.cells[2,i];
try
adoconnect1.begintrans;
post;
adoconnect1.committrans;
except
adoconnect1.rollbacktrans;
MessageBox(''保存数据失败'',''提示'',MB_OK+MB_ICONERROR);
break;
end;
end;
我用的思路正确吗?
第二:我觉得我这个方法太笨了,因为是一行一行提交,而且如果要写到几个表里的话,每个插入内容都要这么写,代码既长而且也不方便,有没有能用批量提交50行的数据?比如UpdateBatch(),可是针对我这个例子我不会用? 各位我是菜鸟,帮我解答详细点好吗?

11楼: 我顶!!!!

12楼: 你的第一个问题中的写法不太好,不停的开事务,很耗费资源的. 如家庭记账软件哪个好

13楼: 那怎么办?帮我修改以下啊!
我是菜鸟想不出更好的方法了,更不会批量提交数据!

销售管理软件版14楼: ADOQuery1.Close ;
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.Text :=''select * from 寝室评分表'';
ADOQuery1.Open ;
for i1:=1 to StringGrid1.RowCount-1 do
begin
ADOQuery1.Append ;
ADOQuery1.FieldByName(''寝室号'').AsString :=suistringgrid1.Cells[1,i1];
ADOQuery1.FieldByName(''评分'').AsInteger :=suistringgrid1.Cells[1,i1];
ADOQuery1.FieldByName(''第几周'').AsString :=suistringgrid1.Cells[1,i1];
ADOQuery1.FieldByName(''年分'').AsString :=suistringgrid1.Cells[1,i1];
ADOQuery1.FieldByName(''备注'').AsString :=suistringgrid1.Cells[1,i1];
ADOQuery1.Prepared ; //准备执行
end;
try
DataModule2.ADOConnection1.BeginTrans; //事务提交
ADOQuery1.Post ; //执行
Query.ExecSQL ;
DataModule2.ADOConnection1.CommitTrans ; //结束事务
MessageBox(handle,''学生信息录入成功!'',''提示'',MB_OK+MB_ICONINFORMATION);
except
DataModule2.ADOConnection1.RollbackTrans ; //提交失败,事务回滚
MessageBox(handle,''学生信息录入失败!'',''提示'',MB_OK+MB_ICONWARNING);
end;

15楼: to sun4268,
也就是只开一次事务对吧,这样也可以,还有没有其他的方法,能批量的提交数据了?
要是没有的话 明天就结帖!

16楼: 多人接受答案了。