是这样的, 我写了一个执行存储过程的类继承TADOStoredProc, 存储过程是有很多输入参数的嘛, 这些参数的读写是通过Index的方式的, 比如
TMyStoredProc.Params[Index] = Value, 问题来了, Index一般都是1, 5, 6, 9这样没有意义的数字, 现在我的想法是用枚举来做Index, 比如
Type Param = (Name, Age, Height);
那我这可以这么用
TMyStoredProc.Params[Name] = Value 当然Params的Write Procedure的签名就变了
由SetParams(I: Inetger; V: Variant) -> SetParams(I: Param; V: Variant)这样显然就不能把俺写的类做成一个通用的类了, 因为每个具体存储过程实现我都需要定义一个不同的枚举!有木有同学给个方案! 分不多, 100送上!谢谢
M.
TMyStoredProc.Params[Index] = Value, 问题来了, Index一般都是1, 5, 6, 9这样没有意义的数字, 现在我的想法是用枚举来做Index, 比如
Type Param = (Name, Age, Height);
那我这可以这么用
TMyStoredProc.Params[Name] = Value 当然Params的Write Procedure的签名就变了
由SetParams(I: Inetger; V: Variant) -> SetParams(I: Param; V: Variant)这样显然就不能把俺写的类做成一个通用的类了, 因为每个具体存储过程实现我都需要定义一个不同的枚举!有木有同学给个方案! 分不多, 100送上!谢谢
M.
解决方案 »
- 再请教一个问题,如果修改一个十六进制文件?
- 从数据库image字段中的数据怎么输入到excel中
- 我建立了一个frame和一个form1,在上面frame上放了一个edit我想 通过form1上的button赋值给frame上的edit该怎么写?
- 分钟转换成小时的问题
- 接手一个项目,一个exe文件没源码,如何在程序中去模拟去点击exe运行界面上按钮,并把运行结果从界面的文本框中自动复制出来?
- 本人新建delphi交流群,诚邀各位同行加盟,群号:26929954
- 关于APRO的安装
- 怎样使用DBGridEh控件
- 如何删除adotable中的所有记录?急!!!
- DataSanp TFDJSONDataSets
- ActiveHint在Delphi7与Delphi2007间差别
- Fastreport4.0 文字太长如何能实现这样的省略
p: Param;
id: Integer;
begin
id := Ord(Param);
end;
// 不知是不是要表达这个意思type
Param = (Name, Age, Height, Width); // 可以随意定义这个枚举
var
p: TParameter;
stored: TMyStoredProc;
begin
stored := TMyStoredProc.Create(nil);
p := stored.Parameters.AddParameter;
p.Name := 'Name';
p.Value := '阿扁'; p := stored.Parameters.AddParameter;
p.Name := 'Age';
p.Value := '50'; p := stored.Parameters.AddParameter;
p.Name := 'Height';
p.Value := '100cm'; p := stored.Parameters.AddParameter;
p.Name := 'Width';
p.Value := '10000kg'; // 通过参数名来访问参数值
ShowMessage(stored.Parameters.ParamByName('Name').Value);
ShowMessage(stored.Parameters.ParamByName('Age').Value);
ShowMessage(stored.Parameters.ParamByName('Height').Value);
ShowMessage(stored.Parameters.ParamByName('Height').Value); stored.Free;
end;
template<class T>
SetParams(T param, Varaint v){
this->Parameters[Ord(T)] = v;
}
这样的化特殊化就由编译器来做, 不用我每遇到一个新的存储过程定义不同的枚举就要写一个子类
template<class T>
SetParams(T param, Varaint v){
this->Parameters[Ord(T)] = v;
}
这样的化特殊化就由编译器来做, 不用我每遇到一个新的存储过程定义不同的枚举就要写一个子类泛型,D2009+