导航:
论坛 -> 数据库专区
斑竹:liumazi,waterstone
作者:
2018/4/1 11:03:00
标题:
刚学三层,遇到问题,求大神们指教!
浏览:2219
加入我的收藏
楼主:
服务端代码 function TServerMethods1.ChangeSql(Value: string): Integer; begin fdqry1.Active:=False; fdqry1.SQL.Text:=Value; fdqry1.Active:=True; Result:=fdqry1.RecordCount; end; procedure TServerMethods1.DSServerModuleCreate(Sender: TObject); begin con1.Open; end; function TServerMethods1.EchoString(Value: string): string; begin Result := Value; end; function TServerMethods1.ReverseString(Value: string): string; begin Result := System.StrUtils.ReverseString(Value); end; 在客户端调用changesql时,sql字符串如果是查询就没问题,但如果插入一行数据就会出现 异常类名称:TDBXError 异常信息:Remote error: [FireDAC][Phys][MSSQL]-308. Cannot open / define command, which does not return result sets. Hint: use Execute / ExecSQL method for non-SELECT commands 客户端调用代码: procedure TForm1.btn2Click(Sender: TObject); var dm:TServerMethods1Client; //就是上一步自动生成的unit3里的那个映射类 SqlText,人员编号,就诊日期,诊断结果,处方,费用,是否结清:string; begin // 别忘了uses Unit3, Unit2; try try //创建应用服务器上的方法在客户端的实现类: 即映射方法类 dm:=TServerMethods1Client.Create(DataModule2.con1.DBXConnection); //执行服务器上的方法 人员编号:='00000008'; 就诊日期:='2018-09-17'; 诊断结果:='咳嗽'; 处方:='中药'; 费用:='240.00'; 是否结清:='未结清'; SqlText:='INSERT INTO 治疗情况表 (人员编号,就诊日期,诊断结果,处方,费用,是否结清) VALUES (' + QuotedStr(人员编号) + ',' + QuotedStr(就诊日期) + ',' + QuotedStr(诊断结果) + ',' + QuotedStr(处方) + ',' + QuotedStr(费用) + ',' + QuotedStr(是否结清) + ')'; dm.ChangeSql(SqlText); // 我们在服务器程序中手工添加的执行sql方法 except on E: Exception do mmo1.Lines.Add('异常类名称:' + E.ClassName + #13#10 + '异常信息:' + E.Message); end; finally dm.Free; end; DataModule2.ds1.Close; DataModule2.ds1.Open; //开启客户端数据集 end; 这个执行完之后,数据库里的数据是增加了,但是却出现这个错误,请大神指教,谢谢~~如果需要源码,请联系QQ1817203915,在线等~
----------------------------------------------
作者:
2018/4/1 12:04:43
1楼:
异常信息:Remote error: [FireDAC][Phys][MSSQL]-308. Cannot open / define command, which does not return result sets. Hint: use Execute / ExecSQL method for non-SELECT commands 异常信息已经说的很明白了,insert不能用Active,用Execute/ExecSQL方法。 你要么分开SELECT与INSERT/DELETE/UPDATE为两个方法,要么在执行时判断是SELECT还是INSERT/UPDATE/DELETE.
----------------------------------------------
-
作者:
2018/4/1 12:38:39
2楼:
之前我也用了execute和execsql试过,但可能是因为不会用。。。。 function TServerMethods1.GetData(Value: string): Integer; begin fdqry1.Active:=False; fdqry1.SQL.Text:=Value; fdqry1.Active:=True; Result:=fdqry1.RecordCount; end; function TServerMethods1.ChangeData(Value: string): Integer; begin fdqry1.SQL.Text:=Value; fdqry1.ExecSQL; Result:=fdqry1.RecordCount; end; 我在服务端修改了以上代码,但是依然是那个错误,调用: procedure TForm1.btn2Click(Sender: TObject); var dm:TServerMethods1Client; //就是上一步自动生成的unit3里的那个映射类 SqlText,人员编号,就诊日期,诊断结果,处方,费用,是否结清:string; begin // 别忘了uses Unit3, Unit2; try try //创建应用服务器上的方法在客户端的实现类: 即映射方法类 dm:=TServerMethods1Client.Create(DataModule2.con1.DBXConnection); //执行服务器上的方法 //ShowMessage(dm.ReverseString(edtIP.Text)); //系统带的例子方法 人员编号:='00000008'; 就诊日期:='2018-09-17'; 诊断结果:='咳嗽'; 处方:='中药'; 费用:='240.00'; 是否结清:='未结清'; SqlText:='INSERT INTO 治疗情况表 (人员编号,就诊日期,诊断结果,处方,费用,是否结清) VALUES (' + QuotedStr(人员编号) + ',' + QuotedStr(就诊日期) + ',' + QuotedStr(诊断结果) + ',' + QuotedStr(处方) + ',' + QuotedStr(费用) + ',' + QuotedStr(是否结清) + ')'; dm.ChangeData(SqlText); // 我们在服务器程序中手工添加的执行sql方法 except on E: Exception do mmo1.Lines.Add('异常类名称:' + E.ClassName + #13#10 + '异常信息:' + E.Message); end; finally dm.Free; end; DataModule2.ds1.Close; DataModule2.ds1.Open; //开启客户端数据集 end;
----------------------------------------------
作者:
2018/4/1 12:59:04
3楼:
function TServerMethods1.ChangeData(Value: string): Integer; begin if fdqry1.Active then fdqry1.Close; fdqry1.SQL.Text:=Value; fdqry1.ExecSQL; end; INSERT不可能取到RecordCount的。非要取到RecordCount的,只有重新打开。
----------------------------------------------
-
作者:
2018/4/1 13:09:10
4楼:
无语了,还是那个错误,能不能请楼上帮我看看?我QQ1817203915,拜托了,卡住2天了
----------------------------------------------
作者:
2018/4/1 13:16:01
5楼:
找到原因了,谢谢idealstudio (ideal)解决了问题~~
----------------------------------------------
作者:
2018/4/1 17:55:20
6楼:
找到原因了,保密局的。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/4/1 19:20:20
7楼:
wang_80919批评得对。只向别人索取,吝啬施与和回报人的可悲。
----------------------------------------------
-
作者:
2018/4/13 9:46:15
8楼:
晕了,我在5楼指出是idealstudio (ideal)解决了问题,你们不能看看3楼的代码吗?
----------------------------------------------