我作了一个登陆界面,登陆的内容是仿一个例子作的。例子的代码是
………………
implementationuses Main, PublicUse;{$R *.dfm}procedure TFrmAdoconnect.SpeedButton4Click(Sender: TObject);
var lv_str_connect:string;
begin
  lv_str_connect:='Provider=SQLOLEDB.1;Password=';
  lv_str_connect:=lv_str_connect+trim(edit4.Text);
  lv_str_connect:=lv_str_connect+';Persist Security Info=True;User ID=';
  lv_str_connect:=lv_str_connect+trim(edit3.Text);
  lv_str_connect:=lv_str_connect+';Initial Catalog=';
  lv_str_connect:=lv_str_connect+trim(edit2.Text);
  lv_str_connect:=lv_str_connect+';Data Source=';
  lv_str_connect:=lv_str_connect+trim(edit1.Text);   //连接字符串赋值
  frmmain.adoconnection1.Connected :=false;
  frmmain.adoconnection1.ConnectionString:=lv_str_connect;
  try
    frmmain.adoconnection1.Connected :=true;     //连接数据库
    gv_str_dataip:=trim(edit1.Text);
    gv_str_dataname:=trim(edit2.Text);
    gv_str_datauser:=trim(edit3.Text);
    gv_str_datapwd:=trim(edit4.Text);
    {WriteRegist('dataip',edit1.Text);
    WriteRegist('dataname',edit2.Text);
    WriteRegist('datauser',edit3.Text);
    WriteRegist('datapwd',edit4.Text); }
    application.MessageBox('数据库连接成功','提示',MB_OK + MB_SYSTEMMODAL);
    close;
  except
     application.MessageBox('数据库连接未成功','提示',MB_OK+ MB_ICONQUESTION+ MB_SYSTEMMODAL);
  end;
……………………
我模仿的例子作的代码是
………………
implementation
uses  unit2,main;
{$R *.dfm}procedure TForm24.Button1Click(Sender: TObject);
begin
  close;
end;procedure TForm24.BitBtn1Click(Sender: TObject);
var  lv_str_connect:string;
begin
  lv_str_connect:='Provider=SQLOLEDB.1;Password=';
  lv_str_connect:=lv_str_connect+trim(edit4.Text);
  lv_str_connect:=lv_str_connect+';Persist Security Info=True;User ID=';
  lv_str_connect:=lv_str_connect+trim(edit3.Text);
  lv_str_connect:=lv_str_connect+';Initial Catalog=';
  lv_str_connect:=lv_str_connect+trim(edit2.Text);
  lv_str_connect:=lv_str_connect+';Data Source=';
  lv_str_connect:=lv_str_connect+trim(edit1.Text);   //连接字符串赋值
  form10.ADOConnection1.Connected :=false;
  form10.ADOConnection1.ConnectionString:=lv_str_connect;
  try
    form10.ADOConnection1.Connected :=true;     //连接数据库
    gv_str_dataip:=trim(edit1.Text);
    gv_str_dataname:=trim(edit2.Text);
    gv_str_datauser:=trim(edit3.Text);
    gv_str_datapwd:=trim(edit4.Text);
    application.MessageBox('数据库连接成功','提示',MB_OK + MB_SYSTEMMODAL);
    close;
  except
     application.MessageBox('数据库连接未成功','提示',MB_OK+ MB_ICONQUESTION+ MB_SYSTEMMODAL);
  end;
end;
……………………
一运行就告诉我
Access violation at address 004f7941 in module'project2.exe'.Read of address 000002F0
请问这是怎么回事啊。请各位帮帮小弟我,先谢谢了。

解决方案 »

  1.   

    出错应该是这里,你的form10还未创建就调用,
     form10.ADOConnection1.Connected :=false; 改为:
     form10 := Tform10.Create(self);      // 先建立form10
     form10.ADOConnection1.Connected :=false;
      

  2.   

    Form10所在的单元是多少?例子中Adoconnecttion1放在了Frmmain上,所以是uses main;
    不会Form10所对应的unit 为main吧。
      

  3.   

    同意。
    delphi在创建变量时不会自动调用create函数。所以你必须在使用对象之前
    确保该对象已经存在。例如:
    frmA:TForm;
    这一句只是标明了这样一个变量,实际的frmA在内存中是不是存在的。所以你必须先执行这样一行语句:
    frmA:=TForm.create(nil); //一般nil或者self都可以;
    这样frmA才是真正的被创建了。才可以使用。
    一般来说如果你访问不存在的对象的话就会出现:Access violation 的错误。
      

  4.   

    不用这么复杂了,如果一个登陆程序就要这么多的代码那整个程序岂不是海量?
    好好利用ADO控件;用ADOQUERY加个SQL语句就行了