⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbtreeview.cpp.txt

📁 minidatabase一个小型的数据库管理系统。有创建数据库
💻 TXT
📖 第 1 页 / 共 3 页
字号:
   
        table->max_rows      = dlg.m_nMaxRows;   
        table->used_rows = 0;   
   
        table->flags    |= dlg.m_bIsLockTable ? TF_TABLE_LOCK : 0;   
   
        if (hash_insert(&m_hashEditDb, (byte *)table))   
            return;   
           
        // 加入表名称    
        CString strTitle = table->name;   
        NODE_DATA *nd = new NODE_DATA;   
        if (nd)   
        {   
            nd->type = DATA_TYPE_TABLE;   
            nd->data = (BYTE *)table;   
        }   
   
        HTREEITEM hti = InsertTreeNode(m_treeCtrl, NULL, TVI_SORT, strTitle, 2, 2, nd);   
        if (hti)   
        {   
            m_treeCtrl.EnsureVisible(hti);   
            m_treeCtrl.SelectItem(hti);   
        }   
        else if (nd)   
            delete nd;   
    }   
}   
   
void CDbTreeView::OnDeleteTable()    
{   
    // TODO: Add your command handler code here    
       
}   
   
void CDbTreeView::OnEditField()    
{   
    // TODO: Add your command handler code here    
    HTREEITEM  hItem = m_treeCtrl.GetSelectedItem();   
    if (hItem == NULL)   
        return;   
   
    NODE_DATA *nd = (NODE_DATA *)m_treeCtrl.GetItemData(hItem);   
    if (nd == NULL)   
        return;   
       
    BOOL bAlterTable = FALSE;   
    FIELD *f = (FIELD *)nd->data, of;   
    CFieldDlg dlg(this, f);   
    if (dlg.DoModal() == IDOK)   
    {   
        of = *f;   
        of.name = NULL;   
   
        if (stricmp(f->name, dlg.m_strFieldName) != 0)   
        {   
            if (_PM(f->name))   
                delete f->name;   
            f->name = new char[dlg.m_strFieldName.GetLength() + 1];   
            strcpy(f->name, dlg.m_strFieldName);   
   
            m_treeCtrl.SetItemText(hItem, dlg.m_strFieldName);   
        }   
           
        if (f->type != (BYTE)dlg.m_nFieldType)   
        {   
            bAlterTable = TRUE;   
            f->type = (BYTE)dlg.m_nFieldType;   
        }   
        if (f->count != (USHORT)dlg.m_nCount)   
        {   
            bAlterTable = TRUE;   
            f->count = dlg.m_nCount;   
        }   
           
        f->min_value = dlg.m_nMinValue;   
        f->max_value = dlg.m_nMaxValue;   
           
        if ((f->flags & FF_HAVE_DEFAULT)   
            && (f->count > 1)   
            && _PM(f->dv_ptr))   
            delete f->dv_ptr;   
   
        if (dlg.m_bDefaultValue)   
        {   
            f->flags |= FF_HAVE_DEFAULT;   
               
            if (f->count == 1)   
                f->dv_ulong = dlg.m_nDefaultValue;   
            else   
                f->dv_ptr = dlg.m_pDefaultValue;   
        }   
        else   
            f->flags &= ~FF_HAVE_DEFAULT;   
           
        f->flags &= ~FF_NOT_NULL;   
        f->flags |= dlg.m_bIsNotNull ? FF_NOT_NULL : 0;   
           
        // 更改Table数据    
        {   
            HTREEITEM htiParent = m_treeCtrl.GetParentItem(hItem);   
            NODE_DATA *ndTable = (NODE_DATA *)m_treeCtrl.GetItemData(htiParent);   
            TABLE *table = NULL;   
            if (ndTable)   
                table = (TABLE *)ndTable->data;   
            if (table)   
                AlterTable_EditField(table, &of);   
        }   
    }   
}   
   
