iCAx开思工具箱

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 24551|回复: 1
打印 上一主题 下一主题

UG的二次开发,实现将prt部件保存到SQL Server数据库

[复制链接]
跳转到指定楼层
楼主
发表于 2005-6-8 19:14:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
希望斑竹给我加分:)
下面是主要部分代码
** 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 );
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 支持支持
沙发
发表于 2005-6-22 16:18:58 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手板模型制作,在线3D打印服务

QQ|小黑屋|手机版|开思工具箱 CAD工具箱_CAM工具箱  

GMT+8, 2024-11-23 21:52 , Processed in 0.012839 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表