Exemple #1
0
void CQueryTable::refresh()
{
  if (isBlocked())
    return;
  reset();
  m_cancel = false;
  if (!query()->isResultNull())
  {
    setBlocked(true);
    query()->dataSeek(0);
    uint num_fields = query()->numFields();
    ulong num_rows = query()->numRows();
    setNumRows(num_rows);
    setNumCols(num_fields);
    QPixmap icon;
    bool columns_ok = (keepColumnWidth() && previous_columns_map.count() == num_fields);
    if (columns_ok)
      for (uint i = 0; i < num_fields; i++)
        columns_ok &= (previous_columns_map[i].label == query()->fields(i).name);

    if (!columns_ok && keepColumnWidth())
      previous_columns_map.clear();

    for (uint i = 0; i < num_fields; i++)
    {
      if (IS_PRI_KEY(query()->fields(i).flags))
        icon = pkIcon;
      else if (IS_MUL_KEY(query()->fields(i).flags))
        icon = mulIcon;
      else if (IS_UNI_KEY(query()->fields(i).flags))
        icon = uniIcon;
      else     
        icon = nothingIcon;
      if (columns_ok && previous_columns_map[i].label == query()->fields(i).name)
        horizontalHeader()->setLabel(i, icon, query()->fields(i).name, previous_columns_map[i].size);
      else
        horizontalHeader()->setLabel(i, icon, query()->fields(i).name);
    }
    if (hasProcessEvents())
      qApp->processEvents();
    else
      updateScrollBars();

    ulong j = 0;
    while (query()->next(!hasProcessEvents()))
    {
      if (m_cancel)
        break;
      for (uint i = 0; i < num_fields; i++)
        setText(j, i, query()->row(i));
      j++;
    }
    setBlocked(false);
    emit refreshed();
  }
  else
    if (!previous_columns_map.empty())
      previous_columns_map.clear();
}
void CProcessListTable::refresh()
{
  if (isBlocked())
    return;

  setBlocked(true);

  bool max_scroll = false;
  int scroll = is_first ? 0 : verticalScrollBar()->value();
  if (scroll >= verticalScrollBar()->maxValue() - 1 && scroll != 0)
    max_scroll = true;    

  if (keepColumnWidth() && numCols() > 0)
    for (int i = 0; i < numCols(); i++)
      previous_columns_map.insert(i, CTable::OldColumn(horizontalHeader()->sectionSize(i), horizontalHeader()->label(i)));

  clearCellWidget(currentRow(), currentColumn());
  if (is_first)
    ensureVisible(0, 0);  
  query()->freeResult();
  setNumRows(0);
  horizontalHeader()->setSortIndicator( -1 );  
  if (query()->exec(sql))
  {
    uint num_rows = qry->numRows();
    uint num_fields = qry->numFields();

    bool columns_ok = (keepColumnWidth() && previous_columns_map.count() == num_fields);
    if (columns_ok)
      for (uint i = 0; i < num_fields; i++)
        columns_ok &= (previous_columns_map[i].label == query()->fields(i).name);

    if (!columns_ok && keepColumnWidth())
      previous_columns_map.clear();

    setNumRows(num_rows);
    setNumCols(num_fields);
    if (is_first)
    {      
      for (uint i = 0; i < num_fields; i++)
      {
        if (columns_ok && previous_columns_map[i].label == query()->fields(i).name)
          horizontalHeader()->setLabel(i, qry->fields(i).name, previous_columns_map[i].size);
        else
          horizontalHeader()->setLabel(i, qry->fields(i).name);

        setColumnReadOnly (i, (i != 0));
      }
      is_first = false;
    }

    if (hasProcessEvents())
      qApp->processEvents();
    else
      updateScrollBars();

    uint j = 0;
    while (query()->next())
    {
      for (uint i = 0; i < num_fields; i++)
      {
        const char *val = query()->row(i) ? query()->row(i) : NULL_TEXT;
        if (i == 0)
          setItem (j, i, new CCheckTableItem(this, val));
        else        
          setText(j, i, val);
      }
      j++;
    }
    if (!columns_ok)
      for (j = 0; j < num_fields; j++)
        adjustColumn(j);

    if (max_scroll)
      scroll = verticalScrollBar()->maxValue();
    verticalScrollBar()->setValue(scroll);
  }  
  setBlocked(false);
  applyLastSort();
}
Exemple #3
0
void CQueryTable::save()
{
  if (isBlocked())
    return;  
  tmpFileName = getSaveFileName(tmpFileName, "txt", tr("Text Files (*.txt);;All Files(*.*)"));  

  if (tmpFileName.isEmpty())
    return;
  
  QFile file( tmpFileName );    
  if (file.exists() && myApp()->confirmCritical())
    if ((QMessageBox::warning(0, tr("Replace File"), tr("The specified file name already exists.\nDo you want to replace it ?"),
      QMessageBox::Yes, QMessageBox::No) != QMessageBox::Yes))
      return;

  if ( !file.open( IO_WriteOnly ) )
  {
    if (mysql()->messagePanel())
      mysql()->messagePanel()->critical(tr("An error occurred while saving the file"));
    return;
  }

  setBlocked(true);

  QString line_terminator = mysql()->lineTerminator(true);

  QString title = caption() + line_terminator;
  title += tr("Connection") + ": " + mysql()->connectionName() + line_terminator;
  title += tr("Host") + ": " + mysql()->hostName() + line_terminator;  
  title += tr("Saved") + ": " + QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss") + line_terminator;  
  title = CApplication::commentText(title, line_terminator) + line_terminator;

  QTextStream ts( &file );
  ts << title;
  
  QString tmp = tr("Query") + ":" + line_terminator;
  tmp += query()->lastQuery().replace(QRegExp("\n"), line_terminator) + line_terminator;
  ts << CApplication::commentText(tmp, line_terminator) << line_terminator;
 
  query()->dataSeek(0);
  
  uint num_fields = query()->numFields();
  QString encl = mysql()->fieldEncloser(true);
  QString sep = mysql()->fieldSeparator(true);
  uint j;
  bool add_sep = false;
  for (j = 0; j < num_fields; j++)
  {
    if (horizontalHeader()->sectionSize(j) != 0)
    {
      if (add_sep)
        ts << sep;
      ts << encl << query()->fields(j).name << encl;
      if (!add_sep)
        add_sep = true;
    }
  }
  ts << line_terminator;


  if (numRows() <= 0 || numCols() <= 0)
    return;

  QString repl_empty = mysql()->replaceEmpty(true);
  
  while (query()->next(!hasProcessEvents()))
  {
    add_sep = false;
    for (j = 0; j < num_fields; j++)
      if (horizontalHeader()->sectionSize(j) != 0)
      {
        const char* r = query()->row(j);
        if (!r)
          r = "[NULL]";
        if (!*r)
          r = (const char*)repl_empty;
        if (add_sep)
          ts << sep;

        ts << encl << r << encl;
        if (!add_sep)
          add_sep = true;
      }
    ts << line_terminator;
  }

  file.close();
  if (mysql()->messagePanel()) 
    mysql()->messagePanel()->information(tr("Successfully saved") + ": " + tmpFileName);

  setBlocked(false);
}