void CDbTreeView::OnCreateField()    
{   
    // TODO: Add your command handler code here    
    HTREEITEM  hItem = m_treeCtrl.GetSelectedItem();   
    if (hItem == NULL)   
        return;   
       
    NODE_DATA *nd = (NODE_DATA *)m_treeCtrl.GetItemData(hItem);   
    if (nd == NULL)   
        return;   
   
    CFieldDlg dlg(this, NULL);   
    if (dlg.DoModal() == IDOK)   
    {   
        // 放在所有字段的最后    
        HTREEITEM htiParent = NULL;   
        TABLE *table = NULL;   
        NODE_DATA *ndTable = NULL;   
        if (nd->type == DATA_TYPE_TABLE)   
        {   
            table = (TABLE *)nd->data;   
            htiParent = hItem;   
            ndTable = nd;   
        }   
        else if (nd->type == DATA_TYPE_FIELD)   
        {   
            htiParent = m_treeCtrl.GetParentItem(hItem);   
            ndTable = (NODE_DATA *)m_treeCtrl.GetItemData(htiParent);   
            if (ndTable)   
                table = (TABLE *)ndTable->data;   
        }   
        else   
        {   
            htiParent = m_treeCtrl.GetParentItem(hItem);   
            ndTable = (NODE_DATA *)m_treeCtrl.GetItemData(htiParent);   
            if (ndTable)   
                table = (TABLE *)ndTable->data;   
        }   
   
        if(htiParent == NULL || table == NULL)   
            return;   
   
        // 更改表信息    
        FIELD *fields = new FIELD[table->field_count + 1];   
        if (table->field_count > 0)   
            memcpy(fields, table->fields, sizeof(FIELD) * table->field_count);   
        if (_PM(table->fields))   
            delete table->fields;   
        table->fields = fields;   
        table->field_count++;   
   
        // 设置字段信息    
        FIELD *f = fields + (table->field_count - 1);   
        memset(f, 0, sizeof(FIELD));   
           
        f->name = new char[dlg.m_strFieldName.GetLength() + 1];   
        strcpy(f->name, dlg.m_strFieldName);   
           
        f->type = (BYTE)dlg.m_nFieldType;   
        f->count = dlg.m_nCount;   
           
        f->min_value = dlg.m_nMinValue;   
        f->max_value = dlg.m_nMaxValue;   
           
        if (dlg.m_bDefaultValue)   
        {   
            f->flags |= FF_HAVE_DEFAULT;   
               
            if (f->count == 1)   
                f->dv_ulong = dlg.m_nDefaultValue;   
            else   
                f->dv_ptr = dlg.m_pDefaultValue;   
        }   
   
        f->flags |= dlg.m_bIsNotNull ? FF_NOT_NULL : 0;   
   
        // 改变记录大小    
        uint flen = get_field_length(f);   
        table->record_size += flen;   
        // 设置offset&fno    
        f->offset = table->record_size - flen;   
        f->fno = table->field_count - 1;   
   
        // 重新载入表信息    
        LoadTable(m_treeCtrl, htiParent, table);   
        // 更改Table数据    
        AlterTable_CreateField(table, f);   
    }   
}   
   
void CDbTreeView::OnDeleteField()    
{   
    // TODO: Add your command handler code here    
    // 更改Table数据    
    //AlterTable_DeleteField(table, f);    
}   
   
