TRANSFORM first(FieldValue)
SELECT ContactID
FROM [SELECT a.FieldName, b.ContactID, b.FieldID, b.FieldValue
FROM CustomField AS a, ContactFieldValue AS b
WHERE a.RecordID = b.FieldID]. AS TmpTable
GROUP BY ContactID
PIVOT FieldName;
视图名: V_CustomValue 
请问 这个视图如何动态创建啊?谢谢!http://topic.csdn.net/u/20090730/16/ad9866a9-29dd-46a1-874b-767f5b413a93.html 同

解决方案 »

  1.   

    知道"CreateQueryDef"线索,参考google代码搜索找到的例子
    http://www.google.cn/codesearch/p?hl=zh-CN&sa=N&cd=7&ct=rc#GnrWj4uf5gs/ImportAccess.pas&q=file:.pas$%20CreateQueryDef&l=453 procedure TForm1.Button3Click(Sender: TObject);
    const
      dbUseJet = $00000002;
    var
      connection: OleVariant;
      DBEngine : OleVariant;
      DataBase : OleVariant;
      QueryDef : OleVariant;
      accessfile: string;
      sql: string;
    begin
      accessfile := 'x:\db1.mdb';  connection := CreateOleObject('Access.Application');
      DBEngine := connection.DBEngine;
      DBEngine.DefaultType := DBUseJet;
      DataBase := DBEngine.OpenDatabase(accessfile);
      sql := ' TRANSFORM first(FieldValue) '
          + ' SELECT ContactID FROM [SELECT a.FieldName, b.ContactID, b.FieldID, '
          + ' b.FieldValue FROM CustomField AS a, ContactFieldValue AS b WHERE '
          + ' a.RecordID = b.FieldID]. AS TmpTable GROUP BY ContactID PIVOT FieldName';
      QueryDef := Database.CreateQueryDef('V_CustomValue',sql);    
      connection.Close();
    end;