DELPHI 三层 架构中问题 这个与你那个出错的数据表有关,EMP_ID字段的值有问题,超出了范围。你检查下那个表的这个字段的定义。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 今天 有DEDE 反编译了下得到 (当前系统Apserver) 的结构是这样的就写了如下几个事件 emp_id 是NUMBER 我换成BDE 连接后不存在提示EMP_ID 那问题了 好吧 可能是我表述的不清楚 重新整理如下: 最近学习下三层,先写了Server端,数据库用的是ORacle ,远程数据模块如下图;用了ADOConnection*1,AdoQuery*1 (命名OraQryData);AdoSproc*1(OraSpc), DataSetProvider*2(命名:oraQry,OraSproc);控件件若干,分别设定连接关系 如下图 ,中间没加任何代码,运行服务端; 然后写Client 端,用的是ClientDataset*2(命名为Qry1,Sproc), TScokConnetion*(SockCon1)1, SockCon1 设置边到Server 端的数据模块,其它属性设置为:Qry1.RemoteServer=SockCon1,qry1.DatasetProvide=oraQry;Sproc.remoteServer=SockCon1,Sproc.DataSetProvider=OraSproc Client 代码: Button1.clink; with qrydata do begin close; commandtext:='select * from sys_emp where rownum<500'; open; end;错误提示如下图 O (注:Emp_id 为Number 类型 ,如果我把Server 连接控件改成 BDE 控件(TDATABAS,Tssieon,TQuery)不加任何代码 查询不会报错)调用数据库存储过程的代码如下: procedure TForm1.BitBtn1Click(Sender: TObject);begin with sproc do begin Close; Params.Clear; DataRequest('SJ_CKRT_SN') ; FetchParams; ShowMessage(IntToStr(Params.Count));//参数个数是0 // Params.ParamByName('TREV').AsString:='SSSN'; // Execute; // ShowMessage(Params.ParamByName('TRes').AsString); end;end;运行结果显示的为0,就是得不到参数!!请各位高手帮指导下这个Delphi 三层结构下,怎么调用ORACLE 存储过程? 接上楼 我是做MES系统二次开发的,模式为D7+Oracle 三层;MES系统是Apserver+Client; 以上同样的代码连到MES系统的Apserver不会有任何问题 苦于没有源码,不知道他做了如何处理, 用DEDE 反编译下他的Apserver Exe其APERVER 远程数据模块如下图,处理代码写在DatasetProvider 的OnDataRequest 事件下看了些书上说的三层 ,书上介绍的就是几个控件的用法,其他均未提,此开贴望各们给点思路,介绍点学习资料 谢谢 楼上开发的是sajet的sfc系统吗,看到存储过程使用的sj开头啊,我公司用的也是这个,不过改了很多了 SAJET的系统是COM+的三层架构,我贴一个我之前写的APSERVERunit Unit2;{$WARN SYMBOL_PLATFORM OFF}interfaceuses Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr, DBClient, Apserver_TLB, StdVcl, Provider, DB, ADODB;type TApSqlConn = class(TRemoteDataModule, IApSqlConn) ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; DspQueryData: TDataSetProvider; procedure RemoteDataModuleCreate(Sender: TObject); procedure RemoteDataModuleDestroy(Sender: TObject); private { Private declarations } protected class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override; public { Public declarations } end;implementation{$R *.DFM}uses Unit1 ;class procedure TApSqlConn.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);begin if Register then begin inherited UpdateRegistry(Register, ClassID, ProgID); EnableSocketTransport(ClassID); EnableWebTransport(ClassID); end else begin DisableSocketTransport(ClassID); DisableWebTransport(ClassID); inherited UpdateRegistry(Register, ClassID, ProgID); end;end;procedure TApSqlConn.RemoteDataModuleCreate(Sender: TObject);begin Form1.UpdateClientCount(1);end;procedure TApSqlConn.RemoteDataModuleDestroy(Sender: TObject);begin Form1.UpdateClientCount(-1);end;initialization TComponentFactory.Create(ComServer, TApSqlConn, Class_ApSqlConn, ciMultiInstance, tmApartment);end. 如何得到 vfp应用程序form上的文本框中的内容 谁能给我一个Dehpi7下面比较好的发邮件的方法 急问一个简单的屏幕取点颜色问题 filter问题,怎么出现的还是全部记录 从流中提取jpg文件 谁有GraphicEX控件文件? 菜鸟级的问题啊,关于try...except的[30分] 【紧急求救】操作文件替换字符串 服务器数据同步? 一个多文档的应用程序的主窗口的图片问题! delphi,oracle,模糊查询 100分 求 win8下postmessage的解决方法
最近学习下三层,先写了Server端,数据库用的是ORacle ,远程数据模块如下图;用了ADOConnection*1,AdoQuery*1 (命名OraQryData);AdoSproc*1(OraSpc), DataSetProvider*2(命名:oraQry,OraSproc);控件件若干,分别设定连接关系 如下图 ,中间没加任何代码,运行服务端;
然后写Client 端,用的是ClientDataset*2(命名为Qry1,Sproc), TScokConnetion*(SockCon1)1, SockCon1 设置边到Server 端的数据模块,其它属性设置为:Qry1.RemoteServer=SockCon1,qry1.DatasetProvide=oraQry;Sproc.remoteServer=SockCon1,Sproc.DataSetProvider=OraSproc
Client 代码:
Button1.clink;
with qrydata do
begin
close;
commandtext:='select * from sys_emp where rownum<500';
open;
end;
错误提示如下图
O
(注:Emp_id 为Number 类型 ,如果我把Server 连接控件改成 BDE 控件(TDATABAS,Tssieon,TQuery)不加任何代码 查询不会报错)调用数据库存储过程的代码如下:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
with sproc do
begin
Close;
Params.Clear;
DataRequest('SJ_CKRT_SN') ;
FetchParams;
ShowMessage(IntToStr(Params.Count));//参数个数是0
// Params.ParamByName('TREV').AsString:='SSSN';
// Execute;
// ShowMessage(Params.ParamByName('TRes').AsString); end;
end;
运行结果显示的为0,就是得不到参数!!请各位高手帮指导下这个Delphi 三层结构下,怎么调用ORACLE 存储过程?
我是做MES系统二次开发的,模式为D7+Oracle 三层;MES系统是Apserver+Client; 以上同样的代码连到MES系统的Apserver不会有任何问题 苦于没有源码,不知道他做了如何处理, 用DEDE 反编译下他的Apserver Exe
其APERVER 远程数据模块如下图,处理代码写在DatasetProvider 的OnDataRequest 事件下看了些书上说的三层 ,书上介绍的就是几个控件的用法,其他均未提,此开贴望各们给点思路,介绍点学习资料 谢谢
SAJET的系统是COM+的三层架构,我贴一个我之前写的APSERVER
unit Unit2;{$WARN SYMBOL_PLATFORM OFF}interfaceuses
Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
DBClient, Apserver_TLB, StdVcl, Provider, DB, ADODB;type
TApSqlConn = class(TRemoteDataModule, IApSqlConn)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DspQueryData: TDataSetProvider;
procedure RemoteDataModuleCreate(Sender: TObject);
procedure RemoteDataModuleDestroy(Sender: TObject);
private
{ Private declarations }
protected
class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
public
{ Public declarations }
end;implementation{$R *.DFM}
uses Unit1 ;class procedure TApSqlConn.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
begin
if Register then
begin
inherited UpdateRegistry(Register, ClassID, ProgID);
EnableSocketTransport(ClassID);
EnableWebTransport(ClassID);
end else
begin
DisableSocketTransport(ClassID);
DisableWebTransport(ClassID);
inherited UpdateRegistry(Register, ClassID, ProgID);
end;
end;procedure TApSqlConn.RemoteDataModuleCreate(Sender: TObject);
begin
Form1.UpdateClientCount(1);
end;procedure TApSqlConn.RemoteDataModuleDestroy(Sender: TObject);
begin
Form1.UpdateClientCount(-1);
end;initialization
TComponentFactory.Create(ComServer, TApSqlConn,
Class_ApSqlConn, ciMultiInstance, tmApartment);
end.