def __init__(self, sql: str, noData: bool = False): '''根据一个Sql或表名返回一个JPTabelFieldInfo对象\n JPTabelFieldInfo(sql:str, noData:bool=False) ''' db = JPDb() self.PrimarykeyFieldName = None self.PrimarykeyFieldIndex = None self.TableName = None self.DeleteRows = [] sql = re.sub(r'^\s', '', re.sub(r'\s+', ' ', re.sub(r'\n', '', sql))) sel_p = r"^SELECT\s+.*from\s(\S+)[$|\s].*" mt = re.match(sel_p, sql, flags=(re.I | re.M)) self.TableName = mt.groups()[0] if mt else sql s_filter = db.getOnlyStrcFilter() if noData: # 找出不包含条件的SQL语句 p_s = r"^(SELECT\s+.*from\s(\S+)[$|\s](as\s\S+)*)" mt1 = re.match(p_s, sql, flags=(re.I | re.M)) sql = mt1.groups( )[0] + " " + s_filter if mt else 'Select * from {} {}'.format( self.TableName, s_filter) if mt else sql else: sql = sql if mt else 'Select * from {} {}'.format(sql, s_filter) super().__init__(sql) # 检查查询结果中是否包含主键, for i, fld in enumerate(self.Fields): if fld.IsPrimarykey is True: self.PrimarykeyFieldName = fld.FieldName self.PrimarykeyFieldIndex = i if self.PrimarykeyFieldIndex is None: raise ValueError('查询语句:\n"{}"中未包含主键字段!'.format(sql))
def _search(self): db = JPDb() sql = self.cbo_base.currentData() if ( self.cbo_base.currentIndex() != -1 and self.cbo_year.currentIndex() != -1) else self.sql_none.format( db.getOnlyStrcFilter()) tab = JPQueryFieldInfo(sql.format(self.cbo_year.currentText())) self.__changeTitle(tab) self.queryInfo = tab self.mod = _myMod(self.tableView, self.queryInfo) self.tableView.setModel(self.mod)