下载了一个远程连接数据库源码,其中登录窗口中放置了两个控件
Database1属性:
AliasName:posserver
DatabaseName:pos
USER NAME=sa
PASSWORD=
Query1属性:DatabaseName:pos
初始化代码如下:
FileHandle := FileOpen(ExtractFilePath(Application.Exename) + 'Link.ini', fmOpenWrite or fmShareDenyNone);
if FileHandle > 0 then
FileClose(FileHandle)
else
begin
FileClose(FileHandle);
Link := Tinifile.Create(ExtractFilePath(Paramstr(0)) + 'Link.ini');
Link.WriteString('POS', 'SERVER NAME', '127.0.0.1');
Link.WriteString('POS', 'USER NAME', 'sa');
Link.WriteString('POS', 'PASSWORD', '');
Link.WriteString('SERVER', 'DATABASE NAME', 'server');
Link.WriteString('SERVER', 'SERVER NAME', 'server');
Link.WriteString('SERVER', 'USER NAME', 'sa');
Link.WriteString('SERVER', 'PASSWORD', '');
Link.Destroy;
end;
try
Database1.Connected := false;
Link := Tinifile.Create(ExtractFilePath(Paramstr(0)) + 'Link.ini');
ch := 'pos';
if AliasEditor1.Exists(ch) = false then
AliasEditor1.Add(ch, 'MSSQL', Memo1.Lines);
Database1.AliasName := 'pos';
Database1.DatabaseName := 'pos';
Database1.Params.Text := 'DATABASE NAME=master';
Database1.Params.Add('SERVER NAME=' + Link.Readstring('POS', 'SERVER NAME', '127.0.0.1'));
Database1.Params.Add('USER NAME=' + Link.Readstring('POS', 'USER NAME', 'sa'));
Database1.Params.Add('PASSWORD=' + Link.Readstring('POS', 'PASSWORD', ''));
Link.Destroy;
Database1.Connected := true;
try
Query1.Close;
Query1.SQL.Text := 'use pos';
Query1.ExecSQL;
except
try
Query1.Close;
Query1.SQL.Text := 'CREATE DATABASE [POS] ON (NAME = N' + #39 + 'POS_DATA' + #39 +
',FILENAME = N' + #39 + ExtractFilePath(Application.Exename) + 'POS_DATA.MDF' + #39 +
', SIZE=10,FILEGROWTH=10%) LOG ON (NAME =N' + #39 + 'POS_LOG' + #39 + ', FILENAME =N' +
#39 + ExtractFilePath(Application.Exename) + 'POS_LOG.LDF' + #39 + ',SIZE=2, FILEGROWTH=10%)' + #13 + 'COLLATE CHINESE_PRC_CI_AS';
Query1.ExecSQL;
ResToFile('DatBase', 'FILE1', ExtractFilePath(Application.Exename) + 'LXF.DAT');
Query1.close;
Query1.SQL.Clear;
Query1.SQL.Add('RESTORE FILELISTONLY FROM DISK = ' + #39 + ExtractFilePath(Application.Exename) + 'LXF.DAT' + #39);
Query1.ExecSQL;
Query1.close;
Query1.SQL.Clear;
Query1.SQL.Add('RESTORE DATABASE POS FROM DISK=' + #39 + ExtractFilePath(Application.Exename) + 'LXF.DAT' + #39 + ' WITH REPLACE,');
Query1.SQL.Add('MOVE ' + #39 + 'POS_DATA' + #39 + ' TO ' + #39 + ExtractFilePath(Application.Exename) + 'POS_DATA.MDF' + #39 + ',');
Query1.SQL.Add('MOVE ' + #39 + 'POS_LOG' + #39 + ' TO ' + #39 + ExtractFilePath(Application.Exename) + 'POS_LOG.LDF' + #39);
Query1.ExecSQL;
except
end;
end;
Database1.Connected := false;
Link := Tinifile.Create(ExtractFilePath(Paramstr(0)) + 'Link.ini');
Database1.AliasName := 'pos';
Database1.DatabaseName := 'pos';
Database1.Params.Text := 'DATABASE NAME=pos';
Database1.Params.Add('SERVER NAME=' + Link.Readstring('POS', 'SERVER NAME', '127.0.0.1'));
Database1.Params.Add('USER NAME=' + Link.Readstring('POS', 'USER NAME', 'sa'));
Database1.Params.Add('PASSWORD=' + Link.Readstring('POS', 'PASSWORD', ''));
Link.Destroy;
Database1.Connected := true;
Query1.close;
Query1.sql.clear;
Query1.sql.add('select * from mdda');
Query1.Open;
except
Application.MessageBox('连接数据库失败,请检查数据库是否启动' + #13 + '或配置文件Link.ini是否正确.', '错误', MB_OK + MB_ICONERROR);
Application.Terminate;
end;
运行提示:
连接数据库失败,请检查数据库是否启动' .......
想请教高手几个问题:
1、我已经在SQL2000附加了server数据库文件,为什么还提示连接失败?
2、上面代码的意思不是说如果连接不了远程数据库,就建立本地POS数据库文件吗?怎么也创建不了?
Database1属性:
AliasName:posserver
DatabaseName:pos
USER NAME=sa
PASSWORD=
Query1属性:DatabaseName:pos
初始化代码如下:
FileHandle := FileOpen(ExtractFilePath(Application.Exename) + 'Link.ini', fmOpenWrite or fmShareDenyNone);
if FileHandle > 0 then
FileClose(FileHandle)
else
begin
FileClose(FileHandle);
Link := Tinifile.Create(ExtractFilePath(Paramstr(0)) + 'Link.ini');
Link.WriteString('POS', 'SERVER NAME', '127.0.0.1');
Link.WriteString('POS', 'USER NAME', 'sa');
Link.WriteString('POS', 'PASSWORD', '');
Link.WriteString('SERVER', 'DATABASE NAME', 'server');
Link.WriteString('SERVER', 'SERVER NAME', 'server');
Link.WriteString('SERVER', 'USER NAME', 'sa');
Link.WriteString('SERVER', 'PASSWORD', '');
Link.Destroy;
end;
try
Database1.Connected := false;
Link := Tinifile.Create(ExtractFilePath(Paramstr(0)) + 'Link.ini');
ch := 'pos';
if AliasEditor1.Exists(ch) = false then
AliasEditor1.Add(ch, 'MSSQL', Memo1.Lines);
Database1.AliasName := 'pos';
Database1.DatabaseName := 'pos';
Database1.Params.Text := 'DATABASE NAME=master';
Database1.Params.Add('SERVER NAME=' + Link.Readstring('POS', 'SERVER NAME', '127.0.0.1'));
Database1.Params.Add('USER NAME=' + Link.Readstring('POS', 'USER NAME', 'sa'));
Database1.Params.Add('PASSWORD=' + Link.Readstring('POS', 'PASSWORD', ''));
Link.Destroy;
Database1.Connected := true;
try
Query1.Close;
Query1.SQL.Text := 'use pos';
Query1.ExecSQL;
except
try
Query1.Close;
Query1.SQL.Text := 'CREATE DATABASE [POS] ON (NAME = N' + #39 + 'POS_DATA' + #39 +
',FILENAME = N' + #39 + ExtractFilePath(Application.Exename) + 'POS_DATA.MDF' + #39 +
', SIZE=10,FILEGROWTH=10%) LOG ON (NAME =N' + #39 + 'POS_LOG' + #39 + ', FILENAME =N' +
#39 + ExtractFilePath(Application.Exename) + 'POS_LOG.LDF' + #39 + ',SIZE=2, FILEGROWTH=10%)' + #13 + 'COLLATE CHINESE_PRC_CI_AS';
Query1.ExecSQL;
ResToFile('DatBase', 'FILE1', ExtractFilePath(Application.Exename) + 'LXF.DAT');
Query1.close;
Query1.SQL.Clear;
Query1.SQL.Add('RESTORE FILELISTONLY FROM DISK = ' + #39 + ExtractFilePath(Application.Exename) + 'LXF.DAT' + #39);
Query1.ExecSQL;
Query1.close;
Query1.SQL.Clear;
Query1.SQL.Add('RESTORE DATABASE POS FROM DISK=' + #39 + ExtractFilePath(Application.Exename) + 'LXF.DAT' + #39 + ' WITH REPLACE,');
Query1.SQL.Add('MOVE ' + #39 + 'POS_DATA' + #39 + ' TO ' + #39 + ExtractFilePath(Application.Exename) + 'POS_DATA.MDF' + #39 + ',');
Query1.SQL.Add('MOVE ' + #39 + 'POS_LOG' + #39 + ' TO ' + #39 + ExtractFilePath(Application.Exename) + 'POS_LOG.LDF' + #39);
Query1.ExecSQL;
except
end;
end;
Database1.Connected := false;
Link := Tinifile.Create(ExtractFilePath(Paramstr(0)) + 'Link.ini');
Database1.AliasName := 'pos';
Database1.DatabaseName := 'pos';
Database1.Params.Text := 'DATABASE NAME=pos';
Database1.Params.Add('SERVER NAME=' + Link.Readstring('POS', 'SERVER NAME', '127.0.0.1'));
Database1.Params.Add('USER NAME=' + Link.Readstring('POS', 'USER NAME', 'sa'));
Database1.Params.Add('PASSWORD=' + Link.Readstring('POS', 'PASSWORD', ''));
Link.Destroy;
Database1.Connected := true;
Query1.close;
Query1.sql.clear;
Query1.sql.add('select * from mdda');
Query1.Open;
except
Application.MessageBox('连接数据库失败,请检查数据库是否启动' + #13 + '或配置文件Link.ini是否正确.', '错误', MB_OK + MB_ICONERROR);
Application.Terminate;
end;
运行提示:
连接数据库失败,请检查数据库是否启动' .......
想请教高手几个问题:
1、我已经在SQL2000附加了server数据库文件,为什么还提示连接失败?
2、上面代码的意思不是说如果连接不了远程数据库,就建立本地POS数据库文件吗?怎么也创建不了?
[POS]
SERVER NAME=192.168.1.2
USER NAME=sa
PASSWORD=[SERVER]
DATABASE NAME=pos
SERVER NAME=127.0.0.1
USER NAME=sa
PASSWORD=
Link := Tinifile.Create(ExtractFilePath(Paramstr(0)) + 'Link.ini');
ch := 'pos';
if AliasEditor1.Exists(ch) = false then
AliasEditor1.Add(ch, 'MSSQL', Memo1.Lines);
Database1.AliasName := 'pos';
Database1.DatabaseName := 'pos';
Database1.Params.Text := 'DATABASE NAME=master';
Database1.Params.Add('SERVER NAME=' + Link.Readstring('POS', 'SERVER NAME', '127.0.0.1'));
Database1.Params.Add('USER NAME=' + Link.Readstring('POS', 'USER NAME', 'sa'));
Database1.Params.Add('PASSWORD=' + Link.Readstring('POS', 'PASSWORD', ''));
Link.Destroy;
try
Database1.Connected := true;
except
Application.MessageBox('连接数据库失败,请检查数据库是否启动' + #13 + '或配置文件Link.ini是否正确.', '错误', MB_OK + MB_ICONERROR);
Application.Terminate; end;如果仍然报数据库连接失败 ,那你就要检查一下你的数据库设置了。