DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: x00153976
今日帖子: 4
在线用户: 4
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 sadseal (小新) ★☆☆☆☆ -
盒子活跃会员
2003/12/3 9:53:06
标题:
请各位有做过的大哥帮忙ADO+ACCESS!!急! 浏览:1907
加入我的收藏
楼主: 有个想法,希望高手帮我实现一下,我已经做了很久了,可总是不行,麻烦大家了!!
需求是这样的:
1 要做一个登陆管理系统之前的数据库配置窗口,数据库是ACCESS2000+ADO
2 当然要有比较完整的异常处理机制最好了
3 我自己尝试过用ADO的CONNECTSTRING来改其中的键值,可是没有成功,
大概实现思想:
 连接数据库(ADO。CONNECTSTRING),查找和程序同名的INI文件,把其中的DATASOURCE值
读出来赋予ADO的CONNECTSTRING ,连接数据库!成功!如果不存在INI文件则创建和程序同名
的INI文件。

我的代码见下面!

----------------------------------------------
要努力!加油!争取做个程序员!
作者:
男 sadseal (小新) ★☆☆☆☆ -
盒子活跃会员
2003/12/3 9:54:09
1楼: unit m_datamodule;//datamodule创建时取CONNECTSTRING!!

interface

uses
  SysUtils, Classes, DB, ADODB;

type
  Thldm = class(TDataModule)
    ADOConnection1: TADOConnection;
    procedure DataModuleCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  hldm: Thldm;

implementation
 uses config,inifiles,windows,forms;
{$R *.dfm}

procedure Thldm.DataModuleCreate(Sender: TObject);
var
 ini,iniw:Tinifile;
 state:boolean;
 CString:AnsiString;
 str:Ansistring;
begin
  //打开ini文件,如果不存在则创建与应用程序同名,后缀为.ini的ini配置文件
 ini:=TiniFile.Create(ChangeFileExt(Application.ExeName,'.ini'));
 State:=ini.ReadBool('Database','Connection',false);
 //读取数据库连接是否成功标志,第一次读或者此项不存在时则返回默认值false赋state变量

 if not state then
  try
    F_config:=TF_config.Create(Application);//动态创建数据库服务器配置窗体
    F_config.ShowModal;                     //显示 数据库服务器配置窗体
  except     //抛出异常
    on e:exception do
      application.ShowException(e);   //弹出异常对话框
  end;

 CString:='Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Password="";User ID=admin;data source=';
 str:=ini.ReadString('databse','data source','E:\hltrain\database\train.mdb');
 CString:=CString+str;
 ADOConnection1.Connected:=false;
 ADOConnection1.ConnectionString:=CString;
 try
   ADOConnection1.Connected:=true;//连接数据库
 except
   application.MessageBox('与数据库连接未成功,请重新配置','警告对话框',MB_OK+mb_iconinformation);
   application.Terminate;
 end;
 //打开ini文件,如果不存在则创建与应用程序同名,后缀为.ini的ini配置文件
   iniw:=TiniFile.Create(changefileext(application.ExeName,'.ini'));
   state:=ADOConnection1.Connected;
   iniw.WriteBool('database','connection',state);  //数据库是否连接成功标志写入文件 
end;

end.

----------------------------------------------
要努力!加油!争取做个程序员!
作者:
男 sadseal (小新) ★☆☆☆☆ -
盒子活跃会员
2003/12/3 9:55:49
2楼: 下面是配置窗体的代码:
unit config;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls;

type
  Tf_config = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    OpenDialog1: TOpenDialog;
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  f_config: Tf_config;

implementation
 uses  IniFiles;
{$R *.dfm}

procedure Tf_config.SpeedButton1Click(Sender: TObject);
begin
  OpenDialog1.Filter:='数据库文件(*.mdb)|*.mdb';
  OpenDialog1.Execute;
  edit1.Text:=OpenDialog1.Files.CommaText;
end;

procedure Tf_config.SpeedButton2Click(Sender: TObject);
var
ini:tinifile;
begin
  if edit1.Text=' then
     begin
      ShowMessage('请输入数据库文件的路径');
      Edit1.SetFocus;  //焦点在数据库服务器名输入框
      exit;
     end;
  ini:=TInifile.Create(changefileext(application.ExeName,'.ini'));
  ini.WriteString('database','data source',trim(edit1.Text));
  f_config.Close;
end;

procedure Tf_config.SpeedButton3Click(Sender: TObject);
begin
f_config.Close;
end;

procedure Tf_config.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
end;

end.
----------------------------------------------
要努力!加油!争取做个程序员!
作者:
男 qlj (qlj) ★☆☆☆☆ -
盒子活跃会员
2003/12/3 13:56:01
3楼: 没什么太多意见,告诉你一个好方法,不用去自己定义什么INI文件,ADO本身就支持使用UDL文件连接数据库(和INI文件差不多).你可以这么做:

1.建立一个APP.UDL(或者APP.INI,扩展名不重要,重要的是内容)
2.在里面建立一个段和节,列如:
  [oledb]
  Provider=Microsoft.Jet.OLEDB.4.0;Data Source=APP.mdb;Persist Security Info=False
3.设置ADOCONNECTION的con_nectionstring='File Name=app.ini'

4.你可以首先判断文件是否存在 fileexits('app.ini'),否则调用你的配置窗口

其他的部分你应该可以自己搞定了,

