W
wpr321
Unregistered / Unconfirmed
GUEST, unregistred user!
服务器端定义了一个函数
procedure TRdmServer.ExecSqla(const insql: WideString;
out ErrorCode,
ErrorMsg: WideString);
var
qry: TQuery;
begin
try
qry := TQuery.Create(nil);
qry.SessionName := Session1.SessionName;
qry.DatabaseName := 'dbtest';
try //使用和不使用try...except...end,在客户端的效果不同?
qry.Close;
qry.SQL.Text := insql;
qry.execsql;
except
on e: exceptiondo
begin
ErrorCode := INTTOSTR(Error);
ErrorMsg := e.Message;
end;
end;
finally
qry.Free;
end;
end;
客户端,执行
DataModule1.SocketConnection1.AppServer.starttrans(ErrorCode, ErrorMsg);
try
DataModule1.SocketConnection1.AppServer.ExecSqla('insert into aaaa(AAA,BB) VALUES(''' + Edit3.Text + ''',''' + Edit4.Text + ''')',ErrorCode, ErrorMsg);
DataModule1.SocketConnection1.AppServer.ExecSqla('insert into aaaa(AAA,gfdBB) VALUES(''' + Edit3.Text + ''',''' + Edit4.Text + ''')',ErrorCode, ErrorMsg);
//这句是故意写错SQL的,会出错的。
DataModule1.SocketConnection1.AppServer.commit(ErrorCode, ErrorMsg)
except
DataModule1.SocketConnection1.AppServer.rolback(ErrorCode, ErrorMsg)
end;
问题是这样的:
当服务器端函数不使用try...except...end时,客户端的第二句SQL执行时会出错(正常,是故意写错的),事务可以回滚,第一句SQL
执行的数据没保存,但是有一个问题就是,服务器端有出错提示。
为了使服务器端不出现提示,服务器端函数使用try...except...end,这样服务器端就没有出错提示,但是事务没有回滚,第一句SQL
执行的数据已经保存。
1,请问有人可以帮忙解决一下吗?既能使出错时事务回滚,也能时服务器端不出现出错提示。
2,还有一个就是如何返回错误信息,就像我现在客户端执行的那个代码,用到了好几个服务器端的函数,不可能没个函数都判断他的返回值,
这样很麻烦,有什么好的方法能一次返回服务器端的错误?
3,我的服务器端,使用了一个DATABASE(DATABASENAME=dbtest),一个SESSION(属性为AUTOSESSION=TRUE),一个QUERY,
问题是这样的,上面服务器定义的函数ExecSqla中动态创建QUERY,执行qry := TQuery.Create(nil);
qry.SessionName := Session1.SessionName;
qry.DatabaseName := 'dbtest';没问题,可以通过。但是对于事先放到放在RDMDM上面的QUERY(QUERY1)执行相同的SQL:QUERY1 := TQuery.Create(nil);
QUERY1.SessionName := Session1.SessionName;
QUERY1.DatabaseName := 'dbtest';他就提示说UNKNOW DATABASENAME 'dbtest'。请问是什么原因呢?
4,使用AUTOSESSION=TRUE,是不是对应用服务器的要求很高,我使用的是SOCKET?
procedure TRdmServer.ExecSqla(const insql: WideString;
out ErrorCode,
ErrorMsg: WideString);
var
qry: TQuery;
begin
try
qry := TQuery.Create(nil);
qry.SessionName := Session1.SessionName;
qry.DatabaseName := 'dbtest';
try //使用和不使用try...except...end,在客户端的效果不同?
qry.Close;
qry.SQL.Text := insql;
qry.execsql;
except
on e: exceptiondo
begin
ErrorCode := INTTOSTR(Error);
ErrorMsg := e.Message;
end;
end;
finally
qry.Free;
end;
end;
客户端,执行
DataModule1.SocketConnection1.AppServer.starttrans(ErrorCode, ErrorMsg);
try
DataModule1.SocketConnection1.AppServer.ExecSqla('insert into aaaa(AAA,BB) VALUES(''' + Edit3.Text + ''',''' + Edit4.Text + ''')',ErrorCode, ErrorMsg);
DataModule1.SocketConnection1.AppServer.ExecSqla('insert into aaaa(AAA,gfdBB) VALUES(''' + Edit3.Text + ''',''' + Edit4.Text + ''')',ErrorCode, ErrorMsg);
//这句是故意写错SQL的,会出错的。
DataModule1.SocketConnection1.AppServer.commit(ErrorCode, ErrorMsg)
except
DataModule1.SocketConnection1.AppServer.rolback(ErrorCode, ErrorMsg)
end;
问题是这样的:
当服务器端函数不使用try...except...end时,客户端的第二句SQL执行时会出错(正常,是故意写错的),事务可以回滚,第一句SQL
执行的数据没保存,但是有一个问题就是,服务器端有出错提示。
为了使服务器端不出现提示,服务器端函数使用try...except...end,这样服务器端就没有出错提示,但是事务没有回滚,第一句SQL
执行的数据已经保存。
1,请问有人可以帮忙解决一下吗?既能使出错时事务回滚,也能时服务器端不出现出错提示。
2,还有一个就是如何返回错误信息,就像我现在客户端执行的那个代码,用到了好几个服务器端的函数,不可能没个函数都判断他的返回值,
这样很麻烦,有什么好的方法能一次返回服务器端的错误?
3,我的服务器端,使用了一个DATABASE(DATABASENAME=dbtest),一个SESSION(属性为AUTOSESSION=TRUE),一个QUERY,
问题是这样的,上面服务器定义的函数ExecSqla中动态创建QUERY,执行qry := TQuery.Create(nil);
qry.SessionName := Session1.SessionName;
qry.DatabaseName := 'dbtest';没问题,可以通过。但是对于事先放到放在RDMDM上面的QUERY(QUERY1)执行相同的SQL:QUERY1 := TQuery.Create(nil);
QUERY1.SessionName := Session1.SessionName;
QUERY1.DatabaseName := 'dbtest';他就提示说UNKNOW DATABASENAME 'dbtest'。请问是什么原因呢?
4,使用AUTOSESSION=TRUE,是不是对应用服务器的要求很高,我使用的是SOCKET?