马上注册,结交更多同行朋友,交流,分享,学习。
您需要 登录 才可以下载或查看,没有帐号?注册
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 );
} |