void CDbTreeView::OnEditKey()    
{   
    // TODO: Add your command handler code here    
    HTREEITEM  hItem = m_treeCtrl.GetSelectedItem();   
    if (hItem == NULL)   
        return;   
   
    NODE_DATA *nd = (NODE_DATA *)m_treeCtrl.GetItemData(hItem);   
    if (nd == NULL)   
        return;   
   
    KEY *key = (KEY *)nd->data;   
    HTREEITEM hTableItem = m_treeCtrl.GetParentItem(hItem);   
    if (hTableItem == NULL)   
        return;   
       
    NODE_DATA *nd1 = (NODE_DATA *)m_treeCtrl.GetItemData(hTableItem);   
    if (nd1 == NULL)   
        return;   
    TABLE *table = (TABLE *)nd1->data;   
       
    CKeyDlg dlg(this, table, key);   
    if (dlg.DoModal() == IDOK)   
    {   
        if (!dlg.m_pKeyFields)   
            return;   
   
        if ((key->field_count != (BYTE)dlg.m_nFieldCount) ||    
            memcmp(key->fields, dlg.m_pKeyFields, key->field_count * sizeof(ushort)) != 0)   
        {   
            if (_PM(key->fields))   
                delete key->fields;   
               
            key->field_count = (BYTE)dlg.m_nFieldCount;   
            key->fields = dlg.m_pKeyFields;   
               
            CString strTitle = _T("");   
            for (int m = 0; m < key->field_count; m++)   
            {   
                FIELD *f = table->fields + key->fields[m];   
                strTitle += f->name;   
                if (m < key->field_count - 1)   
                    strTitle += _T(" | ");   
            }   
   
            m_treeCtrl.SetItemText(hItem, strTitle);   
        }   
   
        key->flags &= ~KF_NO_SAME;   
        key->flags |= dlg.m_bIsNoSame ? KF_NO_SAME : 0;   
    }   
}   
   
void CDbTreeView::OnCreateKey()    
{   
    // TODO: Add your command handler code here    
    HTREEITEM  hItem = m_treeCtrl.GetSelectedItem();   
    if (hItem == NULL)   
        return;   
   
    NODE_DATA *nd = (NODE_DATA *)m_treeCtrl.GetItemData(hItem);   
    if (nd == NULL)   
        return;   
   
    // 放在最后    
    HTREEITEM htiParent = NULL;   
    TABLE *table = NULL;   
    NODE_DATA *ndTable = NULL;   
    if (nd->type == DATA_TYPE_TABLE)   
    {   
        table = (TABLE *)nd->data;   
        htiParent = hItem;   
        ndTable = nd;   
    }   
    else if (nd->type == DATA_TYPE_FIELD)   
    {   
        htiParent = m_treeCtrl.GetParentItem(hItem);   
        ndTable = (NODE_DATA *)m_treeCtrl.GetItemData(htiParent);   
        if (ndTable)   
            table = (TABLE *)ndTable->data;   
    }   
    else   
    {   
        htiParent = m_treeCtrl.GetParentItem(hItem);   
        ndTable = (NODE_DATA *)m_treeCtrl.GetItemData(htiParent);   
        if (ndTable)   
            table = (TABLE *)ndTable->data;   
    }   
   
    if(htiParent == NULL || table == NULL)   
        return;   
   
    if (table->field_count == 0)   
    {   
        MessageBox(_T("请先建立字段列表!"), _T("提示信息"), MB_OK | MB_ICONINFORMATION);   
        return;   
    }   
   
    CKeyDlg dlg(this, table, NULL);   
    if (dlg.DoModal() == IDOK)   
    {   
        if (!dlg.m_pKeyFields)   
            return;   
   
        // 更新表信息    
        KEY *keys = new KEY[table->key_count + 1];   
        if (table->key_count > 0)   
            memcpy(keys, table->keys, sizeof(KEY) * table->key_count);   
        if (_PM(table->keys))   
            delete table->keys;   
        table->keys = keys;   
        table->key_count++;   
   
        // 设置索引信息    
        KEY *key = keys + (table->key_count - 1);   
        memset(key, 0, sizeof(KEY));   
   
        key->fields = dlg.m_pKeyFields;   
        key->field_count = (BYTE)dlg.m_nFieldCount;   
        key->flags |= dlg.m_bIsNoSame ? KF_NO_SAME : 0;   
           
        // 重新载入表信息    
        LoadTable(m_treeCtrl, htiParent, table);   
    }   
}   
   
void CDbTreeView::OnDeleteKey()    
{   
    // TODO: Add your command handler code here    
       
}   
   
/*  
1、编辑字段、增加字段后对表的所有记录进行处理,符合新的表定义  
*/   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -