问题是这样从oracle 数据库读取出一个 number 类型的字段值 估计有18位数字到了delphi 程序里,用FindField('UPREPORTMAINID').AsString 或者 AsFloat 之类的,反正都测试过了但得到的值一直是用科学计数法显示的,如: 数据库里是 910172407570061642 的值 ,到了delphi 里就成了9.10172407570061642E18但我想显示成普通数字字符串  910172407570061642想了很多种办法就是不行因为这个字段值是个主表的ID来者(估且不去计较设计的合理性),要用到他来去查相关子记录原来用dbexpress 的时候没这个问题,由于各种原因,改成ado, 后来又改成 unidac 问题就来了,改成后两者后就出现了上面的问题了,查不到子表记录了,因为得到的主表ID字符串是科学记数字符串

解决方案 »

  1.   

    改语句看看:SELECT CAST(UPREPORTMAINID AS VARCHAR2(30)) FROM YourTable;
      

  2.   


    非常感谢,问题解决了!顺便再问个线程问题我用
    CreateThread(nil,0,@BeginExport,Ptr(0),0,taskThreadID); 创建了一个线程但我用
    ExitThread(taskThreadID);
    SuspendThread(taskThreadID);
    ResumeThread(taskThreadID); 
    都不起作用BeginExport 函数里我就写了一些普通的代码,但执行完里面的代码可能要较长的时间,上面的三个退出,暂停,恢复线程的函数,是不是要等BeginExport 方法体里的代码逻辑执行完成后才生效啊
      

  3.   

    调用API函数创建线程有自己的规矩。您提供的东西少,无法具体到某个地方。但思路要集中在以下几个方面:
    1.FreeOnTerminate:=true的设定
    2.线程中是否存在与VCL打交道而又不是在Synchronize底下调用的代码,VCL的非线程安全要求所有与其交道的代码单独写到synchronize(方法)里面
    3.检查一下有没有Repeat、While之类的循环结构,仔细推敲一下代码。
    4.具体排错过程:把Execute中的代码注释掉仅做一个最简单的循环,以此确定问题出在线程内还是线程外。
      线程外的话,查查资料。线程内的话,根据上面写的再处理。
      

  4.   

    ResumeThread之类的,并非taskThreadID,而是CreateThread返回的句柄.比如:AHandle: THandle; {global var}AHandle:= CreateThread(...);
    ....
    ResumeThread(AHandle);