遇到了奇怪的问题,请帮助我!!! 急!(100分)

  • 主题发起人 主题发起人 skyrabbit
  • 开始时间 开始时间
S

skyrabbit

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么我的程序代码在IDE环境下调试运行正常而脱离开IDE环境运行就错误?
(没有用到第三方的控件)
为什么程序在NT Server4.0+SP5的系统中和PWin98的系统中运行的结果也不同?
(同样的代码,没有用特殊的API函数)

具体的现象和代码在 http://www.delphibbs.com/delphibbs/DispQ.asp?LID=417234 中。

请各位帮我分析一下出现这种现象的原因和处理措施吧。
谢谢!
 
昨天晚上和今天上午继续测试(BCB4.0+SQL Server7.0+ACCESS97),发现:
1.在PWin98环境下脱离IDE运行正常
2.在NT4.0+SP5下单步运行正常,脱离IDE运行就出现以上情况的错误.
去掉try/catch后,运行错误提示是:External exception EEFFACE

难道这与操作系统有关? 为什么单步和编译后运行不一样呢?
 
奇怪的是:用下边的代码编译后运行的话,出错。单步运行的话,却又正常的很,为什么?
有请各位富翁指点其中原因。

代码有点长,但是很简单,请费神看完。期待各位的指教!

Query1->Active = false;
Query1->DatabaseName = "BackUpDB"
//Access数据库
Query1->SQL->Clear();
Query1->SQL->Add("Select * from MyTableName");
Query1->Active = true;
Query1->First();

Table1->DatabaseName = "MainDatabase"
//SQL Server数据库
Table1->TableName = "MyTableName";
Table1->Close();
Table1->Open();
try{
while (!Query1->Eof)
{
Table1->Append();
Table1->FieldByName("gbnum")->Value = Query1->FieldByName("gbnum")->Value;
Table1->FieldByName("jlsj")->Value = Query1->FieldByName("jlsj")->Value;
Table1->FieldByName("ndtz")->Value = Query1->FieldByName("ndtz")->Value;
Table1->FieldByName("sysgn")->Value = Query1->FieldByName("sysgn")->Value;
//以上字段包括数字、文本等,都能正常赋值
{
TMemoryStream * st = new TMemoryStream();
try
{
dynamic_cast(Query1->FieldByName("syszp"))->SaveToStream(st);
//dynamic_cast(Query1->FieldByName("syszp"))->SaveToFile("0123.123");
/*走到这里就出问题了,用SaveToFile方法也一样出错;但是单独
做显示图片字段的小模块测试时一样的代码没出问题*/
/*编译通过后运行到这一条语句就出发异常了,但是单步运行时
却又正常过去了,为什么??*/
st->Position = 0; //或者st->Seek(0,soFromBeginning);
dynamic_cast(Table1->FieldByName("syszp"))->LoadFromStream(st);
//dynamic_cast(Table1->FieldByName("yxzp"))->LoadFromFile("0123.123");
}
catch(...)
{
dynamic_cast(Table1->FieldByName("syszp"))->Clear();
//所以jpg图片数据始终到不进来
}
delete st;
}
Table1->Post();
Query1->Next();
};
}
catch(...)
{

}
Table1->Close();
Query1->Close()




//这是显示数据库中图片字段的代码,运行正常
if (( dynamic_cast(Querycard->FieldByName("syszp"))->BlobSize)>100)
{
TJPEGImage *MyJPEG=new TJPEGImage();
TMemoryStream * st = new TMemoryStream();
dynamic_cast(Querycard->FieldByName("syszp"))->SaveToStream(st);
st->Seek(0,soFromBeginning);
MyJPEG->LoadFromStream(st);
photo->Picture->Assign(MyJPEG);
delete MyJPEG;
delete st;
}
else
photo->Picture=Assign(NULL)
 
从来没见过这种dynamic_cast,难道是BCB4.0的特殊?
是不是copy的时候漏了,这种东西编译都应该同不过呀!
 
是的是的,是我在复制的时候匆忙中给漏了,正确的应该是:
dynamic_cast<TBlobField *>Query1->FieldByName("syszp"))->SaveToStream(st);
dynamic_cast<TBlobField *>(Table1->FieldByName("syszp"))->LoadFromStream(st);
 
越急越乱,代码又贴错了.
请原谅!
正确的代码应该是:
TMemoryStream * st = new TMemoryStream();
dynamic_cast<TBlobField *>(Query1->FieldByName("syszp"))->SaveToStream(st);
st->Position = 0;
dynamic_cast<TBlobField *>(Table1->FieldByName("syszp"))->LoadFromStream(st);
delete st;
 
温柔一刀:
我想这是BDE中的控件本身引发的与NT4.0之间的冲突,所以最终采用了KADao控件作为
Access97数据源来实现图象数据的转移,采用同样的代码,结果就顺利通过了.
因为有事很久上不了网,今天就把这个问题给结了吧.
希望有机会还能和你以及大家讨论 这个问题的原因和处理方法.

谢谢!
 
接受答案了.
 
后退
顶部