我再program中想读取数据库中的一个标志,当标志为1时,不再运行form1而直接运行frmmain,当标志不为1时运行form1,在form1中设置数据库的标志让其为1.该部分代码如下:
  Application.Initialize;
  frmSplash := TfrmSplash.Create(Application);
  frmSplash.Show;
  frmSplash.Repaint;
try  
  Application.CreateForm(TDMMain, DMMain);//该模块为数据库模块
  DMMain.ADOConn.GetTableNames(FTablesST);
    if Show_FormLogin then
    begin
       frmSplash.Update;
       with frmSplash.adoquery1 do
          begin
            close;
            sql.Clear;
            sql.Add('select fg from id');
            open;
          end;
       if frmSplash.adoquery1.fieldbyname('fg').AsInteger>=1 then
          begin
            Application.CreateForm(TfrmMain, frmMain);
            frmmain.ShowModal;
            Application.Run; //问题就出现在这个地方!
          end
       else
          begin
            Application.CreateForm(TForm1, Form1);
            form1.ShowModal;
            Application.Run;
          end;
    end;     
    finally
    frmSplash.Close;
    frmSplash.Free;
  end;
Inis.Free;

解决方案 »

  1.   

    frmmain.ShowModal;
    form1.ShowModal;去掉
      

  2.   

    还是不行出现错误 project TestMIs.exe raised exception class EAccessViolation with message 'Access violation at address 004629D6 in module 'TESTMIS.EXE.Read of address FFFFFFFF'.Proess stopped.Use Step or Run to continue.
    这是什么原应呀??怎么解决?
      

  3.   

    form1.ShowModal;去掉
     frmmain.ShowModal;
    关闭delphi重新进入看看
      

  4.   

    还是不行!我写的代码除了showmodal外,没有其他错误了吧?它老是出现其上错误,我这没法调试!很郁闷,这个问题我都调试了2天了!这是第3天,希望高手门能帮我解决一下!
      

  5.   

    我在frmSplash.Repaint;后面还拉下一句
    Inis := TIniFile.Create(CurDir + 'TestMis.ini');
      

  6.   

    查一下 TfrmMain 里的 create 方法 和 active 事件,看是不是其中 有访问 没有 被建立 的对象 的 代码?
      

  7.   

    Application.CreateForm(TfrmMain, frmMain);
    frmmain.ShowModal;
    Application.Run; //问题就出现在这个地方
    ********************************************
    “frmmain.ShowModal;”去掉!*******************************************
    Application.CreateForm(TForm1, Form1);
    form1.ShowModal;
    Application.Run;
    *******************************************
    “form1.ShowModal;”必须要,不然form1,frmmain的窗体文件将同时出现!
      

  8.   

    你在frmmain的create和show里面都写了什么
      

  9.   

    当我忽略以上错误后又出现 
    Access violation at address 004629D6 in module 'TESTMIs.EXE'.Read of 
    address FFFFFFFFF
    该错误,程序不能进行了!!
      

  10.   

    改成这样,应该就可以了
    Application.Initialize;
      frmSplash := TfrmSplash.Create(Application);
      frmSplash.Show;
      frmSplash.Repaint;
    try  
      Application.CreateForm(TDMMain, DMMain);//该模块为数据库模块
      DMMain.ADOConn.GetTableNames(FTablesST);
        if Show_FormLogin then
        begin
           frmSplash.Update;
           with frmSplash.adoquery1 do
              begin
                close;
                sql.Clear;
                sql.Add('select fg from id');
                open;
              end;
           if frmSplash.adoquery1.fieldbyname('fg').AsInteger>=1 then
              begin
                Application.CreateForm(TfrmMain, frmMain);
                frmmain.Show;
              end
           else
              begin
                Application.CreateForm(TForm1, Form1);
                form1.Show;
              end;
        end;     
        finally
        frmSplash.Close;
        frmSplash.Free;
        Application.Run;
      end;
      

  11.   

    frmSplash.Show;
    frmSplash.Repaint;
    frmSplash.Update;
    frmSplash.Close;
    这几句不要都可以
      

  12.   

    谢谢楼上的了!!我现在知道这段代码没有什么问题了是不是出现在form1中的一段代码呀?在form1中一个button里有以下代码
    with adoquery1 do
       begin         
       close;
       sql.Clear;
       strsql:='update id set fg=1';
       sql.add(strsql);
       Execsql;
     end;
      frmmain.show; // 问题是不时出现在这里?
      form1.hide; //问题是不时出现在这里?
      

  13.   

    我测试了你的代码的大致,按照你的正常流程,没有任何问题,只是我唯独没有你的show_formlogin 方法 和 Inis := TIniFile.Create(CurDir + 'TestMis.ini');
    最好 把 代码 全部 贴出来。
      

  14.   

    to : snf(幻想) (
    form1 的 button1 方法 不会影响 这里,我已经试过了.
      

  15.   

    你 将 frmmain.ShowModal; 换成 form1.showmodal 试一试。
    如果能运行,说明问题出在frmmain
      

  16.   

    不要嘲笑我!我是一个新手,可能程序些的幼稚点大家不要笑!program TestMis;
    uses
      Forms,
      Windows,
      Classes,
      Sysutils,
      Db,
      ADODB,
      Inifiles,
      UnitMain in 'UnitMain.pas' {frmMain},
      UnitSplash in 'UnitSplash.pas' {frmSplash},
      DM in 'DM.PAS' {DMMain: TDataModule},
      Gloab in 'Gloab.pas',
      Unit_Login in 'Unit_Login.pas' {frmLogin},
      ConfigInfo in 'ConfigInfo.pas',
      DragSetupFrm in 'DragSetupFrm.pas' {DragSetupForm},
      MainInterface in 'MainInterface.pas',
      MutiDialogfrm in 'MutiDialogfrm.pas' {frm_Dialog},
      MutiEncryptfrm in 'MutiEncryptfrm.pas' {frm_Encrypt},
      MutiFlashfrm in 'Mutiflashfrm.pas' {frm_Flash},
      MutiGaugefrm in 'MutiGaugefrm.pas' {frm_Gauge},
      MutiInputfrm in 'MutiInputfrm.pas' {frm_Input},
      MutiTimefrm in 'MutiTimefrm.pas' {frm_Time},
      Unit_loginDb in 'Unit_loginDb.pas' {LoginForm},
      UnitAbout in 'UnitAbout.pas' {AboutBox},
      UnitAPI in 'UnitAPI.pas',
      UnitDispLib in 'UnitDispLib.pas' {frmDispLib},
      UnitAddPaper in 'UnitAddPaper.pas' {frmAddPaper},
      UnitAddFile in 'UnitAddFile.pas' {frmFileEdit},
      UnitHandMode in 'UnitHandMode.pas' {frmHandMode},
      UnitAutoMode in 'UnitAutoMode.pas' {frmAutoMode},
      UnitchangePwd in 'UnitchangePwd.pas' {frmChangePwd},
      UnitNewLib in 'UnitNewLib.pas' {frmNewLib},
      UnitSelectMod in 'UnitSelectMod.pas' {frmSelectMod},
      series in 'C:\My Documents\新建文件夹\series.pas' {Form1},
      biaoti in 'biaoti.pas' {Form2};{$R *.RES}begin
      Application.Initialize;
      frmSplash := TfrmSplash.Create(Application);
      frmSplash.Show;
      frmSplash.Repaint;
      SetGlobalVar;
      Inis := TIniFile.Create(CurDir + 'TestMis.ini');
      with CommParam do
      begin
        LocalName := Inis.ReadString('系统参数', '单位名称', '');
      end;
      Sleep(1000);
      try
        Application.Title := '先行考试系统';
        Application.CreateForm(TDMMain, DMMain);
     // Application.CreateForm(TForm1, Form1);
     // Application.CreateForm(TForm2, Form2);
      DMMain.ADOConn.GetTableNames(FTablesST);
        if Show_FormLogin then
        begin
           frmSplash.Update;
           with frmSplash.adoquery1 do
              begin
                close;
                sql.Clear;
                sql.Add('select fg from id');
                open;
              end;
           if frmSplash.adoquery1.fieldbyname('fg').AsInteger>=1 then
              begin
                Application.CreateForm(TfrmMain, frmMain);
                frmmain.ShowModal;
             //   Application.Run;
              end
           else
              begin
                Application.CreateForm(TForm1, Form1);
                form1.ShowModal;
             //   Application.Run;
              end;
        end;
        finally
        frmSplash.Close;
        frmSplash.Free;
        Application.Run;
      end;  Inis.Free;
    end.
      

  17.   

    form1 中的源代码!unit series;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls, jpeg, registry, StdCtrls,SHELLAPI, DB, ADODB;type
      TForm1 = class(TForm)
        Label1: TLabel;
        Edit1: TEdit;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Label2: TLabel;
        Label3: TLabel;
        Edit2: TEdit;
        Label4: TLabel;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        DataSource1: TDataSource;
        procedure Button1Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      NoRegistry:boolean;
      SpareDays :double;
      key:string;
    implementationuses UnitMain, biaoti;{$R *.dfm}
    procedure TForm1.Button1Click(Sender: TObject);
     var
      FSerial:string;
    begin
     FSerial := String(Pchar(Ptr($FEC71)));
     edit1.Text:=FSerial;
    end;procedure TForm1.Button3Click(Sender: TObject);
     var
       strsql:string;
       flg2:integer;
      begin
         with adoquery1 do
          begin
           close;
           sql.Clear;
           strsql:='select id from id';
           sql.add(strsql);
           open;
          end;
         flg2:=adoquery1.fieldbyname('id').asinteger;
       if flg2>=100 then
         application.Terminate
       else
         begin
          form1.hide;
          frmmain.show;
         end;
      end;
    procedure TForm1.Button2Click(Sender: TObject);
    var
    strsql:string;
    const
      smail='[email protected]';
    begin
          if edit2.text=key then
               begin
                 with adoquery1 do
                  begin
                  close;
                  sql.Clear;
                  strsql:='update id set fg=1';
                  sql.add(strsql);
                  Execsql;
                  end;
                frmmain.show;
                form1.hide;
               end
             else
               begin
                 showmessage('请输入正确的序列号,如果你还没有注册,请你先注册!');
                 ShellExecute(Handle, nil, Pchar('mailto:' + SMail), nil, nil, SW_ShowNormal);
               end;
         end;
    //当窗体被创建时产生
    procedure TForm1.FormCreate(Sender: TObject);
    var
     strsql,FSerial:string;
     flg,flg1,flg2:integer;
     i,j,x:integer;
     m:char;
    begin
    //----------------产生序列号-------------
      key:='';
      FSerial:= String(Pchar(Ptr($FEC71)));
      i:=length(FSerial);
     for j:=1 to i do
        begin
         m:=FSerial[j];
         x:=ord(m);
         x:=(x+100) div 3;
         key:=key+chr(x);
        end;
    //------------------------------------- with adoquery1 do
       begin
        close;
        sql.Clear;
        strsql:='select id from id';
        sql.Add(strsql);
        open;
       end;
      flg:=adoquery1.fieldbyname('id').AsInteger;
      if flg<=100 then
       begin
        flg1:=100-flg;
        label1.Caption:='你还可以继续使用'+inttostr(flg1);
        label1.Font.Size:=18;
        flg:=flg+1;
        with adoquery1 do
          begin
          close;
          sql.Clear;
          strsql:='update id set id='''+inttostr(flg)+'''';
          sql.add(strsql);
          Execsql;
          end;
        end
      else
       application.Terminate;
      end;
    end.
      

  18.   

    to  IUPRG(苍狼)这是我出问题的源代码了!希望你能帮我找出原因
      

  19.   

    将 
        Application.CreateForm(TfrmMain, frmMain); 
        frm_main.ShowModal;
      换成:
         frm_main :=tfrm_main.create(application);
         frm_main.ShowModal;Application.CreateForm(TfrmMain, frmMain);  本身会自动运行 frm_main.showmodal,所以如果这样写会运行两次 frm_main.
      

  20.   

    写的不错:)
    问题出在frm_main, frm_main 中 就没有任何代码吗?
      

  21.   

    to IUPRG(苍狼)
    不好意思,你稍微等我一下!我出去那点东西等会把源代码贴上!
      

  22.   

    不要烦。请一步一步的测试。
    你看我帮你做的测试。
    很简单的。
    begin
      Application.Initialize;
      frmSplash := TfrmSplash.Create(Application);
      frmSplash.Show;
      frmSplash.Repaint;
      Application.CreateForm(TfrmSplash, frmSplash);
    if frmSplash.edit1.text='1' then //因为我没有连接数据库所以搞一个标实吧。
              begin
                Application.CreateForm(TFrmForm, FrmForm);
                frmform.ShowModal;
                Application.Run; //问题就出现在这个地方!
              end
           else
              begin
                Application.CreateForm(TForm1, Form1);
                form1.ShowModal;
                Application.Run;
              end;...............end.这样子就可以检查出是不是showmodal的问题。
    我通过了。
    就不应该是showmodal的问题。
    然后你再一点一点的加代码进去。
    加一点测试一下。
    就知道是哪里有问题了。 frmform.ShowModal;
     Application.Run; //问题就出现在这个地方!又看了一下你的代码是这样子的。
    那证明你frmform有问题。
    你认真检查一下frmform中的代码再试试看吧!!
    不行的话再给我发MESSAGE过来!
    OK?
      

  23.   

    frmmain中的create事件中的代码!
    procedure TfrmMain.FormCreate(Sender: TObject);
    begin
    //FClipboardViewer := SetClipboardViewer(Handle); //建立剪贴板查看器
      CreateAndInitObjects; //建立和初始化对象  //建立备份目录和临时目录
      CreateDir(CurDir + 'backup\');
      CreateDir(CurDir + 'temp\');  pMousePos := Point(-1, -1);
      ShowDbs(cobDB);
      ReadInterface;  SetParas;          //设置应用程序属性
     // RefreshMenu;      //设置菜单end;
      

  24.   

    frmmain中的show事件中
    procedure TfrmMain.FormShow(Sender: TObject);
    var
      sDbName, sFileName,strsql: string;
      flg2:integer;
    begin
    //-----------------------------------------------------
      sDbName := LastUsedDbName; //获取最后使用的数据库文件名
      if ParamCount > 0 then
      begin
       frmsplash.Close;
        if FileExists(ParamStr(1)) then
          if LowerCase(ParamStr(1)) = '.mdb' then
            sDbName := GetFileName(ParamStr(1), false)
          else
          begin
            sFileName := ParamStr(1);
          {  ShowFileImportForm(sDbName, sFileName);}
          end;
      end;
      cobDb.ItemIndex := cobDb.Items.IndexOf(sDbName);
      cobDbChange(cobDb);
      //初始化ole
     { try
               Wordapp.Connect;
      except
         MessageDlg('Word没有安装或者安装不正确!', mtError, [mbOk], 0);
         Abort;
      end;
      }  OleContent.CreateObject('word.document',false);end;
      

  25.   

    我觉得frmmain中不影响button2和button3中的问题吧?
      

  26.   

    既然 frmmain 可以运行(退出两次就是我说的那个原因,要么更换代码,要么去掉frmmain.showmodal) ,就不是frmmain 的 问题,你可以设置断点跟踪 一下 form1的button2,button3 了,因为 我 看代码 现在 觉得 没什么问题,关键是在 你的 程序环境里
    不知的因素太多了,最好是跟踪一下,看错误出在哪一行代码?
      

  27.   

    我跟踪了就是出现了button2 和button3中的frmmain.show,form1.hide上!一旦运行到这就报错!
    谢谢你了IUPRG(苍狼),你让我学到很多东东!良师呀!
      

  28.   

    form1 没有 引用 dm.pas 
    而且adoquery1 的 connection 属性没有指定吧?
      

  29.   

    没有!我直接在窗体上创建的ado,connection属性指定了!
      

  30.   

    请看你的代码,:
          form1.hide;
          frmmain.show;   // 这是问题的关键,因为你在运行form1时 并没有创建 frmmain 啊,所以导致引用错误!
      

  31.   

    是不是那个标志判断和program中的判断冲突了??
      

  32.   

    button 3也 需要 改 ,
    在 frmmain.show;   之前
    加上 frmmain := tfrmmain.create(application); 就一切ok 了!
      

  33.   

    是不是那个标志判断和program中的判断冲突了??
    --------------------------------------------
    不是标志的问题,就是没有建立frmmain 实例,按照我说的做。
      

  34.   

    谢谢你了,的确如你所说一样!呵呵都怪我当时很粗心,不然的话,也不会这么麻烦!谢谢你了
     IUPRG(苍狼)