我再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;
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;
解决方案 »
- 难难难!!!如何滚动条下面的图片一起抓到
- 最近用delphi作了一个客户管理系统,感觉很爽!
- 我写了一个服务程序,可忘了用啥命令来注册呀?
- 有哪位用过sailprint这个控件的
- 如何在stringgrid的单元格中加入按钮?
- TQuery类变量赋值时出现非法存取问题??????
- 急!如何用delphi控制excel中的图片缩放?
- 来这儿去高分!!!!
- 怎样结束一个线程?
- 请问DELPHI怎么样才可以和EXECL联系起来?我想写个程序,然后有生成EXCEL程序(包括表格全部生成好),然后利用EXCEL打印出来,这要用到函数吗?
- 难道真的没有人会了吗???????????
- 请问一下。delphi连什么数据库好?
form1.ShowModal;去掉
这是什么原应呀??怎么解决?
frmmain.ShowModal;
关闭delphi重新进入看看
Inis := TIniFile.Create(CurDir + 'TestMis.ini');
frmmain.ShowModal;
Application.Run; //问题就出现在这个地方
********************************************
“frmmain.ShowModal;”去掉!*******************************************
Application.CreateForm(TForm1, Form1);
form1.ShowModal;
Application.Run;
*******************************************
“form1.ShowModal;”必须要,不然form1,frmmain的窗体文件将同时出现!
Access violation at address 004629D6 in module 'TESTMIs.EXE'.Read of
address FFFFFFFFF
该错误,程序不能进行了!!
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;
frmSplash.Repaint;
frmSplash.Update;
frmSplash.Close;
这几句不要都可以
with adoquery1 do
begin
close;
sql.Clear;
strsql:='update id set fg=1';
sql.add(strsql);
Execsql;
end;
frmmain.show; // 问题是不时出现在这里?
form1.hide; //问题是不时出现在这里?
最好 把 代码 全部 贴出来。
form1 的 button1 方法 不会影响 这里,我已经试过了.
如果能运行,说明问题出在frmmain
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.
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.
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.
问题出在frm_main, frm_main 中 就没有任何代码吗?
不好意思,你稍微等我一下!我出去那点东西等会把源代码贴上!
你看我帮你做的测试。
很简单的。
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?
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;
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;
不知的因素太多了,最好是跟踪一下,看错误出在哪一行代码?
谢谢你了IUPRG(苍狼),你让我学到很多东东!良师呀!
而且adoquery1 的 connection 属性没有指定吧?
form1.hide;
frmmain.show; // 这是问题的关键,因为你在运行form1时 并没有创建 frmmain 啊,所以导致引用错误!
在 frmmain.show; 之前
加上 frmmain := tfrmmain.create(application); 就一切ok 了!
--------------------------------------------
不是标志的问题,就是没有建立frmmain 实例,按照我说的做。
IUPRG(苍狼)