H
hjandy
Unregistered / Unconfirmed
GUEST, unregistred user!
(1) 120分 在MTS中建一客户端通用查询,比如从ClientDataSet中提取自订栏位并输入
相关资料查询相关资料
(2) 280分 建三层架构(MTS),请提供例子可EMail -> hjandy@21cn.com
注: A 我的客户端和服务器都是Windows 2000,数据库用MsSQL 2000
B.若认为分数太小请提出
-------------------- 以下资料仅供参考 ----------------------------
1.可参考李维 关于<<Delphi 5.x Ado/Mts/Com+>> 一书第九章
方法一、建MTS步紧
A.建Active Library 加 MTS/Com+数据模块并加入相关控件
B.建查询对象
C.建更新对象
---------------------------- 待处理问题 ----------------------
步骤如下:
1.在上述A中若使用AdoQuery向MsSQL 2000连接的表存在主键并自动加一
比如 表名为 User 栏位如下
Fields Date Type Length identity identity Seed identity inc
=========== ========== ======= ======== ============= ============
Auto_id Int 4 Yes 1 1
Employee_id Char 8
....
2.在 Fields Editor .. 中加入所有Fields并将DisplayLabel改成相应中文名称
3.设置TDataSetPrivider
4.在客户端用上述B调入相关资料(Select Auto_id, Employee_id, ... From user)
出现问题
问题(1):在客户端栏位 Auto_id 资料为仅读(Read Only)<-- 请问有什么办法可解决?
因若加入多笔记录会出错
己用方法:关闭 Auto_id 的 identity 为No, 在BeforeUpdateRecord中加入修改
处理没问题但总感觉不方便!
原因:1. 客户端 Auto_id 要入数值
2. 因在上述A中 Auto_id 的ProviderFlags设置pfinKey
问题(2):在上述A中若用AdoQuery并设置
Select top 900 Auto_id, Employee_id ... From User
Where Auto_id > :id Order By Auto_id
那必须在存贮前先取回资料参数值 Auto_id 否则无法存贮,
请问有没有更好的办法
比如 (注: 下述 SetKey 相应 :id 值)
procedure TMtsCustomer.UpdateDatas(vDatas: OleVariant;
iMaxErrors: Integer;
var iErrorCount: Integer;
SetKey: OleVariant);
begin
if not ((VarIsEmpty(SetKey)) or (VarIsNull(SetKey))) then
begin
AdoQuery.Parameters.ParamByName('id').Value := SetKey;
try
DataSetProvider.ApplyUpdates(vDatas, iMaxErrors, iErrorCount);
if (iErrorCount <= iMaxError) or (iErrorCount = -1) then
SetAbort
else
SetComplete;
except
SetAbort;
end;
end;
// else
...
end;
问题(3): 在上述C中若出现更新错误,怎样把出错记录结果传回并在客户端显示呢?
注:因本人需将Midas转为MTS,上述为主要关键部份! 烦请多多指教!!
相关资料查询相关资料
(2) 280分 建三层架构(MTS),请提供例子可EMail -> hjandy@21cn.com
注: A 我的客户端和服务器都是Windows 2000,数据库用MsSQL 2000
B.若认为分数太小请提出
-------------------- 以下资料仅供参考 ----------------------------
1.可参考李维 关于<<Delphi 5.x Ado/Mts/Com+>> 一书第九章
方法一、建MTS步紧
A.建Active Library 加 MTS/Com+数据模块并加入相关控件
B.建查询对象
C.建更新对象
---------------------------- 待处理问题 ----------------------
步骤如下:
1.在上述A中若使用AdoQuery向MsSQL 2000连接的表存在主键并自动加一
比如 表名为 User 栏位如下
Fields Date Type Length identity identity Seed identity inc
=========== ========== ======= ======== ============= ============
Auto_id Int 4 Yes 1 1
Employee_id Char 8
....
2.在 Fields Editor .. 中加入所有Fields并将DisplayLabel改成相应中文名称
3.设置TDataSetPrivider
4.在客户端用上述B调入相关资料(Select Auto_id, Employee_id, ... From user)
出现问题
问题(1):在客户端栏位 Auto_id 资料为仅读(Read Only)<-- 请问有什么办法可解决?
因若加入多笔记录会出错
己用方法:关闭 Auto_id 的 identity 为No, 在BeforeUpdateRecord中加入修改
处理没问题但总感觉不方便!
原因:1. 客户端 Auto_id 要入数值
2. 因在上述A中 Auto_id 的ProviderFlags设置pfinKey
问题(2):在上述A中若用AdoQuery并设置
Select top 900 Auto_id, Employee_id ... From User
Where Auto_id > :id Order By Auto_id
那必须在存贮前先取回资料参数值 Auto_id 否则无法存贮,
请问有没有更好的办法
比如 (注: 下述 SetKey 相应 :id 值)
procedure TMtsCustomer.UpdateDatas(vDatas: OleVariant;
iMaxErrors: Integer;
var iErrorCount: Integer;
SetKey: OleVariant);
begin
if not ((VarIsEmpty(SetKey)) or (VarIsNull(SetKey))) then
begin
AdoQuery.Parameters.ParamByName('id').Value := SetKey;
try
DataSetProvider.ApplyUpdates(vDatas, iMaxErrors, iErrorCount);
if (iErrorCount <= iMaxError) or (iErrorCount = -1) then
SetAbort
else
SetComplete;
except
SetAbort;
end;
end;
// else
...
end;
问题(3): 在上述C中若出现更新错误,怎样把出错记录结果传回并在客户端显示呢?
注:因本人需将Midas转为MTS,上述为主要关键部份! 烦请多多指教!!