谁能告诉我这是为什么?想说delphi的BUG,不知会不会给捧打呀!·!#!·#!·#

auly403 2006-01-05 06:13:13
procedure TForm3.btnQueryClick(Sender: TObject);
var
szDecryptString,szTQueryString: string;
temp:Integer;
begin
szTQueryString := 'select SoftWare_ID,name from Software';
Form1.adoquery2.SQL.Clear;
Form1.adoquery2.SQL.Add(szTQueryString);
Form1.adoquery2.Open;
szDecryptString:=Form1.adoquery2.Fields[1].AsString;
// szDecryptString:=Form1.Decrypt(szDecryptString,true);//A句
temp:=Form1.adoquery2.Fields[0].AsInteger;///如果把上一句(A句起用。就会出现
// Access violaiton At Address 0xXXX in module. 错误.
exit;
end;
/////////////////////////////////////////////
function TForm1.Encrypt(Src: string; bMode: boolean): string;
var
hDLl: THandle;
myDecrytFiled: Decryt;
ucInData: array[1..32] of UCHAR;
ucOutData: array[1..32] of UCHAR;
i, inLen, outLen: Integer;
szReult, Temp: string;
begin
inLen := Length(Src);
if bMode = true then
begin
inLen := trunc(inLen / 2);
for i := 1 to inLen do
begin
Temp := MidStr(Src, i * 2 - 1, 2);
ucInData[i] := strtoint('$' + Temp);
end;
end
else
CopyMemory(@ucInData[1], @Src[1], inLen);
for i:=inLen+1 to 31 do
ucInData[i]:=0;
for i:=1 to 32 do
ucOutData[i]:=0;
outLen := trunc((InLen + 7) / 8) * 8;
anblue(@ucOutData,@ucInData,inLen,bMode);///这个调用一个VC的DLL。
Result := '';
for i := 1 to OutLen do
case bMode of
false: Result := Result + inttohex(ucOutData[i], 2);
true: Result := Result + chr(ucOutData[i]);
end;
end;
谁能解释这是为什么?
...全文
235 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
auly403 2006-01-08
  • 打赏
  • 举报
回复
up
auly403 2006-01-07
  • 打赏
  • 举报
回复
但是要加密与解密的字符串都不是空的。
飞天揽月 2006-01-06
  • 打赏
  • 举报
回复
你检查一下:
szDecryptString:=Form1.adoquery2.Fields[1].AsString;
是否为空

则第一:如果为空 不要加密直接放入数据库,
if trim (aStr) <> '' then
Form1.adoquery2.Fields[1].AsString := Encrypt(aStr)
else
Form1.adoquery2.Fields[1].AsString := aStr;



第二:如果为空 不要解密。

if trim (Form1.adoquery2.Fields[1].AsString ) <> '' then
aStr := Decrypt(Form1.adoquery2.Fields[1].AsString)else
aStr := Form1.adoquery2.Fields[1].AsString := aStr;

修改后把数据库中的全部清空一下,因为原来为空加密得解不出来
yrb 2006-01-06
  • 打赏
  • 举报
回复
delphi没有那么多的bug,花点时间检查自己的代码吧
youcheng1 2006-01-06
  • 打赏
  • 举报
回复
自己的Bug
ly_liuyang 2006-01-06
  • 打赏
  • 举报
回复
呵呵
肯定是自己的Bug啦
ourlin 2006-01-06
  • 打赏
  • 举报
回复
当然错了, 你看看,调用的函数名称都不一致!
szDecryptString:=Form1.Decrypt(szDecryptString,true);//A句
============
function TForm1.Encrypt(Src: string; bMode: boolean): string
=========
NightCloud 2006-01-06
  • 打赏
  • 举报
回复
把 temp:=Form1.adoquery2.Fields[0].AsInteger;这句改成showmessage('hello')报错吗?
我怀疑form1.Encrypt方法报错,但delphi调试器把错误指向下一句了
auly403 2006-01-06
  • 打赏
  • 举报
回复
TO NightCloud():
这个当然不会报错了。

谁能说出来原因来。我再开贴给分
NightCloud 2006-01-06
  • 打赏
  • 举报
回复
把 szDecryptString:=Form1.Decrypt(szDecryptString,true);
放到 temp:=Form1.adoquery2.Fields[0].AsInteger;后面呢?会不会报错?
auly403 2006-01-06
  • 打赏
  • 举报
回复
谢谢大家!
那个函数我贴错了。并且函数错不会出现这样的问题吧!
在程序中有数十个地方都调用这个加解密函数,就在这个form3出现问题,其它form调用这个
函数没有任何问题。
TO NightCloud():
Form1.adoquery2.Open;
szDecryptString:=Form1.adoquery2.Fields[1].AsString;
szDecryptString:=Form1.Decrypt(szDecryptString,true);
showMessage(Form1.adoquery2.Fields[1].AsString);
并且我已经用F7跟踪进入,在执行完加解密函数,还不报错。
只要对Form1.AdoQuery2进行取值就会出现AV错误。
哪个热心人能够帮帮忙?
代码下载地址: https://pan.quark.cn/s/a4b39357ea24 图书馆系统非常适合运用C++面向对象的特性进行建模。图书馆管理系统主要由四个关键模块构成:图书借阅、图书归还、图书维护以及读者服务。在系统设计中,可以定义一个读者类(Reader),用于存储每位读者的详细资料;读者数据库类(Rdatabase),用于管理所有读者的信息;图书类(Book),用于记录每本图书的基本属性;图书数据库类(Bdatabase),用于维护所有图书的记录。 【图书馆管理系统构建】 基于C++面向对象编程的图书馆管理系统,其核心功能划分为四个主要部分:图书借阅、图书归还、图书维护和读者服务。该系统通过设计多种类来模拟图书馆的实际运作,包括读者类(Reader)、读者数据库类(Rdatabase)、图书类(Book)以及图书数据库类(Bdatabase)。 1. **读者类(Reader)**: - 该类包含读者的基础资料,例如删除标记(tag)、读者编号(no)、姓名(name)以及所借图书列表(borbook)。 - 通过构造函数对读者信息进行初始化。 - 拷贝构造函数用于复制读者的姓名信息。 - 提供一系列成员函数,以支持信息的获取和设置操作。 2. **读者数据库类(Rdatabase)**: - 包含一个读者记录数组(read),并使用记录指针(top)来标识最新添加的读者信息。 - 构造函数从read.txt文件中加载所有读者数据,并在析构函数中将未删除的记录保存回文件。 - 提供管理读者信息的接口,例如添加、删除和查找功能。 3. **图书类(Book)**: - 该类存储图书的基本属性,包括删除标记、图书编号、书名(name)以及图书的在架状态...

16,741

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