!!!!!!!!怎么样在VC中不读数据库,直接构造结果集Recordset!!!!!!!

librastar2001 2003-03-21 01:32:14
加精
我怎么样在VC中直接构造结果集而不去读数据库?
VB已经试验成功,但是VC怎么弄?
郁闷!
有答案立马给分!

自己构造结果集的VB代码如下:
dim rsData as New ADODB.Recordset
With rsData
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.MaxRecords = 20
.Fields.Append "S_id", adTinyInt, , adFldRowID
.Fields.Append "X", adSingle, , adFldUpdatable + adFldIsNullable + adFldMayBeNull
.Fields.Append "Y", adSingle, , adFldUpdatable + adFldIsNullable + adFldMayBeNull
End With
rsData.Open
With rsData
For i = 1 To 20
.AddNew
.Fields(0) = i
.Fields(1) = Null
.Fields(2) = Null
.Update
Next
End With
...全文
90 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
librastar2001 2003-04-14
  • 打赏
  • 举报
回复
感谢楼上各位的帮忙!
尤其感谢masterz(MS MVP)与piethy(小陶@厦门) 的帮助!
另有200分感谢masterz(MS MVP)!
winnerkun 2003-04-13
  • 打赏
  • 举报
回复
同意楼上
masterz 2003-04-13
  • 打赏
  • 举报
回复
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile")

#include "stdio.h"
void CreateRsTest();
void PrintRs(_RecordsetPtr rs);

int main(int argc, char* argv[])
{
CoInitialize(NULL);
try
{
CreateRsTest();
}
catch (_com_error &e)
{
printf("Description = '%s',masterz doesn't know what happened\n",
(char*) e.Description());
}
CoUninitialize();
return 0;
}

void CreateRsTest()
{
_RecordsetPtr pRst("ADODB.Recordset");
pRst->put_CursorLocation(adUseClient);
pRst->put_CursorType(adOpenStatic);
pRst->put_MaxRecords(20);
FieldsPtr fds=pRst->GetFields();
fds->Append("S_id", adTinyInt, NULL, adFldRowID);
fds->Append("X", adSingle, NULL,(FieldAttributeEnum)(adFldUpdatable | adFldIsNullable | adFldMayBeNull) );
fds->Append("Y", adSingle, NULL, (FieldAttributeEnum)(adFldUpdatable | adFldIsNullable | adFldMayBeNull));
_variant_t vtEmpty (DISP_E_PARAMNOTFOUND, VT_ERROR);
pRst->Open(vtEmpty,vtEmpty,adOpenStatic, adLockUnspecified,adCmdUnspecified);
for(int i=0;i<20;i++)
{
pRst->AddNew();
_variant_t value1((byte)i);
pRst->Fields->Item[0L]->Value=value1;
pRst->Update();

}
PrintRs(pRst);
}

void PrintRs(_RecordsetPtr rs)
{
FieldsPtr fields=rs->GetFields();
VARIANT varIndex;
VariantInit(&varIndex);
varIndex.vt=VT_I2;
int nFields=fields->GetCount();
FieldPtr field;
long lDefineSize;
for(int i=0;i<nFields;i++)
{
varIndex.iVal=i;
field=fields->Item[varIndex];
_bstr_t fieldname=field->GetName();
lDefineSize=field->GetDefinedSize();
_variant_t fdvalue=field->GetValue();
printf("field name:%s ; defined length %d,actual length:%d\n",(const char*)fieldname,
lDefineSize,field->GetActualSize());
}
}
librastar2001 2003-04-10
  • 打赏
  • 举报
回复
多谢,我看看
librastar2001 2003-04-10
  • 打赏
  • 举报
回复
to: piethy(小陶@厦门) ( ) 你的方法不是我想要得,我需要ADO得解法,不过分会给得,呵呵

我的需求是:
没有任何数据库
直接构造一个Recordset对象(ADO对象)
然后用addnew加入信息,就像是加入数据库的表一样
最后建立一个可操纵的Recordset对象返回给调用者

这些在VB下面已经试验通过,可是VC为什么实现不了呢?
piethy 2003-04-09
  • 打赏
  • 举报
回复
如果答对了别忘了给分啊,hihi
piethy 2003-04-09
  • 打赏
  • 举报
回复
// UpdateRS.cpp : implementation file
//

#include "UpdateRS.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CUpdateRS

IMPLEMENT_DYNAMIC(CUpdateRS, CRecordset)

CUpdateRS::CUpdateRS(CDatabase* pdb)
: CRecordset(pdb)
{
//{{AFX_FIELD_INIT(CUpdateRS)
m_nFields = 1;
//}}AFX_FIELD_INIT
m_nDefaultType = snapshot;
}


CString CUpdateRS::GetDefaultConnect()
{
return m_strDefaultConnectString;
}

CString CUpdateRS::GetDefaultSQL()
{
return m_strTableName;
}

void CUpdateRS::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(CUpdateRS)
pFX->SetFieldType(CFieldExchange::outputColumn);
for (int i=0;i<m_itemList.GetCount();i++)
{
RFX_Text(pFX,m_itemList.GetAt(m_itemList.FindIndex(i)),m_valueList.GetAt(m_valueList.FindIndex(i)));
}
//}}AFX_FIELD_MAP
}

/////////////////////////////////////////////////////////////////////////////
// CUpdateRS diagnostics

#ifdef _DEBUG
void CUpdateRS::AssertValid() const
{
CRecordset::AssertValid();
}

