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 中服务器出错,请修复!
'
), PChar('我的应用程序'), MB_ICONSTOP);
end
;
finally
IniFile.Free;
end
;
end
;
![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
ID
=
sa;Initial Catalog
=
'
+ FParamDBName + ';Data Source=' + FServerName;
Connected :
=
true
;
end
;
result :
=
true
;
except
MessageBox(Application.Handle, PChar(
'
无法连接计算机“' + FServerName + '”上的“' +
FParamDBName
+
'
”,请检查数据库是否已安装并启动!'), PChar('我的应用程序'),
MB_ICONWARNING);
result :
=
false
;
end
;
end
;
end
;
![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
;
![None.gif](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
;
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6.关闭打开的数据库
procedure TFrmMain.CloseParamDB;
begin
ADOConnection1.Close;
end
;
7.显示读出来的数据
procedure TFrmMain.RefreshTtList;
var
i:
integer
;
NewItem: TListItem;
mytt: TDcapTt;
mydevice: TDcapDevice;
begin
if
not
NotListStrap
then
begin
if
ListView1
=
nil
then
CreateListView;
![None.gif](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
;