我上次提过这个问题的,还是没有解决,今天我把原代码帖上,大家帮我看看:我调试程序时居然出现问题,不能运行程序,出现的提示是:Project project1.exe raised exception class EVariantTypeCastError with message 'Could not convert variant of type(null)into type(string)'.Process stopped.  Use Step or Run to continue.我是用的ADOTABLE ,TABLE ,QUERY ,ADOQUERY 都连过还是出错,然后我跟踪了一下是:Application.CreateForm(Tfscl, fscl); 出错!TFSCL 里面只有DBGRID,TABLE ,DATASOURCE 控件!

解决方案 »

  1.   

    错误很明显啊
    数据库中的表有的记录中的字段值是null啊
    你却没有判断是不是null就转换成string
      

  2.   

    第一部分代码:
    program Project1;uses
      Forms,
      Unit1 in 'Unit1.pas' {jiancgl},
      Unit2 in 'Unit2.pas' {wtglzd},
      Unit3 in 'Unit3.pas' {jgzzd},
      Unit4 in 'Unit4.pas' {gongcjs},
      Unit5 in 'Unit5.pas' {jianymc},
      Unit6 in 'Unit6.pas' {main},
      Unit7 in 'Unit7.pas' {shuinibz},
      Unit8 in 'Unit8.pas' {snbz},
      Unit9 in 'Unit9.pas' {gjbz},
      Unit10 in 'Unit10.pas' {zuanbz},
      Unit11 in 'Unit11.pas' {form11},  .........省略..................
      
      Unit100 in 'Unit100.pas' {Form100},
      Unit101 in 'Unit101.pas' {frmface};{$R *.RES}begin
      Application.Initialize;
      Application.CreateForm(Tmain, main);
      Application.CreateForm(Tjiancgl, jiancgl);
      Application.CreateForm(Twtglzd, wtglzd);
      Application.CreateForm(Tjgzzd, jgzzd);
      Application.CreateForm(Tgongcjs, gongcjs);
      Application.CreateForm(Tjianymc, jianymc);
      Application.CreateForm(Tshuinibz, shuinibz);
      Application.CreateForm(Tsnbz, snbz);
      Application.CreateForm(Tgjbz, gjbz);
      Application.CreateForm(Tzuanbz, zuanbz);  //////////////////////////////////////
      Application.CreateForm(Tform29, form29);再此处跳出,如把它删掉,下面均出错!烦死了!
      //////////////////////////////////////  Application.CreateForm(Tform11, form11);
      Application.CreateForm(Tgcgj, gcgj);
      Application.CreateForm(Tyhgl, yhgl);
      Application.CreateForm(Tjcqx, jcqx);
      Application.CreateForm(Tsbdj, sbdj);
      Application.CreateForm(Tsjbf, sjbf);
      Application.CreateForm(Tzdjc, zdjc);
      Application.CreateForm(Txtcsh, xtcsh);
      Application.CreateForm(Tsysj, sysj);
      Application.CreateForm(Tsd, sd);
      Application.CreateForm(Txxjd, xxjd);
      Application.CreateForm(Thtq, htq);
      Application.CreateForm(Tyjk, yjk);
      Application.CreateForm(Tshfcx, shfcx);
      Application.CreateForm(Tfzgl, fzgl);
      Application.CreateForm(TForm28, Form28);
      Application.CreateForm(TForm27, Form27);
      Application.CreateForm(TForm30, Form30);
      ..........省略.........................
      Application.CreateForm(TForm100, Form100);
      Application.CreateForm(Tfrmface, frmface);
      Application.CreateForm(TForm12, Form12);
      Application.Run;
    end.
      

  3.   


    第二段程序:
    unit Unit29;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, DB, DBTables,
      Buttons;type
      TForm29 = class(TForm)
        Table1: TTable;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        DBNavigator1: TDBNavigator;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        Edit5: TEdit;
        Edit6: TEdit;
        Edit7: TEdit;
        Edit8: TEdit;
        Edit9: TEdit;
        Edit10: TEdit;
        BitBtn3: TBitBtn;
        BitBtn1: TBitBtn;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure BitBtn3Click(Sender: TObject);
        procedure BitBtn1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form29: TForm29;implementation{$R *.dfm}procedure TForm29.Button1Click(Sender: TObject);
    begin
    table1.Refresh ;
    close;end;procedure TForm29.Button2Click(Sender: TObject);
    begin
    close;end;procedure TForm29.BitBtn3Click(Sender: TObject);
    begin
    close;end;procedure TForm29.BitBtn1Click(Sender: TObject);
    begin
    close;end;end.
      

  4.   

    似乎你直接在设计的时候就有问题(有可能你改了表的结构但没有更新程序),或者是你的acitve=true,但是不能得到想得到的数据。。
    或者你在oncreate里面做了不该做的事。。
      

  5.   

    我查过了,我根本 没有设NULL值啊,全部有值的!
      

  6.   

    如果你程序中要是有DataModule的话(就是放数据集等数据控件)的话,那么要先创建它,如果没有的话.
    procedure TForm29.Button1Click(Sender: TObject);
    begin
    table1.Refresh ;//确保Table1是打开的。
    close;end;
      

  7.   

    你这个,现在没有办法进行错误判断,唯一能够给你的提示是:数据库的设计上,而不应该是程序本身的问题,你看一下数据类型,应该是你改了数据库中的某个表的结构,而没有将里边的数据进行转化(奇怪,如果是这样的话,没有理由可以转化成功啊。),不过,也不排除你在程序中进行类型转化的时候,将某一个Null值转化为String类型,当然,这个列的类型本来不是String,而是其它的,如:Image等,这样的话,就算它不是一个Null值,也会出现这种情况,从窗体的代码可以看的出,你并没有用数据敏感控件,而是用TEdit进行体取,这就很有可能出错,如:
    Editv.Text := FieldByName('..').AsString;//请确保这儿每个字段的数据类型是字符型或是可以转化为字符型的。你可以先屏蔽这些给值操作,看一下是否有错,如果没有错的话,就说明肯定是控件给值的错误,如果还有错的话,应该就是数据库的错误。Application.CreateForm(Tzuanbz, zuanbz);//你看一下这儿是否有错。
      //////////////////////////////////////
      Application.CreateForm(Tform29, form29);再此处跳出,如把它删掉,下面均出错!烦死了!
      //////////////////////////////////////