我想实现这样的功能.
把数据库中所有满足条件的,都列出来.
代码如下:
m_pSet ->MoveFirst ();
do
{
if(m_pSet ->m_area ==2)
{
aa=m_pSet ->m_dometic_name ;
pDC->TextOut (10,20*(b+1),aa);
b++;
}
m_pSet->MoveNext ();}while(!m_pSet->IsEOF());
如果满足条件的m_dometic_name为"张三"上面的代码输出的结果却是:
张三
张三
张三
张三
张三请教各位,这到底是怎么回事啊?
把数据库中所有满足条件的,都列出来.
代码如下:
m_pSet ->MoveFirst ();
do
{
if(m_pSet ->m_area ==2)
{
aa=m_pSet ->m_dometic_name ;
pDC->TextOut (10,20*(b+1),aa);
b++;
}
m_pSet->MoveNext ();}while(!m_pSet->IsEOF());
如果满足条件的m_dometic_name为"张三"上面的代码输出的结果却是:
张三
张三
张三
张三
张三请教各位,这到底是怎么回事啊?
其 m_dometic_name 值为"张三"
啊!!!!
这是错误的, 这个值应该在这个 do ... while 循环体内动态从数据库中读取.即:
m_pSet ->MoveFirst ();
do
{
// 这里获取当前记录的 area 值, 并赋给 m_pSet ->m_area
if(m_pSet ->m_area ==2) // 再来判断是否为 2
{
...
}
m_pSet->MoveNext ();}while(!m_pSet->IsEOF());
只要我多加一个表,如下
CString Cbase::GetDefaultSQL()
{
return _T("[dometic_variety],[a]");}
加入表a
则出错
不加表,只有一个表,则正确
----------------------------------
如果你的 area 在表 abc 中, 且 m_pSet 是表 abc 的 _RecordsetPtr 的结果集
那么这样获取 area 值:
m_pSet->m_area=atoi((LPCTSTR)(_bstr_t)m_pSet->GetCollect("area"));连起来就是:
m_pSet ->MoveFirst ();
do
{
m_pSet->m_area=atoi((LPCTSTR)(_bstr_t)m_pSet->GetCollect("area"));
if(m_pSet ->m_area ==2) // 再来判断是否为 2
{
...
}
m_pSet->MoveNext ();}while(!m_pSet->IsEOF());
您能不能给我说说具体的做发啊?就是m_pSet->m_area=atoi((LPCTSTR)(_bstr_t)m_pSet->GetCollect("area"));直接写进去肯定不行.它提示没有_bstr_t这个类
我现在是建立了一个基于CRecordset的类,加入了两个表.
我该怎么办呢?
发源程序到 [email protected]
m_pSet ->MoveFirst ();
CString str;
short i=0;
do
{
m_pSet->GetFieldValue(i, &str);
m_pSet->m_area=atoi(str);
if(m_pSet ->m_area ==2) // 再来判断是否为 2
{
...
}
m_pSet->MoveNext ();
i++;}while(!m_pSet->IsEOF());
能否先告诉我你的表结构是什么样的? 比如含有 area 的这个表 .
我的表结构是这样的,dometic_id 数字
dometic_name 文本
dometic_knowledge 备注
dometic_character 备注
dometic_area 文本
area 数字
m_pSet->MoveFirst();
do
{
CString str;
m_pSet->GetFieldValue(5, &str); // 获取 area
int area = atoi(str);
if(area == 2) // 再来判断是否为 2
{
str = "";
m_pSet->GetFieldValue(1, &str); // 获取 dometic_name
pDC->TextOut(10,20*(b+1), str);
b++;
}
m_pSet->MoveNext();
}while(!m_pSet->IsEOF());
E:\text\textView.cpp(69) : error C2664: 'void __thiscall CRecordset::GetFieldValue(const char *,class CDBVariant &,short)' : cannot convert parameter 1 from 'const int' to 'const char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
E:\text\textView.cpp(74) : error C2664: 'void __thiscall CRecordset::GetFieldValue(const char *,class CDBVariant &,short)' : cannot convert parameter 1 from 'const int' to 'const char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.请问,查询还有别的方法吗?或者函数吗?
m_pSet->MoveFirst();
do
{
CString str;
m_pSet->GetFieldValue("area", &str);
int area = atoi(str);
if(area == 2)
{
str = "";
m_pSet->GetFieldValue("dometic_name", &str);
pDC->TextOut(10,20*(b+1), str);
b++;
}
m_pSet->MoveNext();
}while(!m_pSet->IsEOF());
do
{
// 这里获取当前记录的 area 值, 并赋给 m_pSet ->m_area
if(m_pSet ->m_area ==2) // 再来判断是否为 2
{
...
}
m_pSet->MoveNext ();}while(!m_pSet->IsEOF());
m_a ->MoveFirst ();
do
{
CString *str;
CString *strr;
CDBVariant varValue;
m_a->GetFieldValue("area", varValue); // 获取 area
strr=varValue.m_pstring ;
int area = atoi(*strr);
if(area == 2) // 再来判断是否为 2
{
m_a->GetFieldValue("dometic_name", varValue); // 获取 dometic_name
str=varValue.m_pstring ;
pDC->TextOut(10,20*(b+1), *str);
b++;
}
m_a->MoveNext ();}while(!m_a->IsEOF());
可是怎么还不行啊,没有错误了,但是程序视图中没有任何显示