主数据库是在程序打开时设置的程序大部分数据与这个数据库相关
但是在定义材料的时候需要用到另外个数据库然后打开定义材料在不加入这个材料数据库之前程序没问题,但是加入了之后运行会提示验证失败而且在一个小测试中发现材料定义界面连接的数据库仍然是主数据库而不是材料数据库,但是单独的把这两个form的代码贴出来重新设计个小程序却没有问题,因此推断是程序的数据结构出现的问题,请求各位大大帮忙
唉,学飞机设计的居然被老师要求做这个,本科时候学的那点编程早忘光了,这几天弄这玩意真头疼
附材料选择界面和材料定义界面的代码(登录界面代码基本上和材料选择界面相同)
unit Unit13;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TForm13 = class(TForm)
RadioGroup1: TRadioGroup;
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations } end;var
Form13: TForm13;
lujing:string;
implementationuses Unit3;{$R *.dfm}procedure TForm13.FormCreate(Sender: TObject);
begin
dangqianwenjianjia:=ExtractFileDir(Application.ExeName);
opendialog1.DefaultExt:='mdb';
opendialog1.Filter:='数据文件|*.mdb';
opendialog1.InitialDir:=trim(dangqianwenjianjia+'\mat\');
opendialog1.OptionsEx:=opendialog1.OptionsEx+[ofexnoplacesbar];
radiogroup1.ItemIndex:=0;
end;procedure TForm13.Button1Click(Sender: TObject);
var
str2:string;
m:integer;
begin
opendialog1.InitialDir:=trim(dangqianwenjianjia+'\mat\');
if opendialog1.Execute then
begin
str2:=ExtractFileName(OpenDialog1.Filename);
m:=pos('.',str2);
edit1.Text:=copy(Str2,1,m-1);
end;
end;procedure TForm13.Button2Click(Sender: TObject);
begin
if radiogroup1.ItemIndex=0 then
begin
try
if fileexists(dangqianwenjianjia+'\mat\'+trim(edit1.Text)+'.mdb') then
begin
application.messagebox('已经存在','提示',64);
edit1.Text:='';
edit1.SetFocus;
end else begin
copyfile(pansichar(dangqianwenjianjia+'\db2.mdb'),pansichar(dangqianwenjianjia+'\mat\'+trim(edit1.Text)+'.mdb'),false);
lujing:=dangqianwenjianjia+'\mat\'+trim(edit1.Text)+'.mdb';
form4.show;
end;
except
showmessage('出错');
end;end else begin
try
if fileexists(dangqianwenjianjia+'\mat\'+trim(edit1.Text)+'.mdb') then
begin
lujing:=dangqianwenjianjia+'\mat\'+trim(edit1.Text)+'.mdb';
form4.show;
end else begin
application.messagebox('打开失败','提示',64);
end;
except
showmessage('出错');
end;
end;
end;end.
材料定义界面
unit Unit3;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, ExtCtrls;type
TForm4 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Label3: TLabel;
Edit2: TEdit;
Label4: TLabel;
Edit3: TEdit;
Label5: TLabel;
Label6: TLabel;
Edit4: TEdit;
Label7: TLabel;
Edit5: TEdit;
Label8: TLabel;
Edit6: TEdit;
Label9: TLabel;
Label10: TLabel;
Edit7: TEdit;
Label11: TLabel;
Edit8: TEdit;
Label12: TLabel;
Edit9: TEdit;
Label13: TLabel;
Edit10: TEdit;
ADOConnection2: TADOConnection;
ADOQuery2: TADOQuery;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form4: TForm4;implementation{$R *.dfm}procedure TForm4.FormCreate(Sender: TObject);
begin
ADOConnection2.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+lujing+';Persist Security Info=False';
adoquery2.Connection:=adoconnection2;
ADOConnection2.LoginPrompt:=false;adoquery2.Close;
adoquery2.SQL.Clear;
ADOQuery2.sql.add('select * from 材料参数 where id="1"');
ADOQuery2.Active:=true;
edit1.Text:=trim(adoquery2.fieldbyname('E11').AsString);
edit2.Text:=trim(adoquery2.fieldbyname('E22').AsString);
edit3.Text:=trim(adoquery2.fieldbyname('E33').AsString);
edit4.Text:=trim(adoquery2.fieldbyname('G12').AsString);
edit5.Text:=trim(adoquery2.fieldbyname('G23').AsString);
edit6.Text:=trim(adoquery2.fieldbyname('G13').AsString);
edit7.Text:=trim(adoquery2.fieldbyname('V12').AsString);
edit8.Text:=trim(adoquery2.fieldbyname('V23').AsString);
edit9.Text:=trim(adoquery2.fieldbyname('V13').AsString);
edit10.Text:=trim(adoquery2.fieldbyname('α').AsString);
end;procedure TForm4.Button1Click(Sender: TObject);
begin
adoquery2.Connection:=adoconnection2;
ADOConnection2.LoginPrompt:=false;adoquery2.Close;
adoquery2.SQL.Clear;
ADOQuery2.sql.add('update 材料参数 set E11=:a,E22=:b,E33=:c,G12=:d,G23=:e,G13=:f,V12=:g,V23=:h,V13=:i,α=:j where id="1"');
adoquery2.Parameters.ParamByName('a').Value:=trim(edit1.Text);
adoquery2.Parameters.ParamByName('b').Value:=trim(edit2.Text);
adoquery2.Parameters.ParamByName('c').Value:=trim(edit3.Text);
adoquery2.Parameters.ParamByName('d').Value:=trim(edit4.Text);
adoquery2.Parameters.ParamByName('e').Value:=trim(edit5.Text);
adoquery2.Parameters.ParamByName('f').Value:=trim(edit6.Text);
adoquery2.Parameters.ParamByName('g').Value:=trim(edit7.Text);
adoquery2.Parameters.ParamByName('h').Value:=trim(edit8.Text);
adoquery2.Parameters.ParamByName('i').Value:=trim(edit9.Text);
adoquery2.Parameters.ParamByName('j').Value:=trim(edit10.Text);ADOQuery2.execsql;adoquery2.Close;
end;end.
但是在定义材料的时候需要用到另外个数据库然后打开定义材料在不加入这个材料数据库之前程序没问题,但是加入了之后运行会提示验证失败而且在一个小测试中发现材料定义界面连接的数据库仍然是主数据库而不是材料数据库,但是单独的把这两个form的代码贴出来重新设计个小程序却没有问题,因此推断是程序的数据结构出现的问题,请求各位大大帮忙
唉,学飞机设计的居然被老师要求做这个,本科时候学的那点编程早忘光了,这几天弄这玩意真头疼
附材料选择界面和材料定义界面的代码(登录界面代码基本上和材料选择界面相同)
unit Unit13;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TForm13 = class(TForm)
RadioGroup1: TRadioGroup;
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations } end;var
Form13: TForm13;
lujing:string;
implementationuses Unit3;{$R *.dfm}procedure TForm13.FormCreate(Sender: TObject);
begin
dangqianwenjianjia:=ExtractFileDir(Application.ExeName);
opendialog1.DefaultExt:='mdb';
opendialog1.Filter:='数据文件|*.mdb';
opendialog1.InitialDir:=trim(dangqianwenjianjia+'\mat\');
opendialog1.OptionsEx:=opendialog1.OptionsEx+[ofexnoplacesbar];
radiogroup1.ItemIndex:=0;
end;procedure TForm13.Button1Click(Sender: TObject);
var
str2:string;
m:integer;
begin
opendialog1.InitialDir:=trim(dangqianwenjianjia+'\mat\');
if opendialog1.Execute then
begin
str2:=ExtractFileName(OpenDialog1.Filename);
m:=pos('.',str2);
edit1.Text:=copy(Str2,1,m-1);
end;
end;procedure TForm13.Button2Click(Sender: TObject);
begin
if radiogroup1.ItemIndex=0 then
begin
try
if fileexists(dangqianwenjianjia+'\mat\'+trim(edit1.Text)+'.mdb') then
begin
application.messagebox('已经存在','提示',64);
edit1.Text:='';
edit1.SetFocus;
end else begin
copyfile(pansichar(dangqianwenjianjia+'\db2.mdb'),pansichar(dangqianwenjianjia+'\mat\'+trim(edit1.Text)+'.mdb'),false);
lujing:=dangqianwenjianjia+'\mat\'+trim(edit1.Text)+'.mdb';
form4.show;
end;
except
showmessage('出错');
end;end else begin
try
if fileexists(dangqianwenjianjia+'\mat\'+trim(edit1.Text)+'.mdb') then
begin
lujing:=dangqianwenjianjia+'\mat\'+trim(edit1.Text)+'.mdb';
form4.show;
end else begin
application.messagebox('打开失败','提示',64);
end;
except
showmessage('出错');
end;
end;
end;end.
材料定义界面
unit Unit3;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, ExtCtrls;type
TForm4 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Label3: TLabel;
Edit2: TEdit;
Label4: TLabel;
Edit3: TEdit;
Label5: TLabel;
Label6: TLabel;
Edit4: TEdit;
Label7: TLabel;
Edit5: TEdit;
Label8: TLabel;
Edit6: TEdit;
Label9: TLabel;
Label10: TLabel;
Edit7: TEdit;
Label11: TLabel;
Edit8: TEdit;
Label12: TLabel;
Edit9: TEdit;
Label13: TLabel;
Edit10: TEdit;
ADOConnection2: TADOConnection;
ADOQuery2: TADOQuery;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form4: TForm4;implementation{$R *.dfm}procedure TForm4.FormCreate(Sender: TObject);
begin
ADOConnection2.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+lujing+';Persist Security Info=False';
adoquery2.Connection:=adoconnection2;
ADOConnection2.LoginPrompt:=false;adoquery2.Close;
adoquery2.SQL.Clear;
ADOQuery2.sql.add('select * from 材料参数 where id="1"');
ADOQuery2.Active:=true;
edit1.Text:=trim(adoquery2.fieldbyname('E11').AsString);
edit2.Text:=trim(adoquery2.fieldbyname('E22').AsString);
edit3.Text:=trim(adoquery2.fieldbyname('E33').AsString);
edit4.Text:=trim(adoquery2.fieldbyname('G12').AsString);
edit5.Text:=trim(adoquery2.fieldbyname('G23').AsString);
edit6.Text:=trim(adoquery2.fieldbyname('G13').AsString);
edit7.Text:=trim(adoquery2.fieldbyname('V12').AsString);
edit8.Text:=trim(adoquery2.fieldbyname('V23').AsString);
edit9.Text:=trim(adoquery2.fieldbyname('V13').AsString);
edit10.Text:=trim(adoquery2.fieldbyname('α').AsString);
end;procedure TForm4.Button1Click(Sender: TObject);
begin
adoquery2.Connection:=adoconnection2;
ADOConnection2.LoginPrompt:=false;adoquery2.Close;
adoquery2.SQL.Clear;
ADOQuery2.sql.add('update 材料参数 set E11=:a,E22=:b,E33=:c,G12=:d,G23=:e,G13=:f,V12=:g,V23=:h,V13=:i,α=:j where id="1"');
adoquery2.Parameters.ParamByName('a').Value:=trim(edit1.Text);
adoquery2.Parameters.ParamByName('b').Value:=trim(edit2.Text);
adoquery2.Parameters.ParamByName('c').Value:=trim(edit3.Text);
adoquery2.Parameters.ParamByName('d').Value:=trim(edit4.Text);
adoquery2.Parameters.ParamByName('e').Value:=trim(edit5.Text);
adoquery2.Parameters.ParamByName('f').Value:=trim(edit6.Text);
adoquery2.Parameters.ParamByName('g').Value:=trim(edit7.Text);
adoquery2.Parameters.ParamByName('h').Value:=trim(edit8.Text);
adoquery2.Parameters.ParamByName('i').Value:=trim(edit9.Text);
adoquery2.Parameters.ParamByName('j').Value:=trim(edit10.Text);ADOQuery2.execsql;adoquery2.Close;
end;end.
ADOConnection2.loginprompt:=False;
self.ADOConnection2.Close;
gDBConn1:='Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=jimaosuanpi;Data Source=\\zy\Data1\MyData.mdb;Persist Security Info=True';
self.ADOConnection2.ConnectionString := gDBConn1;
self.ADOConnection2.Open;
except
//raise;
self.ADOConnection2.Close;
self.ADOConnection2.Free;
application.MessageBox('不能连接到包装机B,可能该包装机已关闭!','提示信息',64);
application.Terminate;
end;
adoquery1.sql.text := 'select * from A in '+QuotedStr('第二个数据库的路径');