主数据库是在程序打开时设置的程序大部分数据与这个数据库相关
但是在定义材料的时候需要用到另外个数据库然后打开定义材料在不加入这个材料数据库之前程序没问题,但是加入了之后运行会提示验证失败而且在一个小测试中发现材料定义界面连接的数据库仍然是主数据库而不是材料数据库,但是单独的把这两个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.

解决方案 »

  1.   

    try 
      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; 
      

  2.   

    其实你完全可以通过一个adoconnection去操作两个数据库,那就是跨库查询,比如adoconnection连接的是TableA,你现在想查询TableB的A表,那么你可以这样写
    adoquery1.sql.text := 'select * from A in '+QuotedStr('第二个数据库的路径');