问题是这样从oracle 数据库读取出一个 number 类型的字段值 估计有18位数字到了delphi 程序里,用FindField('UPREPORTMAINID').AsString 或者 AsFloat 之类的,反正都测试过了但得到的值一直是用科学计数法显示的,如: 数据库里是 910172407570061642 的值 ,到了delphi 里就成了9.10172407570061642E18但我想显示成普通数字字符串 910172407570061642想了很多种办法就是不行因为这个字段值是个主表的ID来者(估且不去计较设计的合理性),要用到他来去查相关子记录原来用dbexpress 的时候没这个问题,由于各种原因,改成ado, 后来又改成 unidac 问题就来了,改成后两者后就出现了上面的问题了,查不到子表记录了,因为得到的主表ID字符串是科学记数字符串
非常感谢,问题解决了!顺便再问个线程问题我用
CreateThread(nil,0,@BeginExport,Ptr(0),0,taskThreadID); 创建了一个线程但我用
ExitThread(taskThreadID);
SuspendThread(taskThreadID);
ResumeThread(taskThreadID);
都不起作用BeginExport 函数里我就写了一些普通的代码,但执行完里面的代码可能要较长的时间,上面的三个退出,暂停,恢复线程的函数,是不是要等BeginExport 方法体里的代码逻辑执行完成后才生效啊
1.FreeOnTerminate:=true的设定
2.线程中是否存在与VCL打交道而又不是在Synchronize底下调用的代码,VCL的非线程安全要求所有与其交道的代码单独写到synchronize(方法)里面
3.检查一下有没有Repeat、While之类的循环结构,仔细推敲一下代码。
4.具体排错过程:把Execute中的代码注释掉仅做一个最简单的循环,以此确定问题出在线程内还是线程外。
线程外的话,查查资料。线程内的话,根据上面写的再处理。
....
ResumeThread(AHandle);