Programming 版 (精华区)
作 家: compus (蓝天) on board 'programming'
题 目: ODBC-1
来 源: 哈尔滨紫丁香站
日 期: Sun Aug 10 12:23:23 1997
出 处: compus.bbs@bbs.net.tsinghua.edu.cn
有关本文∶
本文收集了本版有关Visual C++中有关ODBC编程方面的有关问题,内容参见概览。
苗扬 于1996.8.23
=======================================================================
概览∶
1. 用一个CRecordset类,有动态访问不同的DataSource的方法吗?
2. ODBC中的乱码?
3. 如何解决"Invalid precision Value"?
=======================================================================
发信人: hey (吟风), 信区: Visual
标 题: ODBC的问题
我在用VISUAL C++1.5做ODBC,有一个问题,
就是用一个CRecordset类,有动态访问不同的DataSource的方法吗?
====> 发信人: tsai.bbs@bbs.ncic1.ac.cn (小菜), 信区: Program
好象没有吧,先有DATA SOURCE, 后有RECORDSET,这是MFC数据库类库的机制决定的。
就好象先登录进数据库后打开TABLE一样的道理。
====> HH_MOLL(苗扬)
VC1.5我没有试过,但VC4.0可以实现访问不同Data Source。
先在ClassWizard中Create一个新类,该类的基类为CRecordSource
这样VC就会提示你输入Data Source。再为新创建的类生成适当的View即可。
当然,用一个类是不行的。
----------------------------------------------------------------------
发信人: seasky@SMTH (zk), 信区: Program
标 题: 求教:使用VC4。0的ODBC的问题。
我在使用VC4。0的ODBC对FOXPRO 的DBF文件进行操作时,发现
从DBF文件读出的中文内容显示出来的是乱码,CSTAR2。0已启动
在WIN95(英文版〕环境下。
====> 发信人: Jeikul@SMTH (Seal), 信区: Program
you can try to use other .DBF driver instead of foxpro driver
such dBaseIII driver for ODBC.
-------------------------------------------------------------------------------
---
发信人: Cjsh@SMTH (朔漠), 信区: Program
标 题: 请问有关VC4.0对数据库进行操作的问题。
我在用VC++4.0做数据库增加新记录时遇到如下问题,请各位网友帮忙.
我的ODBC driver是foxpro2.5,事先我做了一个包括三个域:strname,
studentid,gradyear的数据库,是在forprow2.5 for windows下做的.
然后我定义了一个与该数据库相连的名为CDataSet1的CRecordSet的
继承类,通过对话框类来访问该类的一个对象.但总是出现一个"Invalid
precision Value"的错误.如果将数据库的字段换为整数,则可以正常
操作,我不知道是什么原因,是不是因为在增加字符串时对CString类
的有特殊要求.但我在使用VC++4.0提供的例子Enroll所带的数据库进
行插入新记录的操作时却又能正常完成插入.
附部分程序段:
CAddRecord::CAddRecord(CWnd* pParent /*=NULL*/)
: CDialog(CAddRecord::IDD, pParent)
{
//{{AFX_DATA_INIT(CAddRecord)
m_GradYear = _T("");
m_Name = _T("");
m_StudentID = _T("");
//}}AFX_DATA_INIT
}
.
.
.
void CAddRecord::OnOK()
{
CDataSet1 rsStudent( NULL );
if(rsStudent.Open()){}
rsStudent.AddNew( );
m_GradYear = rsStudent.m_GRADYEAR;
m_Name = rsStudent.m_STRNAME;
m_StudentID = rsStudent.m_STUDENTID;
rsStudent.SetFieldNull(&(rsStudent.m_STUDENTID), FALSE);
UpdateData(TRUE);
rsStudent.m_GRADYEAR=m_GradYear;
rsStudent.m_STRNAME=m_Name;
rsStudent.m_STUDENTID=m_StudentID;
if( !rsStudent.Update( ) ) {
AfxMessageBox( "Record not added; no field values were set." );
}
CDialog::OnOK();
}
UpdateData(TRUE);
> rsStudent.m_GRADYEAR=m_GradYear;
> rsStudent.m_STRNAME=m_Name;
> rsStudent.m_STUDENTID=m_StudentID;
>
> if( !rsStudent.Update( ) )
> {
> AfxMessageBox( "Record not added; no field values were set."
> );
>
> }
> CDialog::OnOK();
> }
====> 发信人: zhangdh@SMTH (Tree), 信区: Program
> void CAddRecord::OnOK()
> {
> CDataSet1 rsStudent( NULL );
> if(rsStudent.Open()){}
> rsStudent.AddNew( );
> m_GradYear = rsStudent.m_GRADYEAR;
> m_Name = rsStudent.m_STRNAME;
> m_StudentID = rsStudent.m_STUDENTID;
// 上面三句干舍?
// 删了试试
//改进建议:
//为什么不直接把dialog的输入Window与dataset的field对应.
-------------------------------------------------------------------------------
----
--
※ 来源:·哈尔滨紫丁香站 bbs1.hit.edu.cn·[FROM: compus.bbs@bbs.net.t]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:5.098毫秒