void CUpdateRS::Dump(CDumpContext& dc) const
{
CRecordset::Dump(dc);
}
#endif //_DEBUG

/********************************************************************
Created: 7:1:2003 15:20
Method Name: SetTableName
Parameter List: CString strTableName
Return Value: void
Author: 陶

Purpose: 改变CRecordset实例中的表名,从而动态实现
*********************************************************************/
void CUpdateRS::SetTableName(CString strTableName)
{
if (!strTableName.IsEmpty())
{
m_strTableName = strTableName;
}
}

/********************************************************************
Created: 7:1:2003 15:21
Method Name: AddItem
Parameter List: CString strItem
Return Value: void
Author: 陶

Purpose: 向CRecordset实例中添加数据项,实现动态的字段定义
*********************************************************************/
void CUpdateRS::AddItem(CString strItem)
{
if (!strItem.IsEmpty())
{
m_itemList.AddTail(strItem);
m_valueList.AddTail("");
}
}

/********************************************************************
Created: 7:1:2003 15:22
Method Name: SetFields
Parameter List: int nField
Return Value: void
Author: 陶

Purpose: 设置CRecordset实例中字段的数目
*********************************************************************/
void CUpdateRS::SetFields(int nField)
{
if (0<nField)
{
m_nFields = nField;
}
}
piethy 2003-04-09
  • 打赏
  • 举报
回复
要这个么?不太清楚你的意思
这是我前一段时间写的一个简单的版本,这是h,下一个回帖是cpp
/********************************************************************
created: 2003/01/07
created: 7:1:2003 15:23
filename: g:\project\数据转换\convertdata\updaters.h
file path: g:\project\数据转换\convertdata
file base: updaters
file ext: h
author: 陶



使用代码示例:
CUpdateRS rs;
TRY
{
rs.m_strDefaultConnectString = "ODBC;DSN=abc;UID=abc;PWD=abc";
rs.SetTableName("[ID_PORT].[RK_CK]");
rs.AddItem("[XM]");
rs.AddItem("[SFZ]");
rs.SetFields(2);
rs.Open();
rs.AddNew();
rs.m_valueList.SetAt(rs.m_valueList.FindIndex(0),"abc");
rs.m_valueList.SetAt(rs.m_valueList.FindIndex(1),"123");
rs.Update();
rs.Close();
}
CATCH_ALL(e)
{
e->ReportError();
e->Delete();
}
END_CATCH_ALL;
*********************************************************************/
#if !defined(AFX_UPDATERS_H__4A72E7D0_91F9_4B69_A198_33661A95CFEB__INCLUDED_)
#define AFX_UPDATERS_H__4A72E7D0_91F9_4B69_A198_33661A95CFEB__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// UpdateRS.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CUpdateRS recordset

class CUpdateRS : public CRecordset
{
public:
void SetFields(int nField);
void AddItem(CString strItem);
CStringList m_valueList;
CStringList m_itemList;
void SetTableName(CString strTableName);
CString m_strDefaultConnectString;
CString m_strValue;
CUpdateRS(CDatabase* pDatabase = NULL);
DECLARE_DYNAMIC(CUpdateRS)

// Field/Param Data
//{{AFX_FIELD(CUpdateRS, CRecordset)
//}}AFX_FIELD


// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CUpdateRS)
public:
virtual CString GetDefaultConnect(); // Default connection string
virtual CString GetDefaultSQL(); // Default SQL for Recordset
virtual void DoFieldExchange(CFieldExchange* pFX); // RFX support
//}}AFX_VIRTUAL

// Implementation
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_UPDATERS_H__4A72E7D0_91F9_4B69_A198_33661A95CFEB__INCLUDED_)
maoxianwang 2003-04-08
  • 打赏
  • 举报
回复
不会,蹭分
librastar2001 2003-04-08
  • 打赏
  • 举报
回复
不行,不行,另开贴!
天限天空 2003-04-05
  • 打赏
  • 举报
回复
不度数据库,能构造记录集么?
即使有,又有什么用呢?
===========

可以实现系列化的功能
很方便
cdwy411 2003-04-04
  • 打赏
  • 举报
回复
不度数据库,能构造记录集么?
即使有,又有什么用呢?
天限天空 2003-04-03
  • 打赏
  • 举报
回复
Platform SDK ---> data services -> MDAC -> ADO ->ADOX
librastar2001 2003-04-02
  • 打赏
  • 举报
回复
没有人能回答这个问题吗?
librastar2001 2003-04-01
  • 打赏
  • 举报
回复
ADOX是个什么东东?
怎么MSDN里面搜索不到?
天限天空 2003-03-27
  • 打赏
  • 举报
回复
ADOX
librastar2001 2003-03-27
  • 打赏
  • 举报
回复
to: newkey007(无限天空)
我的这个功能是在COM+中使用的,存在并发用户访问的问题
这样读取指定文件,不可取
天限天空 2003-03-26
  • 打赏
  • 举报
回复
查到了
Dim strConnect As String
strConnect = "Provider=MSPersist"
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "c:\test.xml", strConnect

楼主 如果要在vc中实现这种功能的话 , 可能要用 到 ADOX
这已经是的字段的定义了,adox 应该可以的

天限天空 2003-03-26
  • 打赏
  • 举报
回复
问一下楼主,怎样从保存记录集合的xml文件中将记录读出来?
谢了!
librastar2001 2003-03-26
  • 打赏
  • 举报
回复
真是邪乎。。。
加载更多回复(9)

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