如题:搞了个图形界面。路径由用户自己选择。然后将路径保存到一个字符串myconnstr,然后对各窗口的adotable和adoquery动态连接数据库(根据myconnstr的指定),但是不知道为什么总出现一个错误。access violation at address ,我不知道这是为什么 代码是:
myconnstr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+datalink.Edit1.Text+''; accountmanagement.adotable1.ConnectionString:=myconnstr;
accountmanagement.adotable1.TableName:='用户登录';
accountmanagement.adotable1.Active:=true;
accountmanagement.datasource1.DataSet:=accountmanagement.adotable1; accountmanagement.dbgrid1.DataSource:=accountmanagement.datasource1;
accountmanagement.DBEdit1.DataSource:=accountmanagement.datasource1;
accountmanagement.DBEdit2.DataSource:=accountmanagement.datasource1;
accountmanagement.DBEdit3.DataSource:=accountmanagement.datasource1; accountmanagement.DBEdit1.DataField:='部门号';
accountmanagement.DBEdit2.DataField:='员工号';
accountmanagement.DBEdit3.DataField:='姓名'; accountmanagement是我的另外一个窗体名。datalink是用户自己设置路径的图形窗体名字。我就是想在datalink里面直接use
accountmanagement单元,然后把accountmanagement的各个adotable连接设置好。且每次出错都显示在
accountmanagement.adotable1.ConnectionString:=myconnstr; 这条语句上,这是为什么呢
小弟望各位高手指点,感激涕零。此帖于2007年7月14日早上揭贴。谢谢大家
myconnstr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+datalink.Edit1.Text+''; accountmanagement.adotable1.ConnectionString:=myconnstr;
accountmanagement.adotable1.TableName:='用户登录';
accountmanagement.adotable1.Active:=true;
accountmanagement.datasource1.DataSet:=accountmanagement.adotable1; accountmanagement.dbgrid1.DataSource:=accountmanagement.datasource1;
accountmanagement.DBEdit1.DataSource:=accountmanagement.datasource1;
accountmanagement.DBEdit2.DataSource:=accountmanagement.datasource1;
accountmanagement.DBEdit3.DataSource:=accountmanagement.datasource1; accountmanagement.DBEdit1.DataField:='部门号';
accountmanagement.DBEdit2.DataField:='员工号';
accountmanagement.DBEdit3.DataField:='姓名'; accountmanagement是我的另外一个窗体名。datalink是用户自己设置路径的图形窗体名字。我就是想在datalink里面直接use
accountmanagement单元,然后把accountmanagement的各个adotable连接设置好。且每次出错都显示在
accountmanagement.adotable1.ConnectionString:=myconnstr; 这条语句上,这是为什么呢
小弟望各位高手指点,感激涕零。此帖于2007年7月14日早上揭贴。谢谢大家
解决方案 »
- 哪位兄弟姐妹,有"Delphi5 开发人员指南"卖兄弟一本
- 比较大的应用程序怎么封装?
- 能不能通过SendMessage来获得TStringGrid的Cell的文本
- hook(钩子) 的DLL 文件如何使用
- easyscan保存的图片格式是TIF的怎样将图片在保存时转换成jpg或bmp各式的
- 如何扑捉即将关闭消息。
- 怎么样让listbox中的内容可以让用户随便的改变次序?
- 高手看一下,access violation错误{form1.DBGrideh1.ColumnCount - 1}
- 请务必进来看看!!!一个listview的问题!
- 有关DateTimePicker1的问题???
- DevExpress能实现我想要的功能吗?
- 先来行得分:MSSQL日期查询
1。myconnstr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='''+datalink.Edit1.Text+'''';2。还有 myconnstr 是申明在哪个单元里?
accountmanagement or datalink?如果是前者的话,那有没有引用datalink这个单元呢?3。看了LZ最后的发言,是不是accountmanagement 还没有生成啊????
accountmanagement.adotable1.ConnectionString这个属性可以取到么?
调用 accountmanagement.adotable1
accountmanagement.adotable1.ConnectionString:=myconnstr;ShowMessage(accountmanagement.Name);
ShowMessage(accountmanagement.adotable1.Name);
ShowMessage(accountmanagement.adotable1.ConnectionString);
你看那个showmessage会出错呢
accountmanagement.adotable1.ConnectionString:=myconnstr;
accountmanagement.adotable1.TableName:='用户登录';
accountmanagement.adotable1.Active:=true;
accountmanagement.datasource1.DataSet:=accountmanagement.adotable1; ShowMessage(accountmanagement.Name);
ShowMessage(accountmanagement.adotable1.Name);
ShowMessage(accountmanagement.adotable1.ConnectionString);程序只在第一条语句,即accountmanagement.adotable1.ConnectionString:=myconnstr;停止根本不会showmessage出来了
ShowMessage(accountmanagement.Name);
ShowMessage(accountmanagement.adotable1.Name);
accountmanagement.adotable1.ConnectionString:=myconnstr;程序在第一条语句即ShowMessage(accountmanagement.Name);出错
2。问题我好象有点眉目了,好象是datalink窗体根本无法调用 accountmanagement。和数据库路径无关。accountmanagemen是我在设计程序是手动创建的窗体。如果真是楼上那位兄弟说的,没有创建accountmanagemen,那是为什么呢?我过去已经手动创建了啊。datalink是我后来由于需要加上去,的确无法调用accountmanagement,而我在datalink中已经uses了accountmanagement对应的单元。是不是要在哪里加上accountmanagement.create(self)才行呢。我是初学者,望大家多多指点,在线等
ADOConed程序中设置ADO数据库连接
Connection.Close;
Connection.ConnectionString := ConnectionString.Text;
if EditConnectionString(Connection) then
begin
ConnectionString.Text := Connection.ConnectionString;
ConnectionStringClick(Sender);
end;
中,accountmanagemen是MDI子窗体。
datalink里的accountmanagement这个变量。
accountmanagement.adotable1.ConnectionString:=myconnstr;
之后的那段,都放进accountmanagement窗体的OnCreate里面,在accountmanagement的implimentation段中 uses DataLink单元。
这样可以避免accountmanagement的创建时机问题(因为DataLink是先创建并显示的)。
另一种方法是我上面提到的,在accountmanagement窗口内,书写上述代码,并引用DataLink单元,这样从逻辑上,代码只在你需要的时候才会执行,比较通畅。
或者说你打算在什么时候创建并显示accountmanagement窗口?
accountmanagement:=Taccountmanagement.Create(MainForm)应当在你打算显示它的正常位置执行
1。程序一开始显示datalink,它的功能是提供界面然用户设置数据库路径,路径保存到一个变量
2。登录界面。
3。主窗体
4。accountmanagement,它是主窗体的一个子窗体
如果密码一类的不想写到配置文件里,可以在accountmanagement显示前,调用datalink窗体,让用户输入密码,然后传会给accountmanagement这个就好了
1.确保Project属性中,DataLink是在AutoCreate列表的第一个。其中定义myconnstr并初始化它为 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+datalink.Edit1.Text+'';最好是在按下确定之后。
2. 显示登录界面,这里有点疑问,登录时不需要访问数据库验证密码吗?
3. 显示主窗体。如果需要在主窗体显示的同时就把accountmanagement显示出来,那么在主窗体的OnShow中加入 Application.CreateForm(Taccountmanagement, accountmanagement); accountmanagement.Show。如果需要在主窗体显示之后靠菜单激活accountmanagement,那么上面两句就写在菜单事件中。
4. accountmanagement窗体的Implimentation段中uses Unit25(Datalink),然后在accountmanagement的OnCreate事件中添加accountmanagement.adotable1.ConnectionString:=unit25.myconnstr;及其后的语句,注意myConnStr的引用最好加上定义域unit25