一个CS程序里,因为经常要变动SQL的服务器地址,把服务器地址及用户名存在INI文件里,然后读取出来.这样能不能用数据模块实现,还要用其它方法,我刚开始接触没经验,请帮忙,谢!
解决方案 »
- Delphi导出到Word报表的问题
- 要实现这样一功能 有一DBgrid,这时修改了数据库中某一记录的值,要求同步刷新出来,但没这么简单,进来细说
- DELPHI 与CAD调用图纸?
- 请问用什么报表软件才能制成如下的报表?重酬!!!
- 求救!关于DELPHI报表问题!!!
- sql 中两表数据合并,非高手莫进!
- 呵~~我中大奖了,大伙一起高兴吧哈哈!!!!!!!!!!!!!!
- file not found 'Regist.dcu'
- 如何Delphi在延时,不使用Application.ProcessMessage;
- 在大富翁没人给我答案的问题,我把我仅有的95分全部给啦
- 菜鸟求救,不在同一个局域网内的两台机器,pc-1(adsl-1)想访问pc-2(adsl-2)的sql-server,应如何实现?不胜感激~~~~~~~~~
- 急!如何得到查询结果中指定的哪条记录(在ACCESS 数据库中)
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, bsSkinCtrls,inifiles, StdCtrls, Mask, bsSkinBoxCtrls, BusinessSkinForm;
type
TfrmDBini = class(TForm)
bsSkinStdLabel2: TbsSkinStdLabel;
bsSkinStdLabel1: TbsSkinStdLabel;
dn: TbsSkinStdLabel;
bsSkinButton1: TbsSkinButton;
bsSkinButton2: TbsSkinButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
bsBusinessSkinForm1: TbsBusinessSkinForm;
procedure bsSkinButton1Click(Sender: TObject);
procedure bsSkinButton2Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
logined,relogin:boolean;
{ Public declarations }
end;var
//DB_DNS,DB_User,DB_Password : string ;
//DBFile : Tinifile ;
frmDBini: TfrmDBini;implementation
uses umain,mycommon, Udm;
{$R *.dfm}procedure TfrmDBini.bsSkinButton1Click(Sender: TObject);
var
DBFile : Tinifile ;
begin
if trim(edit1.Text) = '' then
begin
messagebox(application.Handle,'服务器名或IP不能为空!','提示',mb_ok+mb_iconinformation);
edit1.SetFocus;
exit ;
end ;
if trim(edit2.Text) = '' then
begin
messagebox(application.Handle,'用户名不能为空!','提示',mb_ok+mb_iconinformation);
edit2.SetFocus;
exit ;
end ;
if trim(edit3.Text) = '' then
begin
messagebox(application.Handle,'密码不能为空!','提示',mb_ok+mb_iconinformation);
edit3.SetFocus;
exit ;
end;
DBFile := tinifile.Create(extractfilepath(application.ExeName)+ 'DBConn.ini');
DBFile.writestring('smxycsd','DB_DNS',trim(edit1.Text));
DBFile.writestring('smxycsd','DB_User',trim(edit2.Text));
DBFile.writestring('smxycsd','DB_Password',trim(edit3.Text));
//DBFile.writestring('smxycsd','DB_Password',EncryStrHex(Edit3.Text, Edit3.Text));
DBFile.Free;
close;
end;procedure TfrmDBini.bsSkinButton2Click(Sender: TObject);
begin
close;
end;procedure TfrmDBini.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key=#13) or (key=#9) then Edit2.SetFocus;
end;procedure TfrmDBini.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if (Key=#13) or (key=#9) then Edit3.SetFocus;
end;procedure TfrmDBini.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if (Key=#13) or (key=#9) then bsSkinButton1Click(nil);
end;procedure TfrmDBini.FormShow(Sender: TObject);
var
DBFile : Tinifile ;
begin
DBFile := tinifile.Create(extractfilepath(application.ExeName)+ 'DBConn.ini');
edit1.Text := DBFile.ReadString('smxycsd','DB_DNS','smxycsd');
edit2.Text := DBFile.ReadString('smxycsd','DB_User','sa');
//edit3.Text :=DecryStr(DBFile.ReadString('smxycsd','DB_Password','123456789'), DBFile.ReadString('smxycsd','DB_Password','123456789')); //解密
DBFile.ReadString('smxycsd','DB_Password','123456789');
DBFile.Free;
Edit1.SetFocus;
end;end.program smxycsd;uses
Forms,
windows,
inifiles,
SysUtils,
Umain in 'Umain.pas' {Frmmain},
Udm in 'Udm.pas' {DM: TDataModule},
Ulogin in 'Ulogin.pas' {Frmlogin},
mycommon in 'mycommon.pas',
UDBini in 'UDBini.pas' {frmDBini},
Ustudent in 'Ustudent.pas' {Frmstudent},
Uzhuanyue in 'Uzhuanyue.pas' {Frmzhuanyue},
Uclass in 'Uclass.pas' {Frmclass},
Ukaishileixing in 'Ukaishileixing.pas' {Frmkaishileixing},
Ukecheng in 'Ukecheng.pas' {Frmkecheng},
Ustudentgrad in 'Ustudentgrad.pas' {Frmstudentgrad},
Uoperator in 'Uoperator.pas' {Frmoperator},
Uupdatapw in 'Uupdatapw.pas' {frmupdatapw};{$R *.res}
var
DBFile : Tinifile ;
DB_DNS,DB_User,DB_Password : string ;
FrmDbini : TfrmDBini ;
begin
Application.Initialize;
Application.Title :='三明学院计算机系学生学籍成绩管理系统1.0';
Application.CreateForm(TFrmmain, Frmmain);
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmoperator, Frmoperator);
Application.CreateForm(Tfrmupdatapw, frmupdatapw);
DBFile := tinifile.Create(extractfilepath(application.ExeName)+ 'DBConn.ini');
DB_DNS := DBFile.ReadString('smxycsd','DB_DNS','smxycsd');
DB_User := DBFile.ReadString('smxycsd','DB_User','sa');
//DB_Password := DecryStr(DBFile.ReadString('smxycsd','DB_Password','123456789'), DBFile.ReadString('smxycsd','DB_Password','123456789')); //解密
DB_Password :=DBFile.ReadString('smxycsd','DB_Password','123456789');
DBFile.Free;
DM.ADO.ConnectionString :='Provider=SQLOLEDB.1;Password=' +
DB_Password + ';Persist Security Info=True;User ID=' +
DB_User + ';Initial Catalog=smxycsd;Data Source=' + DB_DNS ;
try
DM.ADO.Connected := true ;
except
end;
while not DM.ADO.Connected do
begin
if MessageBox(Application.Handle,'联接数据库服务器失败,是否重新配置连接?','提示',MB_YESNO + mb_iconinformation) = 7 then
break
else
begin
FrmDBini := TFrmDBini.Create(nil);
FrmDBini.ShowModal;
FrmDBini.Free;
DBFile := tinifile.Create(extractfilepath(application.ExeName)+ 'DBConn.ini');
DB_DNS := DBFile.ReadString('smxycsd','DB_DNS','smxycsd');
DB_User := DBFile.ReadString('smxycsd','DB_User','sa');
//DB_Password := DecryStr(DBFile.ReadString('smxycsd','DB_Password','123456789'), DBFile.ReadString('smxycsd','DB_Password','123456789')); //解密
DB_Password := DBFile.ReadString('smxycsd','DB_Password','123456789');
DBFile.Free;
DM.ADO.ConnectionString := 'Provider=MSDASQL.1;Password=' +
DB_Password + ';Persist Security Info=True;User ID=' +
DB_User + ';Initial Catalog=smxycsd;Data Source=' + DB_DNS ;
try
DM.ADO.Connected := true ; except end;
end;
end;
if DM.ADO.Connected then
begin
Application.CreateForm(TFrmlogin, Frmlogin);
Frmlogin.ShowModal;
if Frmlogin.logined then
Application.Run;
end ;
end.
[Dbinfo]
Host='主机名'
User='用户名'(这里用sa)
Passwd='密码'
Database='数据库名'在程序中添加如下代码:
var
dbini: TIniFile;
Host: string;
User: string;
Passwd: string;
database: string;
begin
dbini := TIniFile.Create('.\database.ini');
Host := dbini.ReadString('Dbinfo','Host','127.0.0.1');
User := dbini.ReadString('Dbinfo','User','sa');
Passwd:= dbini.ReadString('Dbinfo','Passwd', '');
Database := dbini.ReadString('Dbinfo','Database','');
dbini.Free; ADOConn.ConnectionString := 'Provider=SQLOLEDB.1;Password=' + Passwd +
';Persist Security Info=True;User ID=' + User +
';Initial Catalog=' + database +
';Data Source=' + Host +
';Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=' + Host +
';Use Encryption for Data=False;Tag with column collation when possible=False';
ADOConn.Connected := True;
end;就可以动态链接服务器上数据库了
然后生成STRING 赋给ADOConnection 如果你可以自动获得的话 写在数据模块的创建事件里也不错
var
Database1:TDataBase;
begin
Database1.DatabaseName:='Test';
Database1.DriverName:='MSSQL';
LoginPrompt:=False;
with Database1.Params do
begin
add('DATABASE NAME='+DatabaseName);
add('SERVER NAME='+ServerName);
add('USER NAME='+UserName);
add('OPEN MODE=READ/WRITE');
add('SCHEMA CACHE SIZE=8');
add('BLOB EDIT LOGGING=');
add('LANGDRIVER=');
add('SQLQRYMODE=');
add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT');
add('DATE MODE=0');
add('SCHEMA CACHE TIME=-1');
add('MAX QUERY TIME=300');
add('MAX ROWS=-1');
add('BATCH COUNT=200');
add('ENABLE SCHEMA CACHE=FALSE');
add('SCHEMA CACHE DIR=');
add('HOST NAME=');
add('APPLICATION NAME=');
add('NATIONAL BCD=FALSE');
add('TDS PACKET SIZE=4096');
add('BLOB to CACHE=64');
add('BLOB SIZE=32');
add('PASSWORD=' +PassWord);
end;
try
Database1.Connected:=true;
Query1.DatabaseName='Test';
Except
Application.MessageBox('数据连接错误','错误',MB_OK+MB_CONNERROR);
end;
end;
end.