AdvStringGrid控件自带两个函数,可以直接显示acess数据库中的数据
procedure TAdvStringGrid.LoadFromMDBTable(Filename, Table: string);
procedure TAdvStringGrid.LoadFromMDBSQL(Filename, SQL: string);
其中LoadFromMDBTable的实现是通过LoadFromMDBSQL方法实现的。这两个方法的内部实现如下:
procedure TAdvStringGrid.LoadFromMDBTable(Filename, Table: string);
begin
LoadFromMDBSQL(Filename,'Select * FROM ' + Table);
end;
procedure TAdvStringGrid.LoadFromMDBSQL(Filename, SQL: string);
{$IFNDEF TMSDOTNET}
var
ObjConnC, ObjRSC: variant;
DSN: string;
i,j,k: Integer;
{$ENDIF}
begin
{$IFNDEF TMSDOTNET}
ObjConnC := CreateOleObject('ADODB.Connection');
DSN := 'Driver={Microsoft Access Driver (*.mdb)};DBQ='+Filename;
ObjConnC.Open(DSN);
ObjRSC := CreateOleObject('ADODB.RecordSet');
ObjRSC.ActiveConnection := ObjConnC;
ObjRSC.Open(SQL);
i := ObjRSC.Fields.Count;
ColCount := FixedCols + i;
if FixedRows > 0 then
for j := 1 to i do
begin
Cells[FixedCols + j - 1, FixedRows - 1] := ObjRSC.Fields[j - 1].Name;
end;
if ObjRSC.RecordCount > 0 then
begin
RowCount := FixedRows + ObjRSC.RecordCount;
end;
k := FixedRows;
while (ObjRSC.Eof = False) do
begin
for j := 1 to i do
begin
if ObjRSC.Fields[j - 1].ActualSize > 0 then
LoadCell(FixedCols + j - 1, k,ObjRSC.Fields[j - 1].Value)
else
LoadCell(FixedCols + j - 1, k,'');
end;
ObjRSC.MoveNext;
inc(k);
if k > RowCount then
RowCount := RowCount + 1;
end;
ObjRSC.Close;
ObjConnC.Close;
{$ENDIF}
end;
对于不需要密码的access数据的显示,直接通以上两个函数就OK,对于有密码的数据库,需要改写一下LoadFromMDBSQL的实现过程,增加一个密码参数。