iCAx开思工具箱

标题: UG的二次开发,实现将prt部件保存到SQL Server数据库 [打印本页]

作者: skystar2001    时间: 2005-6-8 19:14
标题: UG的二次开发,实现将prt部件保存到SQL Server数据库
希望斑竹给我加分:)
下面是主要部分代码
** Author:李响
** 中国地质大学(北京) 2005年6月6日
  tag_t Tag;                    // 定义对象的惟一标识
    char* desc;                    // 定义表达式字符串
    char path[256];                  // 定义保存路径字符串变量
    int closemode = 0;
    UF_PART_save();                  // 保存当前部件
    Tag = UF_PART_ask_display_part();        // 获取当前所显示部件的标识
    UF_PART_ask_description(Tag, [$desc)]      // 获取当前部件的表达式
    UF_PART_ask_part_name(Tag, path);        // 获取当前部件的名称
    UF_UNDO_delete_all_marks();            // 删除所有的标识
    // TODO: 在此添加控件通知处理程序代码
    CString pathname;
    pathname = (LPCSTR)(path);
  
    char* m_pBuffer;                // 定义缓冲区
    CFile file;
    // 只读方式打开部件文件
    if(!file.Open(pathname, CFile::modeRead))
    {
      CString msg;
      msg = "您没有选择prt文件!";
      AfxMessageBox(msg);
      return;
    }
    DWORD m_filelen;                // 用于保存部件文件长度
    m_filelen = (DWORD)file.GetLength();      // 读取部件文件的长度
    m_pBuffer = new char[m_filelen+1];        // 根据文件长度分配数组空间
    if(!m_pBuffer)                  // 如果数组空间不足则返回
    {
      CString msg;
      msg = "无法分配足够的内存空间!";
      AfxMessageBox(msg);
      return;     
    }
    // 读取部件文件到缓冲区中
    if(file.Read(m_pBuffer, m_filelen) != m_filelen)
    {
      CString msg;
      msg = "读取prt文件时出现错误!";
      AfxMessageBox(msg);
      return;
    }
    file.Close();
    // TODO:将部件文件保存到数据库操作
    ADOConn m_AdoConn;                // 定义数据库联接对象
    m_AdoConn.OnInitDBConnect();          // 初始化进行数据库联接     
    // SQL语句,判断如果数据库中已经存在该部件,则先删除在插入!
    _bstr_t vSQL = CString("if exists(select * from mdo where name='") + pathname + CString("') delete from mdo where name='") + pathname + CString("' Insert into mdo(name)values('") + pathname + "')";
    _RecordsetPtr m_pRecord;            // 定义记录集对象
    m_pRecord = m_AdoConn.GetRecordSet(vSQL);    // 执行SQL语句
    vSQL = CString("select * from mdo where name='") + pathname + "'";        // SQL语句
    m_pRecord = m_AdoConn.GetRecordSet(vSQL);    // 执行SQL语句
  
    VARIANT varBLOB;
    SAFEARRAY *psa;                  // 定义数组
    SAFEARRAYBOUND rgsabound[1];
    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = m_filelen;
    psa = SafeArrayCreate(VT_UI1, 1, rgsabound);  // 创建数组
    for(long i=0; i<(long)m_filelen; i++)      // 将缓冲区中的文件写入数组
      SafeArrayPutElement(psa, [$i, m_pBuffer++)]
    varBLOB.vt = VT_ARRAY|VT_UI1;
    varBLOB.parray = psa;
    // 调用AppendChunk函数将文件数据写入image字段
    m_pRecord->GetFields()->GetItem("image")->AppendChunk(varBLO;
    m_pRecord->Update();
    m_AdoConn.ExitConnect();
    CString msg;
    msg = CString("您已经将") +pathname+ CString("保存到资源共享数据库中!");
    AfxMessageBox(msg);
  }
/* Handle errors */
catch ( const UgException &exception )
{
processException( exception );
}
作者: dove616    时间: 2005-6-22 16:18
呵呵,偶是用VB.net实现的




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3