在不知道有哪些字段相同的情况下如何比较记录(30)

  • 主题发起人 主题发起人 bnlywj
  • 开始时间 开始时间
B

bnlywj

Unregistered / Unconfirmed
GUEST, unregistred user!
在写一个比较两个access数据库差异的软件,就差记录的比较了,数据库的路径放在了两个Edit中,各自拥有的表显示在了两个Combobox中,用的是ado的动态链接,所以数据库都是可变的,这样用adoquery的sql查询的话就不知道每次有哪些字段是相等的, 就不好查询啊 如: Select * from table1 as t1 where Exists( Select * from Table2 in '库2.MDB' as t2 where t1.f1=t2.f1 上述过程中的t1.f1=t2.f1 就不知道f1是哪些具体的字段啊,因为数据库和表都是可选的,不是固定的, 有没有方法可以解决啊! 请教!
 
枚举字段一个一个比较,要不就建一个表,记录每个表的关键字
 
字段f1就是主键吧,关键就是如何查找主键,对吧。如何获取一张ACCESS表的主键字段名?---------------uses ComObj;function GetPrimary(const DBName, TableName:String; var FieldName: WideString): Boolean;var dbe, dbs, tdf, idx: OleVariant; i, j: Integer;begin Result := False; FieldName:=''; try dbe := CreateOleObject('DAO.DBEngine.36'); dbs := dbe.OpenDatabase(DBName); tdf := dbs.TableDefs[TableName]; for i := 0 to tdf.Indexes.Count - 1 do if tdf.Indexes.Primary then begin idx := tdf.Indexes; for j := 0 to idx.Fields.Count - 1 do FieldName:=FieldName+';'+idx.Fields[j].Name; system.Delete(FieldName,1,1); Result:=True; Break; end; finally if not VarIsEmpty(dbs) then dbs.Close; idx := Unassigned; tdf := Unassigned; dbs := Unassigned; dbe := Unassigned; end;end;procedure TForm1.Button2Click(Sender: TObject);var FieldName: WideString;begin if GetPrimary('C:/db1.mdb', '表一', FieldName ) then caption:=FieldName;end;
 
where 后面的条件是 t1.f1=t2.f1,t1.f2=t2.f2,t1.f3=t2.f3,…… 即两个表中相等的字段,因为表是可变的,所以有哪些相等的字段就不确定了,也就是where后面有几个相等的条件不定啊,我现在就是头疼where后面的这个条件,求教!
 
我已经想出方法了,谢谢大家的帮忙
 
一个表字段从第一个循环到最后一个,另一个表每次都枚举所有字段看是否存在。
 
后退
顶部