一个VCL的BUG... ADODB.PAS 的这个函数实现上的错误 function VarDataSize(const Value: OleVariant): Integer;
請問大蝦halfdream(哈欠) ,那怎樣才能解決這個問題呢?
如果没有必要连接到INTEGERT上去的话,建议用DCOM,SOCK经常丢失数据包的,很不稳定
定义方法的数据操作 应用程序服务器的操作 procedure Ttestapp.mm(UserName,PassWord); begin ADODataSet1.Close; ADODataSet1.CommandText:='select Legal_power from UserManage where UserName='''+UserName+''' and PassWord='''+PassWord+''''; ADODataSet1.Open; end;客户端调用:procedure TForm1.BitBtn1Click(Sender: TObject); begin UserName:=edit1.text; PassWord:=edit2.text; DataModule2.APPS.mm(UserName,PassWord); ClientDataSet1.close; DataModule2.ClientDataSet1.Open; //剩下的就是你对返回数据集的处理了 end;
最早这个BUG我是两年前听说的,前些天看见有人也在问这问题, 我自己跟踪一下,确定也是这函数的BUG, CSDN论坛一个朋友告诉我,他很早就发MAIL给BORLAND报告了这个BUG。。却从D5,D6,D7都有这个BUG,呵,真是过份。 function VarDataSize(const Value: OleVariant): Integer; begin 。 把这句 Result := Length(PWideString(@TVarData(Value).VOleStr)^); 改成: Result := Length(Value);
ADODB.PAS
的这个函数实现上的错误
function VarDataSize(const Value: OleVariant): Integer;
請問大蝦halfdream(哈欠) ,那怎樣才能解決這個問題呢?
应用程序服务器的操作
procedure Ttestapp.mm(UserName,PassWord);
begin
ADODataSet1.Close;
ADODataSet1.CommandText:='select Legal_power from UserManage where UserName='''+UserName+''' and PassWord='''+PassWord+'''';
ADODataSet1.Open;
end;客户端调用:procedure TForm1.BitBtn1Click(Sender: TObject);
begin
UserName:=edit1.text;
PassWord:=edit2.text;
DataModule2.APPS.mm(UserName,PassWord);
ClientDataSet1.close;
DataModule2.ClientDataSet1.Open;
//剩下的就是你对返回数据集的处理了
end;
我自己跟踪一下,确定也是这函数的BUG,
CSDN论坛一个朋友告诉我,他很早就发MAIL给BORLAND报告了这个BUG。。却从D5,D6,D7都有这个BUG,呵,真是过份。
function VarDataSize(const Value: OleVariant): Integer;
begin
。
把这句 Result := Length(PWideString(@TVarData(Value).VOleStr)^);
改成: Result := Length(Value);
end;然后重新编译ADODB。PAS单元。
可用命令行方式编译:
dcc32 adodb.pas
http://www.588188.com/netbook/tech/delphi/html/delphi.ohchina.155.htm
老兄,問題出現在我沒有替換掉原來的DCU文件,現問題已解決,非常感謝你。
馬上結貼。