主窗体:uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, gddata, StdCtrls, Grids, DBGrids, DB, ADODB, Menus;
type
  TForm1 = class(TForm)   
    procedure FormCreate(Sender: TObject);
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation
uses gdlogin;
{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var frmlog: tform2;
begin
  frmlog := tform2.Create(Application); 
  if frmlog.ShowModal = mrOK then self.show 
  else Application.Terminate; 
end;
end.
登陆窗体
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, gddata, DB, ADODB, StdCtrls, Buttons;
type
  TForm2 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    ADOQuery1: TADOQuery;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form2: TForm2;
implementation
uses gdmain;
{$R *.dfm}
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
DataModule2.ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Password=66666;Persist Security Info=False;User ID=130001;Initial Catalog=gdkjbb;Data Source=10.20.20.21';
dataModule2.ADOConnection1.Connected := true;
  if DataModule2.ADOConnection1.Connected then begin
   ****************省略
  end;
end;
end.
**************
数据模块窗体
unit gddata;
interface
uses
  SysUtils, Classes, DB, ADODB;
type
  TDataModule2 = class(TDataModule)
    ADOConnection1: TADOConnection;
    procedure DataModuleCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  DataModule2: TDataModule2;
implementation
{$R *.dfm}
end.****************
问题出现在登陆窗口的TForm2.BitBtn1Click的开始,即DataModule2.ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Password=66666;Persist Security Info=False;User ID=130001;Initial Catalog=gdkjbb;Data Source=10.20.20.21',出错提示为:
工程GDKJBB.EXE检测致电错误类Eaccessvidation.
它的连接绝对没错,出现该问题请问如何解决?

解决方案 »

  1.   

    Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=YY_ALELOGISTICS;Data Source=ZHAI
    应该不难,设置断点试试
      

  2.   

    其实不用adoconnection:=true
    query open时自动就打开了
      

  3.   

    谢谢menggirl(看天上浮云,胜似闲庭信步) 的关注。
    联接串应没问题,如果把ADOConnection1从数据模块窗体中移到登陆窗体,再设置ADOConnection1的ConnectionString就不会出现问题。主要是为了共享ADOConnection1联接,不然也没有必要将其放在数据据块窗体。
      

  4.   

    给出工程文件,
    看看窗口创建的一些信息!
    如果把ADOConnection1从数据模块窗体中移到登陆窗体,再设置ADOConnection1的ConnectionString就不会出现问题的话!
    那么就要考虑是否是DataModule2这个时候有没有创建了?
      

  5.   

    你要在关闭程序时关掉ADOConnection1.
      

  6.   

    在数据库连接窗体中设置数据连接,在form2中用数据表连接控件指向该连接就行
      

  7.   

    谢谢hellowbh(OneBowie)与nicolas2003(落花含情,流水有意)的关注 。
    以下为工程文件
    program gdkjbb;
    uses
      Forms,
      gdmain in 'gdmain.pas' {Form1},
      gddata in 'gddata.pas' {DataModule2: TDataModule},
      gdlogin in 'gdlogin.pas' {Form2};
    {$R *.res}
    begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.CreateForm(TDataModule2, DataModule2);
      Application.CreateForm(TForm2, Form2);
      Application.Run;
    end.
      

  8.   

    谢谢 yixi88的关注:
    之所以在登陆窗体设置联接属性是因为要根据登陆人员输入的操作员号、密码及服务器ip建立与服务器的连接。
      

  9.   

    在 点击 button连接的时候 
      Application.CreateForm(TDataModule2, DataModule2);
      

  10.   

    在 DataModuleCreate(Sender: TObject);
    的时候设置连接的属性
    ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Password=66666;Persist Security Info=False;User ID=130001;Initial Catalog=gdkjbb;Data Source=10.20.20.21'
    try
      ADOConnection1.Connected:=true;
    exept
      //连接失败提示
    end;
      

  11.   

    你的DataModule2应先于TForm1建立。
      

  12.   

    Application.Initialize;
      Application.CreateForm(TDataModule2, DataModule2);
      Application.CreateForm(TForm1, Form1);
      Application.CreateForm(TForm2, Form2);
      Application.Run;
      

  13.   

    pandarus(Delphi/Asp里流浪的云)  说的对 hehe^^以后要记住哦,以前相关帖子很多
      

  14.   

    同上DataModule2首先建立,
    另外既然你在工程文件里已经建立里Tform2,
    那在TForm1.FormCreate中又有
    frmlog := tform2.Create(Application); 
      
      
      

  15.   

    谢谢baguijin999的回复,按照你的回答去做,问题解决了。这实际上是工程文件上的一个命令执行顺序的问题,将:
    Application.CreateForm(TForm1, Form1);
    Application.CreateForm(TDataModule2, DataModule2);
    Application.CreateForm(TForm2, Form2);
    改为 :
    Application.CreateForm(TDataModule2, DataModule2);
    Application.CreateForm(TForm1, Form1);
    Application.CreateForm(TForm2, Form2);
    也可以。对了,还要问各位一个问题,怎么才能把我这300分分给大家?谢谢。
      

  16.   

    我的意见分了这一百分就可以了 hehe^^