----------------------------------------------
-
作者:
男 sadseal (小新) ★☆☆☆☆ -
盒子活跃会员
2003/12/3 20:51:29
4楼: 谢谢,我自己再看看!今天停点,不爽!
----------------------------------------------
要努力!加油!争取做个程序员!
作者:
男 sadseal (小新) ★☆☆☆☆ -
盒子活跃会员
2003/12/5 9:27:13
5楼: 还是不行,有谁给个好点的办法,完整点的!
----------------------------------------------
要努力!加油!争取做个程序员!
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/12/5 9:41:04
6楼: 一些个人写过经历 仅供参考 如果 不能接受
只能自行解决了
resourcestring
   adocs2= 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;' +
          'Data Source=%s;Mode=Share Deny None;Extended Properties="";' +
          'Jet OLEDB:System database="";Jet OLEDB:Registry Path="";' +
          'Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;' +
          'Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;' +
          'Jet OLEDB:Global Bulk Transaction_s=1;Jet OLEDB:New Database Password="";' +
          'Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;' +
          'Jet OLEDB:Don't Copy Locale on Compact=False;' +
          'Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';
procedure TSDIAppForm.LoadOption;
var
 i,j:integer;
begin
  with Aini do
   begin//1
       LastPathSave:=ReadString('lastpath','pathmdb',');

   cmlianxi1zhao.Items.Clear ;
   cmxuliehao1zhao.Items.Clear ;
   cmwzsk1zhao.Items.Clear ;

   j:=ReadInteger('findstr','lianxi1count',0 );
   for i:=0 to j-1 do
      cmlianxi1zhao.Items.Add(ReadString('findstr',inttostr(i)+'.lianxi1str','));

   j:=ReadInteger('findstr','wzsk1count',0 );
   for i:=0 to j-1 do
      cmwzsk1zhao.Items.Add(ReadString('findstr',inttostr(i)+'.wzsk1str','));

   j:=ReadInteger('findstr','xuliehao1count',0 );
   for i:=0 to j-1 do
      cmxuliehao1zhao.Items.Add(ReadString('findstr',inttostr(i)+'.xuliehao1str','));
   end;//1
end;
procedure TSDIAppForm.SaveOption;
var
 i:integer;
begin
 with Aini do
 begin//1
  try
    WriteString('lastpath','pathmdb',LastPathSave);

    WriteInteger('findstr','lianxi1count',cmlianxi1zhao.Items.Count );
    for i:=0 to cmlianxi1zhao.Items.Count-1 do
      WriteString('findstr',inttostr(i)+'.lianxi1str',cmlianxi1zhao.Items.Strings [i]);

    WriteInteger('findstr','wzsk1count',cmwzsk1zhao.Items.Count );
    for i:=0 to cmwzsk1zhao.Items.Count-1 do
      WriteString('findstr',inttostr(i)+'.wzsk1str',cmwzsk1zhao.Items.Strings [i]);

    WriteInteger('findstr','xuliehao1count',cmxuliehao1zhao.Items.Count );
    for i:=0 to cmxuliehao1zhao.Items.Count-1 do
      WriteString('findstr',inttostr(i)+'.xuliehao1str',cmxuliehao1zhao.Items.Strings [i]);

  finally
    Free ;
  end;
 end;//1
end;

procedure TSDIAppForm.OpenAccess(DBName:string);
begin
    ADOTable1.Close ;
    ADOTable2.Close ;
    ADOTable3.Close ;
    ADOTable1.Connection :=nil;
    ADOTable2.Connection :=nil;
    ADOTable3.Connection :=nil;

    ADOConnection1.ConnectionString :=Format(adocs2,[DBName]);
    ADOTable1.Connection :=ADOConnection1;
    ADOTable1.Open ;

    ADOTable2.Connection :=ADOConnection1;
    ADOTable2.Open ;

    ADOTable3.Connection :=ADOConnection1;
    ADOTable3.Open ;
end;

procedure TSDIAppForm.initwzsk1;
begin
    ADOTable2.TableName :='wzsk1';
    DataSource2.DataSet :=ADOTable2;
    DBGrid2.DataSource :=DataSource2;
    
    dbwangzhiname.DataSource :=DataSource2;
    dbwangzhi.DataSource :=DataSource2;
    dbregistryname.DataSource :=DataSource2;
    dbwzsk1memo.DataSource :=DataSource2;

    dbwangzhiname.DataField :='网址名称';
    dbwangzhi.DataField :='网址';
    dbregistryname.DataField :='注册名';
    dbwzsk1memo.DataField :='备注';
end;

function MyIni:string;
var
 i:integer;
 s:string;
begin
  s:=Application.ExeName;
  delete(s,length(s)-2,3);
  s:=s+'ini';
  Result:=s;
end;

procedure TSDIAppForm.FormShow(Sender: TObject);
var
 s:string;
begin
FIsOpen:=false;
SDIAppForm.Caption :=Application.Title ;
s:=MyIni;
AIni:=TIniFile.Create (s);
LoadOption;
//----------------------------------------
s:=LastPathSave;
initwzsk1;
ADOConnection1.LoginPrompt := false;
if fileexists(s) then
 begin//1
  OpenAccess(s);
  CaptionDisp(s);
  FIsOpen:=true;
 end;//1
end;

procedure TSDIAppForm.FormDestroy(Sender: TObject);
begin
SaveOption;
end;
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/12/5 9:53:21
7楼: a
此帖子包含附件:bios_200312595315.rar 大小:431.0K
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行90.33203毫秒 RSS