我把原来两层的架构改成三层的服务端使用
ADOConnection1+ADOQuery1+DataSetProvider1客户端是用
SocketConnection1+ClientDataSet1 但现在我遇到一个问题,我在原来两层里面用了一个ADOStoredProc1来调用存储过程(用的是Oracle数据库)但现在在三层架构里如何用这个控件来连中间层呢?小弟弟在线等待,麻烦大哥们帮帮忙谢谢
ADOConnection1+ADOQuery1+DataSetProvider1客户端是用
SocketConnection1+ClientDataSet1 但现在我遇到一个问题,我在原来两层里面用了一个ADOStoredProc1来调用存储过程(用的是Oracle数据库)但现在在三层架构里如何用这个控件来连中间层呢?小弟弟在线等待,麻烦大哥们帮帮忙谢谢
解决方案 »
- 这种效果是如何出现的?桌面禁用只允许操作弹出窗
- 证券软件适时数据发送和接收原理是怎样的?
- 不调CoUninitialize会否有问题?
- windows.pas里面包含的函数是不是未经封装的window api?
- ocx控件可以反编译吗?用dede?怎么做啊?
- MDI主窗口中打开一个MDI子窗口时怎么把以前打开的MDI子窗口关闭
- 讨论学习Delphi,进者有分
- 如何重画DBGrid的单元格??
- WriteBinaryData(string,buffer,buffersize)这个buffer做何解释?怎么传递这个参数?
- TreeView好难
- 帮我看看我这个socket通讯程序有什么错误~
- 大家都来支持Delphi吧
那用ADOStoredProc1如何连接中间层呀,我看了里面没有连接SocketConnection1的选项呀
麻烦你能不能说得明白些如何关联,万分感谢
{自動產生“固定資產編號”過程執行后返回編號﹒}
procedure TFAUpdateData.dspAutoNumberAfterExecute(Sender: TObject;
var OwnerData: OleVariant);
begin
if spAutoNumber.Parameters.ParamByName('@RETURN_VALUE').Value = 0 then
OwnerData := spAutoNumber.Parameters.ParamByName('@AssetsNumber').Value
else
OwnerData := 'Invalidity';
end;{產生“固定資產編號“}
procedure TFAUpdateData.dspAutoNumberBeforeExecute(Sender: TObject;
var OwnerData: OleVariant);
begin
if not ((VarIsEmpty(OwnerData)) or (VarIsNull(OwnerData))) then
with spAutoNumber.Parameters do
begin
ParamByName('@City').Value := OwnerData[0];
ParamByName('@Value').Value := OwnerData[1];
ParamByName('@Corp').Value := OwnerData[2];
end else
with spAutoNumber.Parameters do
begin
ParamByName('@City').Value := '';
ParamByName('@Value').Value := -1;
ParamByName('@Corp').Value := '';
end;end;{Procedure TFAUpdateData.dspAddModeAfterExecute Return a Value.所有
返回值為@RETURN_VALUE都調用這個過程﹒}
procedure TFAUpdateData.dspAddModeAfterExecute(Sender: TObject;
var OwnerData: OleVariant);
var spDataSet : TDataSet;
begin
spDataSet := TDataSetProvider(Sender).DataSet; {得到過程執行時的數据集}
OwnerData := TADOStoredProc(spDataSet).Parameters.ParamByName('@RETURN_VALUE').Value;
end;
//AutoNoParam : OleVariant;{自動產生編號的參數}
procedure TEditForm.sbtnAssetsNoClick(Sender: TObject);
begin
with FADM do
try
try
AutoNoParam := VarArrayCreate([0,2],varVariant);//設置輸入參數
cdsAutoNumber.Params.Clear;
AutoNoParam[0] := cdsFAClone.FieldValues['City'];
AutoNoParam[1] := cdsFAClone.FieldValues['AccountMoney'];
AutoNoParam[2] := cdsFAClone.FieldValues['CorpName'];
cdsAutoNumber.Execute;
cdsFAClone.FieldValues['AssetsNo'] := sAssetsNo; //執行後事件將返回的“固定資產編號”賦值給sAssetsNO,這裡將sAssetsNo編號賦值給一個編輯固定資產的ClientDataSet
except
ShowMessage('未能正确產生編號,請檢查入帳金額﹑所在城市﹑所屬公司等輸入是否正确﹗');
end;
finally
VarClear(AutoNoParam);
end;end;
//cdsAutoNumber執行後事件代碼:
{自動產生資產號后,取得產生的資產號}
procedure TFADM.cdsAutoNumberAfterExecute(Sender: TObject;
var OwnerData: OleVariant);
begin
if not ((VarIsEmpty(OwnerData)) or (VarIsNull(OwnerData))) then
sAssetsNo := OwnerData;
end;
我用了你的方法还是不行呀我在网上看了一个例子是直接用ClientDataSet1来调用的代码如下
form2.ClientDataSet3.Close;
form2.ClientDataSet3.params.clear ;
form2.ClientDataSet3.Params.CreateParam(ftString,'ParamName1',ptInput) ;
form2.ClientDataSet3.Params.CreateParam(ftString,'ParamName2',ptInput) ;
form2.ClientDataSet3.Params.CreateParam(ftBCD,'ParamName3',ptOutput) ;
form2.ClientDataSet3.CommandText:='{call SP_LOGIN(?,?)}'; //这里是调用用户登录的存储过程 把用户名和密码传进去如果通过就返回0否则返回-1
form2.ClientDataSet3.Params.ParamByName('ParamName1').Value:='102704';
form2.ClientDataSet3.Params.ParamByName('ParamName2').Value:='060105';
form2.ClientDataSet3.open ;
但运行到form2.ClientDataSet3.Params.ParamByName('ParamName1').Value:='102704'; 这句的时候报以下错误这是为何?麻烦帮看看万分感谢
ClientDataSet3:Paramete 'ParamName1' not found
我用了你的方法还是不行呀
客戶端執行前需傳遞參數。
procedure TFADM.cdsAutoNumberBeforeExecute(Sender: TObject;
var OwnerData: OleVariant);
begin
OwnerData := AutoNoParam;
end;