不知道我是不是准确理解了你的意图,你看这样可不可以:
1。在access中建立查询,即三个表用外关键字关联起来,这个查询假设叫做Q。
(第二种情况有点搞不懂,表名不为空,直接以这个表作为数据源不就可以了吗?)
2。用ADO作为datagrid控件的数据源,当然首先要添加ADO的引用。基本的代码如下:dim cnn As New ADODB.Connection
dim rec As New ADODB.RecordsetIf cnn.State = adStateOpen Then
Else
    cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=..\XXX.mdb;Mode=Read|Write"     'XXX.mdb是你的数据库名称
    cnn.Open
End IfIf rec.State = adStateOpen Then
    rec.Close
    Set rec = Nothing
End If
Query = "select * from Q where Y"   'Y是你的查询条件,如:日期=2003年2月14日
'注:如果是已知表名,就把上面的Q换成表名rec.Open Query, cnn, adOpenStatic, adLockOptimisticWith DataGrid1
    
    Set .DataSource = rec
    
    .Columns(0).Caption = "日期"
    .Columns(1).Caption = "..."
    ...
    .Columns(n).Caption = "..."'还可以把表中不想显示出来的字段设为不可见:
    .Columns(j).Visible = False'把不希望用户改动的字段锁死:
    .Columns(i).Locked = True
       
End With