错误3265-记录集中存在字段

时间:2018-08-17 13:26:40

标签: sql vba access-vba

全部

我正在尝试填充activexlist视图,但出现错误3265。

填充它的代码是:

  static DevI2C *ext_i2c;
  static LSM6DSLSensor *acc_gyro;

  char mystatus[20];
  int mevent = 0;
  LSM6DSL_Event_Status_t evstats;

  void setup(){
    ext_i2c = new DevI2C(D14, D15);
    acc_gyro = new LSM6DSLSensor(*ext_i2c, D4, D5);
    acc_gyro->init(NULL); 

     /* Attach callback to LSM6DSL INT1 */
    acc_gyro->attachInt1Irq(&memsevent);
    acc_gyro->enableAccelerator();
    acc_gyro->enableGyroscope();
    acc_gyro->enableFreeFallDetection(LSM6DSL_INT1_PIN);
    acc_gyro->setFreeFallThreshold(0);
  }

  void memsevent() {
    mevent = 1;
  }

  void freeFall(){
    int n=sizeof(colors)/sizeof(colors[0]);
    uint8_t *color=colors[(colorindex++)%n];
    rgbLed.setColor(color[0],color[1],color[2]);
  }

  void showSensors(){
    if(!acc_gyro->getEventStatus(&evstats)){
       strcpy(mystatus,"got stats");
       if(evstats.FreeFallStatus){
          strcpy(mystatus, "in freefall");
          freeFall();
       }
    }

    if(mevent){
      strcpy(mystatus, "mem");
    }

    char buff[50]; // screen print stuff
    sprintf(buff, "status:%s \r\n num:%i",,mystatus,evstats.FreeFallStatus);
    Screen.print(buff);
  }

引发错误的记录集是:

Do Until rs.EOF
        Set lstItem = ctlListView.ListItems.Add()
        lstItem.text = rs!EntityID
        lstItem.subitems(1) = Nz(rs!Class, "")
        lstItem.subitems(2) = Nz(rs!Bundle, "")
        lstItem.subitems(3) = Nz(rs!Reference, "")
        lstItem.subitems(4) = Nz(rs!DisplayReference, "")
        lstItem.subitems(5) = Nz(rs!CalculatedReference, "")
        lstItem.subitems(6) = Nz(Format(rs!EntityDate, "d mmm yyyy"), "")
        lstItem.subitems(7) = Nz(Format(rs!EntityTime, "hh:mm am/pm"), "")
            lstItem.subitems(8) = Nz(rs!Description, "")
[...]

我在网上收到错误消息

SELECT p_Primary_1.EntityID, p_Primary_1.Class, p_Primary_1.Reference, p_Primary_1.Bundle, p_Primary_1.EntityDate, p_Primary_1.EntityTime, p_Primary_1.Description, p_Primary_1.DisplayReference, p_Primary_1.CalculatedReference, p_Primary.EntityID 
FROM p_Primary AS p_Primary_1 INNER JOIN (p_Primary INNER JOIN JunctionTable ON p_Primary.EntityID = JunctionTable.PK1) ON p_Primary_1.EntityID = JunctionTable.PK2 
WHERE (((p_Primary.EntityID) = 46) AND ((JunctionTable.RelationshipType) = 'EXEX'));

我认为这是因为“ EntityID”在记录集中存在两次(p_Primary_1.EntityID和P_Primary.EntityID)。

如何避免该错误? (例如,是否可以仅在集合中添加第一个对象(始终为“ EntityID”)?)

1 个答案:

答案 0 :(得分:2)

以相反的顺序回答您的问题...

  

是否可以简单地在集合中添加第一个对象(始终为“ EntityID”)?

是的,您可以通过其记录集字段(从零开始)索引。因此,第一个字段是rs.Fields(0)rs(0)

偶然地,您可以使用rs.Fields(0).Name来查看Access在记录集中用于该字段的名称。

  

如何避免该错误?

如果使用Fields(0),则需要确保在修改SELECT时/根据需要对其进行更新。

如果您确实需要查询中的两个EntityID字段,请为其中一个别名或两个别名...

SELECT p_Primary_1.EntityID AS EntityID1, p_Primary.EntityID AS EntityID0

否则,只需SELECT的两个EntityID字段之一。