在做数据库用控件连接时,发现一个问题。
如果我用BDE连,每次启动时都会要我登陆数据库。
而且我在自己电脑上编的程序,在别人电脑就是因为数据库连接问题
而不能运行
我试过用ADO控件,虽然在启动时可以不用登陆,但移植性还是不好。请问我想用自己写的程序连接数据库,应该如何写?
最好能有可移植性,就是有一个.ini的配置文件
这样我可以在程序作完后,通过改写配置文件就能,访问数据库。
请问如何作。能给出实例吗??
多谢!
如果我用BDE连,每次启动时都会要我登陆数据库。
而且我在自己电脑上编的程序,在别人电脑就是因为数据库连接问题
而不能运行
我试过用ADO控件,虽然在启动时可以不用登陆,但移植性还是不好。请问我想用自己写的程序连接数据库,应该如何写?
最好能有可移植性,就是有一个.ini的配置文件
这样我可以在程序作完后,通过改写配置文件就能,访问数据库。
请问如何作。能给出实例吗??
多谢!
解决方案 »
- devexpress print 使用问题,有经验的朋友帮帮!
- 求教:Delphi中如何判断一个字符串是日期格式
- 把数据转换成标准的EXCEL的时候出现的异常情况
- 请问如何去掉存盘时的备份文件如:~pas,.~dfm等?
- 如何让程序关闭后再自动运行
- dbgrid点击后怎样选中一行,而不是一个单元格?
- 怎么从如下的数组中随机取出各不相同的八位数
- 新手问题,有关文本文件保存
- 继续提问关于LISTVIEW的问题。
- 在win2000中不能进行串行口的读写?
- 再问,如何求出Widechar变量的长度,还有StringToWideChar这个函数怎么用????
- 请问高手如何从ACCESS中通过DELPHI连接数据??????(不同过ODBC连接)
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB,inifiles;type
TFrmLogin = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
PwdEdit: TEdit;
Label3: TLabel;
UserKindBox: TComboBox;
UserNameEdit: TEdit;
ADOQuery: TADOQuery;
Button1: TButton;
Button2: TButton;
ADOConnection: TADOConnection;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
s1:string;
end;var
FrmLogin: TFrmLogin;implementationuses ZhuServer;
var myinifile:TInifile;//uses ZhuServer;{$R *.dfm}procedure TFrmLogin.Button1Click(Sender: TObject);
var
pwd:string[30];
times:integer;
begin
if UserNameEdit.Text=''then
begin
Showmessage('用户名不能为空!');
exit;
end;
//username:=trim(UserNameEdit.Text); FrmLogin.ADOQuery.SQL.Add('select * from Priority where username='''+UserNameEdit.Text+''' AND kinds='''+UserKindBox.Text+'''');
try
FrmLogin.ADOQuery.Open;
except
Showmessage('数据库打开失败!');
end;
pwd:=trim(FrmLogin.ADOQuery.FieldByName('password').AsString);
//s1:=trim(UserNameEdit.Text);
//Showmessage(s1+pwd);
s1:=trim(UserKindBox.Text);
if pwd<>trim(PwdEdit.Text) then
begin
Showmessage('登陆失败!');
FrmLogin.ADOQuery.Close;
exit;
end
else
begin
Showmessage('登陆成功!'+s1);
//FrmLogin.Close();
FrmLogin.Hide();
FrmLogin.ADOQuery.Close();
MainForm.ShowModal();
end;
//MainForm.Nqiantai.Enabled:=false;end;procedure TFrmLogin.Button2Click(Sender: TObject);
begin
FrmLogin.Close();
end;procedure TFrmLogin.FormCreate(Sender: TObject);
var filename,server,ds:string;
begin
filename:=ExtractFilePath(Paramstr (0))+'program.ini';
myinifile:=Tinifile.Create(filename);
ds:=myinifile.ReadString('DataBase','DataBase','');
server:=myinifile.ReadString('DataBase','DBServer','');
AdoConnection.connectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog='+ds+';Data Source='+server;
ADOQuery.Connection:=AdoConnection;
end;end.这是我写的连接,
dbset的内容为
[DataBase]
DBServer=hawk
DataBase=Carte
但是运行结果为数据库连接失败,溢出,找不到Priority。
请问哪里有问题?怎么改?end.
SysUtils, Classes, DB, ADODB, ADOConEd, Inifiles, Dialogs;type
TDataModule12 = class(TDataModule)
ADOConnection1: TADOConnection;
procedure DataModuleCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
DataModule12: TDataModule12;implementationuses Unit1;
var myinifile:TInifile;
{$R *.dfm}procedure TDataModule12.DataModuleCreate(Sender: TObject);
var filename:string;
db,server:string;
begin
filename:=Extractfilepath(paramstr(0))+'DBset.ini';
myinifile:=TInifile.Create(filename);
db:=myinifile.ReadString('数据库配置','数据库名','customer');
server:=myinifile.ReadString('数据库配置','数据库服务器名','HYS/HYS');
datamodule12.ADOConnection1.Close; //Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=customer;Data Source=HYS\HYS
datamodule12.ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog='+db+';Data Source='+server;
try
datamodule12.ADOConnection1.Open;
except
showmessage('无法连接到指定的数据库.可能是网络不通或数据库连接文件配置错误!');
end;
end;end.
用配置文件改ADOConnection的ConnectionString属性!
这样就一切OK,纯绿色软件,随拷随用!
不过,一定要记住,连接字符串中的数据库路径使用相对路径!