1. 需要有TADOConnection 和TADOQuery这两个控件;
2. ADOQuery1 的Connection属性设置为:ADOConnection1;
3. 读配置文件,得到数据库
procedure TFrmMain.ReadInifile;
var
IniFile: TIniFile;
begin
IniFile := TIniFile.Create(ExtractFilepath(Application.exename) + 'aninifile.ini');
try
FServerName := IniFile.ReadString('db', 'server', '');
FParamDBName := IniFile.ReadString('db', 'paramdb', '数据库名称');
if (FServerName = '') or (FParamDBName = '') then
begin
MessageBox(Application.Handle, PChar('读取配置文件aninifile.ini 中服务器出错,请修复!
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
'), PChar('我的应用程序'), MB_ICONSTOP);
end;
finally
IniFile.Free;
end;
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4.打开数据库
function TFrmMain.OpenParamDB: Boolean;
begin
with ADOConnection1 do
begin
try
if not Connected then
begin
ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
ID=sa;Initial Catalog=' + FParamDBName + ';Data Source=' + FServerName;
Connected := true;
end;
result := true;
except
MessageBox(Application.Handle, PChar('无法连接计算机“' + FServerName + '”上的“' +
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
FParamDBName + '”,请检查数据库是否已安装并启动!'), PChar('我的应用程序'),
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
MB_ICONWARNING);
result := false;
end;
end;
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5.写SQL语句,读出数据
function TRdb.RefreshShowInfo(const ADeviceId, AInDeviceId: integer): TDcapTt;
var
strSQL: string;
Device: TDcapDevice;
Tt: TDcapTt;
begin
strSQL := ' SELECT 表1.名称, 表2. * ,表3.备注 '+
' FROM 表1 INNER JOIN 表2 ON ( 表1.ID = 表2.ID) '+
' INNER JOIN 表3 ON (表1. ID = 表3.ID) '+
' WHERE (1.ID = '+ IntToStr(AId) + ')';
try
with FrmMain.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add(strSQL);
Open;
First;
while not Eof do
begin
Device := TDcapDevice.Create(FrmMain.ADOQuery1);
Next;
end;
Close;
end;
except
end;
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
constructor TDcapDevice.Create(Query: TADOQuery);
var
ARemark: string;
begin
try
FId := Query.FieldByName('ID').AsInteger;
FName := Trim(Query.FieldByName('名称').AsString);
FName1 := Trim(Query.FieldByName('名1').AsString);
ARemark := Trim(Query.FieldByName('备注').AsString);
if ARemark = 'tttt' then
FType := dtGRS
else
FType := dtNormal;
except
end;
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6.关闭打开的数据库
procedure TFrmMain.CloseParamDB;
begin
ADOConnection1.Close;
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7.显示读出来的数据
procedure TFrmMain.RefreshTtList;
var
i: integer;
NewItem: TListItem;
mytt: TDcapTt;
mydevice: TDcapDevice;
begin
if not NotListStrap then
begin
if ListView1 = nil then
CreateListView;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
with ListView1.Items do
begin
BeginUpdate;
Clear;
for i:=0 to FTts.Count-1 do
begin
NewItem := Add;
mytt := TDcapTt(FTts[i]);
mydevice := mytt.Device;
case mytt.Status of
TT_STATUS_CLOSE:
begin
NewItem.Caption := FState1Text;
NewItem.ImageIndex:=0;
end;
TT_STATUS_OPEN:
begin
NewItem.Caption := FState2Text;
NewItem.ImageIndex:=1;
end;
TT_STATUS_UNKNOWN:
begin
NewItem.Caption := '不确定';
NewItem.ImageIndex:=2;
end;
end;
NewItem.SubItems.Add(mydevice.StationName);
NewItem.SubItems.Add(IntToStr(mydevice.Id));
NewItem.SubItems.Add(IntToStr(mytt.InDeviceId));
NewItem.SubItems.Add(mytt.Name);
end;
EndUpdate;
end;
end;
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)