?? myado.cpp
字號:
#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace rename ("EOF", "EndOfFile")
#include<iostream>
#include <icrsint.h>
#include <Stdio.h>
#include <string>
using namespace std;
//_COM_SMARTPTR_TYPEDEF 宏定義了一個_com_ptr_t類型的智能(smart)指針IADORecordBingingPtr
_COM_SMARTPTR_TYPEDEF(IADORecordBinding,_uuidof(IADORecordBinding));
//測試函數
inline void TESTHR(HRESULT _hr)
{
if FAILED(_hr)_com_issue_error(_hr);
// FAILED(Status) ((HRESULT)(Status)<0)
}
struct model_info
{ int m_id;//模型ID
string m_name;//模型名稱
float point_x;//點的三維x y z坐標
float point_y;
float point_z;
string m_locate;//存儲的相對路徑
int m_property;//模型屬性
float hit_range;//碰撞檢測范圍
string by_user;//模型所屬用戶名
model_info *next;
};
class CCustomRs: public CADORecordBinding
{
//開始進行數據類型綁定
BEGIN_ADO_BINDING(CCustomRs)
ADO_NUMERIC_ENTRY(1,adInteger,m_ch_aname, 0, 1,m_ul_anameStatus, true)
ADO_VARIABLE_LENGTH_ENTRY2(2,adVarChar,m_ch_bname,sizeof(m_ch_bname),m_ul_bnameStatus,false)
ADO_FIXED_LENGTH_ENTRY2(3,adDouble,m_ch_cname,m_ul_cnameStatus,true)
ADO_FIXED_LENGTH_ENTRY2(4,adDouble,m_ch_dname,m_ul_dnameStatus,true)
ADO_FIXED_LENGTH_ENTRY2(5,adDouble,m_ch_ename,m_ul_enameStatus,true)
ADO_VARIABLE_LENGTH_ENTRY2(6,adVarChar,m_ch_fname,sizeof(m_ch_fname),m_ul_fnameStatus,false)
ADO_FIXED_LENGTH_ENTRY2(3,adDouble,m_ch_gname,m_ul_gnameStatus,true)
ADO_NUMERIC_ENTRY(7,adInteger,m_ch_gname, 4, 1.0000,m_ul_gnameStatus, true)
ADO_FIXED_LENGTH_ENTRY2(3,adDouble,m_ch_hname,m_ul_hnameStatus,true)
ADO_VARIABLE_LENGTH_ENTRY2(7,adVarChar,m_ch_iname,sizeof(m_ch_iname),m_ul_inameStatus,false)
//結束綁定
END_ADO_BINDING()
public:
//定義上述宏中用到的C/C++變量
int m_ch_aname;
char m_ch_bname[22];
double m_ch_cname;
double m_ch_dname;
double m_ch_ename;
char m_ch_fname[22];
int m_ch_gname;
double m_ch_hname;
char m_ch_iname[22];
long m_ul_anameStatus;
long m_ul_bnameStatus;
long m_ul_cnameStatus;
long m_ul_dnameStatus;
long m_ul_enameStatus;
long m_ul_fnameStatus;
long m_ul_gnameStatus;
long m_ul_hnameStatus;
long m_ul_inameStatus;
};
class executedb
{
public: char str[200];
model_info *head;
model_info *p1,*p2;
int n;//
string str1,str2,str3,str4;
int id,property;
float _x,_y,_z,_range;
public :
model_info *search()
{
try
{
p1=p2=new model_info;
head=NULL;
n=0;
_RecordsetPtr pRs("ADODB.Recordset");
CCustomRs rs;
IADORecordBindingPtr picRs(pRs);
pRs->Open(str,"dsn=ourdb;uid=;pwd=;",
adOpenStatic,
adLockOptimistic,adCmdText);
TESTHR(picRs->BindToRecordset(&rs));
while(!pRs->EndOfFile)
{
//給節點賦值
id=rs.m_ch_aname;
str1=rs.m_ch_bname;
_x=rs.m_ch_cname;
_y=rs.m_ch_dname;
_z=rs.m_ch_ename;
str2=rs.m_ch_fname;
property=rs.m_ch_gname;
_range=rs.m_ch_hname;
str3=rs.m_ch_iname;
// printf("Username=%s %s\n",
// (rs.m_ul_bnameStatus==adFldOK?rs.m_ch_bname:"error"),
// (rs.m_ul_fnameStatus==adFldOK?rs.m_ch_fname:"error"));
//將取得的值放在一個鏈表里面~~
p1->m_id=id;
p1->m_name=str1;
p1->point_x=_x;
p1->point_y=_y;
p1->point_z=_z;
p1->m_locate= str2;
p1->m_property=property;
p1->hit_range=_range;
p1->by_user=str3;
n=n+1;
if (n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=new model_info;
pRs->MoveNext();
}
p2->next=NULL;
pRs->Close();
return(head);
}
catch(_com_error &e)
{
printf("Error:\n");
printf("COde=%081x\n",e.Error());
printf("MEANING=%s\n",e.ErrorMessage());
}
}
void executedb::insert()
{
try
{
_RecordsetPtr pRs("ADODB.Recordset");
CCustomRs rs;
IADORecordBindingPtr picRs(pRs);
pRs->Open(str,"dsn=ourdb;uid=;pwd=;",
adOpenStatic,
adLockOptimistic,adCmdText);
}
catch(_com_error &e)
{
printf("Error:\n");
printf("COde=%081x\n",e.Error());
printf("MEANING=%s\n",e.ErrorMessage());
}
}
void executedb::updates()
{
try
{
_RecordsetPtr pRs("ADODB.Recordset");
CCustomRs rs;
IADORecordBindingPtr picRs(pRs);
pRs->Open(str,"dsn=ourdb;uid=;pwd=;",
adOpenStatic,
adLockOptimistic,adCmdText);
}
catch(_com_error &e)
{
printf("Error:\n");
printf("COde=%081x\n",e.Error());
printf("MEANING=%s\n",e.ErrorMessage());
}
}
void executedb::dele()
{
try
{
_RecordsetPtr pRs("ADODB.Recordset");
CCustomRs rs;
IADORecordBindingPtr picRs(pRs);
//調用_Recordset的Open方法取得Recordset對象
pRs->Open(str,"dsn=ourdb;uid=;pwd=;",
adOpenStatic,
adLockOptimistic,adCmdText);
}
catch(_com_error &e)
{
printf("Error:\n");
printf("COde=%081x\n",e.Error());
printf("MEANING=%s\n",e.ErrorMessage());
}
}
};
void main(void){
//初始化COM對象
::CoInitialize(NULL);//
executedb* execu;
execu=new executedb;
strcpy(execu->str,"select * from model_info");
//strcpy(execu->str,"insert into model_info values('2','hehe','1.1','1.1','1.1','wo','2','2.2','dfddd')");
//execu->insert();
model_info *head;
head=execu->search();
//以下注釋掉的是 測試鏈表里面是否有值
model_info *p;
p=head;
string st;
if(head!=NULL)
do
{
cout<<"模型id : "<<p->m_id<<endl;
cout<<"模型名稱: "<<p->m_name<<endl;
cout<<"x坐標: "<<p->point_x<<endl;
cout<<"y坐標: "<<p->point_y<<endl;
cout<<"z坐標: "<<p->point_z<<endl;
cout<<"路徑: "<<p->m_locate<<endl;
cout<<"屬性: "<<p->m_property<<endl;
cout<<"范圍: "<<p->hit_range<<endl;
cout<<"所屬用戶: "<<p->by_user<<endl;
p=p->next;
}while(p!=NULL);
//清除COM對象實例
::CoUninitialize();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -