亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? childfrm.cpp

?? FastDb是高效的內存數據庫系統(tǒng)
?? CPP
?? 第 1 頁 / 共 3 頁
字號:

    // if another than the oid column was clicked find reference table

    if (ia.iSubItem>0)
    {
      // for detail view use row index else column index

      if (m_vt== eRecordView)
      {
        field= &m_fieldDefs[ia.iItem];
      }
      else
      {
        field= &m_fieldDefs[ia.iSubItem-1];
      }

      // get reference table name for field
      if (!field->refTable.IsEmpty())
        table= field->refTable;
    }
    else if (m_vt== eArrayView && !m_refTable.IsEmpty())
    {
      // for array view ref table name is stored separately
      table= m_refTable;
    }

    // create new record detail view
    int oid= FromHex(item.Mid(1));
    if (oid !=0)
    {
      pChild = new CChildFrame(m_dbHandle, table, m_dbName, oid);
      Init(pChild, eRecordView);
    }

  }
  else if (m_vt == eDataView || m_vt == eRecordView) // table content view active
  {
    // for detail view use row index else column index

    if (m_vt == eRecordView)
    {
      field= &m_fieldDefs[ia.iItem];
    }
    else
    {
      field= &m_fieldDefs[ia.iSubItem-1];
    }

    // was an array field clicked?
    if (field->type >= cli_array_of_oid && field->type <= cli_array_of_string)
    {
      // create new array field view
      pChild = new CChildFrame(m_dbHandle, m_dbTable, m_dbName,
                               m_vt== eRecordView? m_currentOid : m_view.GetItemData(ia.iItem),
                               field);

      Init(pChild, eArrayView);
      pChild->m_refTable= field->refTable;
    }

  }
  else // any other view: assume tablename clicked and open new view for that
  {
    pChild = new CChildFrame(m_dbHandle, (LPCTSTR)item, m_dbName);

    // if Ctrl-Key pressed show schema, if shift do query else full content

    if (ia.uKeyFlags & LVKF_CONTROL)
    {
      pChild->m_vt= eSchemaView;
    }
    else
    {
      pChild->m_vt= eDataView;

      if (ia.uKeyFlags & LVKF_SHIFT)
      {
        CQueryPrompter dlg;

        if (dlg.DoModal()== IDOK)
        {
          pChild->m_queryCond= dlg.m_query;
        }
      }
    }
  }

  // create window if any view was created
  if (pChild)
  {
    pChild->CreateEx(GetParent());

    // register with database view
    pChild->m_dbWindow= m_dbWindow;
    m_dbWindow.PostMessage(WM_REGISTERVIEW, 1, (LPARAM)pChild->m_hWnd);
  }

  return 0;
}

LRESULT CChildFrame::OnRegisterView(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
  if (wParam != 0)
  {
    m_chieldViews.push_back((HWND)lParam);
  }
  else
  {
    m_chieldViews.remove((HWND)lParam);
  }

  return 0;
}


LRESULT CChildFrame::OnRefreshData(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
  list<CWindow>::iterator it;

  switch (wParam)
  {

  case 0:
    cli_abort(m_dbHandle);
    break;

  case 1:

    if (HasChanged())
      UpdateField();

    cli_commit(m_dbHandle);

    break;

  case 2:
    switch (m_vt)
    {

    case eDataView:
      RefreshTableData();
      break;

    case eArrayView:
      RefreshArrayData();
      break;

    case eRecordView:
      RefreshRecordData();
      break;
    }

    return 0;

  case 3:
    break;
  }

  for (it= m_chieldViews.begin(); it!=m_chieldViews.end(); ++it)
  {
    (*it).PostMessage(WM_REFRESH_DATA, 2, 0);
  }

  return 0;
}


int CChildFrame::FromHex(CString str)
{
  cli_int8_t dw=0;

  for (int i=0; i< str.GetLength(); ++i, dw *=16)
  {
    char c= str[i];
    if (c==' ') break;
    dw+= c & 0xf;

    if (c >'9')
      dw+= 9;
  }

  return (int)(dw/16);
}


void CChildFrame::StartEditing()
{
  list<CChildFrame*>::iterator it;

  for (it= m_allViews.begin(); it!= m_allViews.end(); ++it)
  {
    CChildFrame* view= *it;
    view->m_currentEdit=-1;
  }

  s_editing= true;
}


void CChildFrame::EndEdit(bool bCommit)
{
  list<CChildFrame*>::iterator it;

  for (it= m_allViews.begin(); it!= m_allViews.end(); ++it)
  {
    CChildFrame* view= *it;

    if (view->m_fieldEdit.IsWindow())
      view->m_fieldEdit.ShowWindow(SW_HIDE);

    if (view->m_refSelector.IsWindow())
      view->m_refSelector.ShowWindow(SW_HIDE);

    if (view->HasChanged())
      view->UpdateField();

    view->m_currentEdit=-1;

    if (view->m_vt== eDbView)
    {
      view->PostMessage(WM_REFRESH_DATA, bCommit? 1:0, 0);
    }
  }

  s_editing= false;
}


void CChildFrame::RefreshData()
{
  list<CChildFrame*>::iterator it;

  for (it= m_allViews.begin(); it!= m_allViews.end(); ++it)
  {
    CChildFrame* view= *it;

    if (view->m_vt== eDbView)
    {
      view->PostMessage(WM_REFRESH_DATA, 3, 0);
    }
  }
}


void CChildFrame::NewRecord()
{
  if (!s_editing)
    return;

  list<CChildFrame*>::iterator it;

  CChildFrame* view=NULL;

  CWindow parent= m_mdiClient.GetTopWindow();

  for (it= m_allViews.begin(); it!= m_allViews.end(); ++it)
  {
    view= *it;

    if (view->m_hWnd== parent.m_hWnd)
      break;
    else
      view=NULL;
  }

  if (view && view->m_vt== eDataView)
  {
    view->AddNewRecord();
  }
}

void CChildFrame::AddNewRecord()
{
  cli_oid_t oid;
  memset(m_buffer, '\0', m_bufferSize);
  int r= cli_insert_struct(m_dbHandle, m_dbTable, m_buffer, &oid);

  if (r== cli_ok)
  {
    // create new record detail view
    CChildFrame* pChild = new CChildFrame(m_dbHandle, m_dbTable, m_dbName, oid);

    if (pChild)
    {
      Init(pChild, eRecordView);
      pChild->CreateEx(GetParent());

      // register with database view
      pChild->m_dbWindow= m_dbWindow;
      m_dbWindow.PostMessage(WM_REGISTERVIEW, 1, (LPARAM)pChild->m_hWnd);
    }
  }
}

void CChildFrame::DeleteRecord()
{
  if (!s_editing)
    return;

  list<CChildFrame*>::iterator it;

  CChildFrame* view=NULL;

  CWindow parent= m_mdiClient.GetTopWindow();

  for (it= m_allViews.begin(); it!= m_allViews.end(); ++it)
  {
    view= *it;

    if (view->m_hWnd== parent.m_hWnd)
      break;
    else
      view=NULL;
  }

  if (view && view->m_vt== eDataView)
  {
    view->DeleteSelectedRecord();
  }
}


void CChildFrame::DeleteSelectedRecord()
{
  CString item;
  int n= m_view.GetSelectedIndex();

  if (n==-1)
    return;

  m_view.GetItemText(n,0, item);

  CStdString query;

  int objid= FromHex(item.Mid(1));

  query.Format("select * from %s where current=%d", m_dbTable.c_str(), objid);

  try
  {
    int statement= cli_prepare_query(m_dbHandle, query);

    if (statement)
    {
      int r= cli_fetch(statement, cli_for_update);
      r= cli_remove(statement);

      if (r== cli_ok)
      {
        RefreshData();
      }
    }
  }
  catch (dbException exc)
  {
    MessageBox(exc.getMsg(), APP_NAME, MB_OK|MB_ICONEXCLAMATION);
  }
}

bool CChildFrame::HasChanged()
{
  if (m_currentEdit == -1)
    return false;

  CString oldVal,newVal;

  TFieldDef& field= m_fieldDefs[m_currentEdit];

  if (field.type >cli_oid && field.type < cli_pasciiz)
  {
    int len= m_fieldEdit.GetWindowTextLength();
    m_fieldEdit.GetWindowText(newVal.GetBufferSetLength(len),len+1);
  }
  else if (field.type == cli_oid)
  {
    int len, n= m_refSelector.GetCurSel();
    len= m_refSelector.GetLBTextLen(n);

    if (len!=CB_ERR)
    {
      m_refSelector.GetLBText(n, newVal.GetBufferSetLength(len));
    }
  }

  m_view.GetItemText(m_currentEdit, 1, oldVal);
  return (oldVal!=newVal);
}


void CChildFrame::UpdateField()
{
  CStdString newVal;

  TFieldDef& field= m_fieldDefs[m_currentEdit];

  if (!(field.type >=cli_oid && field.type < cli_pasciiz))
    return;

  bool isReference= field.type==cli_oid;

  if (isReference)
  {
    int len, n= m_refSelector.GetCurSel();
    len= m_refSelector.GetLBTextLen(n);
    m_refSelector.GetLBText(n, newVal.GetBufferSetLength(len));
  }
  else
  {
    int len= m_fieldEdit.GetWindowTextLength();
    m_fieldEdit.GetWindowText(newVal.GetBufferSetLength(len),len+1);
  }


  try
  {
    CStdString query;
    query.Format(PLAIN_SQL_SELECT, m_dbTable.c_str(), "current=%oid");
    int statement= cli_statement(m_dbHandle, query);

    if (statement >0)
    {
      int size=FIELD_BUFFER_SIZE;
      cli_column(statement, field.name, field.type, &size, &m_fieldBuffer);
      cli_parameter(statement, "%oid", cli_oid, &m_currentOid);
      cli_fetch(statement, cli_for_update);
      cli_seek(statement, m_currentOid);
      SetItemValue((LPCSTR) newVal, m_currentEdit);
      cli_update(statement);
      cli_free(statement);
      cli_commit(m_dbHandle);
    }

    m_currentEdit= -1;
  }
  catch (dbException exc)
  {
    MessageBox(exc.getMsg(), APP_NAME, MB_OK|MB_ICONEXCLAMATION);
  }
}

void CChildFrame::FillList(CStdString table)
{
  try
  {
    CStdString query, value;
    query.Format(PLAIN_SQL_SELECT, table.c_str(), "");
    int statement= cli_statement(m_dbHandle, query);

    if (statement >0)
    {
      m_refSelector.ResetContent();
      int j=0,r= cli_fetch(statement, cli_view_only);
      cli_get_first(statement);

      do
      {
        int id= cli_get_oid(statement);
        value.Format("#%04X", id);
        m_refSelector.InsertString(j, value);
        m_refSelector.SetItemData(j, id);
        ++j;
      }
      while (cli_get_next(statement) >=0);
    }
  }
  catch (dbException exc)
  {
    MessageBox(exc.getMsg(), APP_NAME, MB_OK|MB_ICONEXCLAMATION);
  }
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
制服丝袜日韩国产| 日韩一区国产二区欧美三区| 国产精品污网站| 国产一区999| 久久亚洲综合色| 国产福利精品一区二区| 久久精品亚洲一区二区三区浴池| 国产一区不卡视频| 亚洲精品老司机| 91精品国产综合久久婷婷香蕉 | 久久66热re国产| 国产三级精品视频| 欧美性感一区二区三区| 国产一区二区三区精品视频| 亚洲综合一区二区精品导航| www国产成人| 在线播放欧美女士性生活| 精品一区二区三区久久| 亚洲黄色性网站| 亚洲精品一线二线三线无人区| av亚洲精华国产精华| 精品一区二区在线观看| 一区二区免费看| 国产精品久久精品日日| 欧美一级午夜免费电影| 欧美视频完全免费看| 99这里只有精品| 91一区二区在线观看| 成人免费电影视频| www.亚洲人| 成人h动漫精品一区二区| 99这里都是精品| 精品国产伦一区二区三区观看方式 | 中文字幕精品综合| 三级欧美韩日大片在线看| 99视频一区二区| 自拍偷在线精品自拍偷无码专区| 国产成人亚洲精品狼色在线| 欧美v国产在线一区二区三区| 蜜桃久久久久久久| 欧美电影免费观看高清完整版在线观看| 亚洲乱码国产乱码精品精小说 | 精品欧美一区二区在线观看 | 欧美日韩精品三区| 日本sm残虐另类| 日韩欧美国产不卡| 成人综合在线网站| 亚洲免费观看在线观看| 欧美一区二区在线免费播放| 国产乱妇无码大片在线观看| 最新高清无码专区| 精品久久国产老人久久综合| 不卡一区二区三区四区| 一个色综合av| 26uuu色噜噜精品一区二区| 91农村精品一区二区在线| 亚洲第一电影网| 国产欧美日韩亚州综合| 欧美日韩黄视频| 成人国产亚洲欧美成人综合网| 一区二区三区在线观看国产| 精品捆绑美女sm三区| 欧美视频一区二区三区| bt7086福利一区国产| 久久99久国产精品黄毛片色诱| 亚洲精品亚洲人成人网在线播放| 日韩亚洲欧美高清| 欧美日韩大陆在线| 在线影视一区二区三区| 岛国精品一区二区| 麻豆精品一区二区av白丝在线| 亚洲欧美日韩成人高清在线一区| 欧美精品一区视频| 337p粉嫩大胆色噜噜噜噜亚洲| 麻豆成人91精品二区三区| 亚洲已满18点击进入久久| 国产日韩欧美精品在线| 国产亚洲一本大道中文在线| 在线看国产日韩| 成人深夜视频在线观看| 国产老肥熟一区二区三区| 亚洲精品福利视频网站| 国产日韩精品一区二区三区| 日韩精品一区国产麻豆| 宅男在线国产精品| 日韩欧美一区二区久久婷婷| 国产午夜精品一区二区三区视频 | 色婷婷综合久久久中文字幕| a亚洲天堂av| 色屁屁一区二区| 欧美日韩亚洲国产综合| 日韩欧美中文一区| 久久久久久毛片| 亚洲妇女屁股眼交7| 国产99久久久精品| 精品国产免费久久| 中文字幕一区二区三区不卡| 亚洲成人综合在线| 美国一区二区三区在线播放| 婷婷中文字幕综合| 国产在线播精品第三| 亚洲成人动漫一区| 国产精品456| 成人午夜在线免费| 欧美性猛交xxxx乱大交退制版| 久久这里只精品最新地址| 人人爽香蕉精品| 欧美另类z0zxhd电影| 国产偷v国产偷v亚洲高清| 最近中文字幕一区二区三区| 日韩高清在线不卡| 日韩国产欧美一区二区三区| 精品一区二区在线观看| 极品少妇xxxx精品少妇偷拍| 久久激情五月激情| 福利视频网站一区二区三区| 国产成人免费xxxxxxxx| 91猫先生在线| 国产欧美一区二区精品性| 亚洲天堂成人网| fc2成人免费人成在线观看播放| 色天天综合色天天久久| 欧美精品少妇一区二区三区 | gogogo免费视频观看亚洲一| 国产suv一区二区三区88区| 国产a区久久久| 337p亚洲精品色噜噜| 欧美激情一区在线观看| 亚洲一区二区三区不卡国产欧美| 国内精品写真在线观看| 欧美午夜精品电影| 国产欧美精品日韩区二区麻豆天美| 亚洲国产精品影院| 欧美日韩国产成人在线免费| 亚洲少妇最新在线视频| 福利91精品一区二区三区| 中文字幕av不卡| 久久福利视频一区二区| 欧美性大战久久久| 久久久精品免费观看| 天涯成人国产亚洲精品一区av| 国产成人激情av| 中文字幕中文字幕在线一区 | 欧美经典一区二区三区| 日韩成人免费看| 久久综合狠狠综合久久激情 | 综合久久久久综合| 欧美α欧美αv大片| 丰满白嫩尤物一区二区| 中文字幕一区二区三区在线不卡| 成人精品一区二区三区中文字幕| 日本一区二区三区免费乱视频| 成人18视频日本| 国产成人综合亚洲91猫咪| 国产精品成人免费精品自在线观看| 久久精工是国产品牌吗| 欧美影视一区在线| 欧美电影免费观看高清完整版| 亚洲一区二区美女| 从欧美一区二区三区| 国产精品网曝门| gogo大胆日本视频一区| 精品久久一区二区| 成人污视频在线观看| 亚洲免费视频中文字幕| 欧美色视频在线观看| 香蕉影视欧美成人| 欧美精品乱码久久久久久按摩| 成人精品亚洲人成在线| 一区二区三区四区高清精品免费观看| 欧美性受极品xxxx喷水| 精品亚洲国产成人av制服丝袜| 中文字幕亚洲综合久久菠萝蜜| 欧美人动与zoxxxx乱| 色综合天天狠狠| 色视频欧美一区二区三区| 国产精品伊人色| 精品一区二区三区久久久| 一区二区不卡在线播放| 亚洲日本成人在线观看| 亚洲色图丝袜美腿| 欧美另类videos死尸| 久久电影网电视剧免费观看| 日韩欧美自拍偷拍| 成人一区二区视频| 亚洲欧洲日韩一区二区三区| 欧美性色综合网| 一本色道久久加勒比精品 | 欧美激情一区二区| 91亚洲精品久久久蜜桃网站| 亚洲精品第1页| 国产精品伦理一区二区| 欧美性生活大片视频| 日韩成人av影视| 亚洲一区二区三区不卡国产欧美| 国产精品欧美一区喷水| 国产高清不卡一区| 麻豆视频一区二区| 日韩精品久久久久久| 亚洲电影激情视频网站|