●●●● 基于dialog的程序怎么访问数据库?谢谢 ●●●● 用ado吧,功能强大,操作简单!网上也有不少资料! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在new class的向导中生成一个基于CRecordset的新类如:myrecordset;重载DoFieldExchange(CFieldExchange* pFX){ //{{AFX_FIELD_MAP(b093) pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Text(pFX, _T("[ip地址]"), m_strIP); RFX_Text(pFX, _T("[进程列表 ]"), m_strProList); }在dialog的声明中加入CDatabase db;myrecordset rs;在OnInitDialog()中加入db.Open("odbcname",false,false,"ODBC;UID=userid;PWD=password");rs.m_pDatabase=&db;rs.Open(AFX_DB_USE_DEFAULT_TYPE,"select * from usertable");然后在dialog的classwizard中加入myrecordset作为Foreign class,这样在dialog的classwizard中就可以将控件ID和rs成员关联了. 先在stdafx.h中加入#include <afxdb.h>或者#include <afxdao.h>然后就可以和其他的应用程序一样的使用数据库了 列表框中的内容也可以通过跟rs成员相连写入数据库吗那我想把成员变量直接跟rs成员关联可以吗,这样会比较方便 1.在文件Stdafx.h 文件的末尾添加#include <afxdb.h>2.在文本模式下编辑RC文件,在下面的语句后"#include ""afxprint.rx""//printing/print preview resources\r\n"添加"#include""afxdb.rc""//database resources\r\n"在下面的语句后"#include""afxprint.rc" //printing/print preview resources添加#include"afxdb.rc" //database resources m_pSet当然是自己设置的成员变量wizard肯定是可以绑定的注意包含头文件 用odbc 在new class的向导中生成一个基于CRecordset的新类如:myrecordset; myrecordset *m_pSet;但m_pSet->AddNew();编译通过,运行出错如果是基于文档的程序就可以,why? 那该怎么做呢,我在dialog中加了myrecordset *m_pSet数据成员,但只要有m_pSet->就会出错,那位大虾给说说?谢了 是不是只要声明了加了myrecordset *m_pSet就可以使用m_pSet成员访问数据库了?但不行啊,别的还要什么吗 你都没打开数据库,操作怎么会不非法?OnInitDialog()中{CString sDSN="ODBC;DRIVER=Microsoft Access Driver (*.mdb);DSN='';DBQ=aaa.mdb;PWD=aaa"; m_database = new CDatabase; if(!m_database->Open(NULL,FALSE,FALSE,sDSN,FALSE)) { CDialog::EndDialog(0); return FALSE; } CString strSQL="select * from 销售"; m_pSet = new CRecordset(m_database); m_pSet->Open(CRecordset::dynaset,strSQL);} 在头文件里加myrecordset *m_pSet;在OnInitDialog()中加m_pSet->Open();OK了? 再加点分kingzai()():可以QQ联系吗,25109707 http://www.vckbase.com/code/listcode.asp?mclsid=11&sclsid=1105有一个示例,照着看看把 最简单的是ODBC,你建立一个数据源,而后打开数据源,就可以连接上数据库了。 我在inser一个CRecordset类的时候已经指定一个数据源了,但用CRecordset类怎么打开数据源并连接?是sql server 打开数据源是用cdatabase类打开的,我在上面已说过了,如果你需要我可以邦你做个DEMO small_wei(small) :按你的方法做了,现在的问题是,我dialog上的控件ID都已经跟原有的成员变量相关联了,我再将它们跟rs成员相连的时候就不行了,怎么办?我想把rs成员跟ID原来对应的变量直接相连,可以吗? 控件ID只能与一种变量关联,那么与rs成员关联,要么与ID原来对应的变量关联,如果你想与rs成员关联的话,先将与ID想关联的变量删除. 我的那些控件ID试没用的,因为程序界面是要隐藏的,我的目的是想把ID对应的变量跟rs关联,其实就是想把那些变量写入数据库 RS就没有必要与ID关联了,直接使用ID对应的变量给rs内的数据库字段变量付值就行了如你有个ID对应的变量strIP;RFX_Text(pFX, _T("[ip地址]"), m_strIP);//数据库字段变量 RFX_Text(pFX, _T("[进程列表 ]"), m_strProList);写入数据库rs.Edit(); 或rs.AddNew();rs.m_strIP=strIP;rs.update();读出数据库strIP=rs.m_strIP; 楼上的,这个类怎么用?我英文很烂,现在也没时间查msdn了 small_wei(small):我以前就是这样用的,但好像不行,我再试试 我一直是这样做的,没有问题的,出什么错,能不能把程序贴上,或mail给我. 好的,我再试试,如果还不行的话就把程序mail给你 好的问题出在rs.Open(AFX_DB_USE_DEFAULT_TYPE,"select * from 进程监控信息表");这句 数据库打开没有Cdatabase db;db.Open(...);rs.m_pDatabase=&db;//这个很关键 有啊db.Open("new",false,false,"ODBC;UID=kkk;PWD=111"); //new是数据源rs.m_pDatabase=&db;rs.Open(AFX_DB_USE_DEFAULT_TYPE,"select * from 进程监控信息表"); 是sql我已经把工程mail给你了 DoFieldExchange(CFieldExchange* pFX){ //{{AFX_FIELD_MAP(b093) pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Text(pFX, _T("[ip地址]"), m_strIP); RFX_Text(pFX, _T("[进程列表 ]"), m_strProList); }在DoFieldExchange中的变量m_strIP要与你打开的数据库进程监控信息表中的字段一一对应.我在这里测试没有问题 你在DoFieldExchange中定义的变量是由classwizard自动生成的呢,还是手工输入的呢,我感觉这里有问题,你能告诉我进程监控信息表中定义所有的安段吗? 在classwizard中生成的主机名 char 20ip地址 char 15进程号 bigint 8进程名 char 50事件时间 datatime 10事件信息 char 10日期 datatime 10 [dbo].[进程监控信息表].[ip地址]把[dbo].[进程监控信息表]删除,只留下[ip地址]试试 如果你在DoFieldExchange中定义的变量是由classwizard自动生成的话,为什么 RFX_Text(pFX, _T("[事件信息]"), m_strEventMeg); RFX_Text(pFX, _T("[dbo].[进程监控信息表].[ip地址]"), m_strIP);会不同呢??? 因为我这里要对两个表操作啊,出错信息表和进程监控信息表CString CInserRecord::GetDefaultSQL(){ return _T("[dbo].[出错信息],[dbo].[进程监控信息表]");}里面有一些字段是相同的,我就只留其中一个了那个事件内容是出错信息表里的 sql文 select in 的问题 求 sql 语句 |zyciis| 求如何在SQL2005里面生成SQL2000的语句 或者有哪些工具可以生成 谢谢 前几天看了一个贴子,有些地方不清楚 帮忙解决个问题 请问在MSSQL当中怎么高效的实现全文搜索并分页? 日志表的问题 如何删除当前连接在数据库上的所有用户 关于VB6中的ADO采集数据出错的问题!急!急!急!!!!!! 能否将sql的结果集存成文本文件?(sql2000) 请高手指点小弟一下sql查询语句 数据库设计时碰到的问题.UP也有分.
重载
DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(b093)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, _T("[ip地址]"), m_strIP);
RFX_Text(pFX, _T("[进程列表 ]"), m_strProList);
}
在dialog的声明中加入
CDatabase db;
myrecordset rs;
在OnInitDialog()中加入
db.Open("odbcname",false,false,"ODBC;UID=userid;PWD=password");
rs.m_pDatabase=&db;
rs.Open(AFX_DB_USE_DEFAULT_TYPE,"select * from usertable");
然后在dialog的classwizard中加入myrecordset作为Foreign class,这样在dialog的classwizard中就可以将控件ID和rs成员关联了.
stdafx.h
中加入
#include <afxdb.h>
或者
#include <afxdao.h>
然后就可以和其他的应用程序一样的使用数据库了
那我想把成员变量直接跟rs成员关联可以吗,这样会比较方便
#include <afxdb.h>2.在文本模式下编辑RC文件,在下面的语句后
"#include ""afxprint.rx""//printing/print preview resources\r\n"添加
"#include""afxdb.rc""//database resources\r\n"在下面的语句后
"#include""afxprint.rc" //printing/print preview resources
添加
#include"afxdb.rc" //database resources
在new class的向导中生成一个基于CRecordset的新类如:myrecordset;
但
m_pSet->AddNew();编译通过,运行出错如果是基于文档的程序就可以,why?
OnInitDialog()中
{
CString sDSN="ODBC;DRIVER=Microsoft Access Driver (*.mdb);DSN='';DBQ=aaa.mdb;PWD=aaa"; m_database = new CDatabase;
if(!m_database->Open(NULL,FALSE,FALSE,sDSN,FALSE))
{
CDialog::EndDialog(0);
return FALSE;
} CString strSQL="select * from 销售";
m_pSet = new CRecordset(m_database);
m_pSet->Open(CRecordset::dynaset,strSQL);
}
在OnInitDialog()中加m_pSet->Open();
OK了?
有一个示例,照着看看把
我想把rs成员跟ID原来对应的变量直接相连,可以吗?
RFX_Text(pFX, _T("[进程列表 ]"), m_strProList);
写入数据库
rs.Edit(); 或rs.AddNew();
rs.m_strIP=strIP;
rs.update();读出数据库
strIP=rs.m_strIP;
问题出在
rs.Open(AFX_DB_USE_DEFAULT_TYPE,"select * from 进程监控信息表");
这句
Cdatabase db;
db.Open(...);
rs.m_pDatabase=&db;//这个很关键
db.Open("new",false,false,"ODBC;UID=kkk;PWD=111"); //new是数据源
rs.m_pDatabase=&db;
rs.Open(AFX_DB_USE_DEFAULT_TYPE,"select * from 进程监控信息表");
我已经把工程mail给你了
{
//{{AFX_FIELD_MAP(b093)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, _T("[ip地址]"), m_strIP);
RFX_Text(pFX, _T("[进程列表 ]"), m_strProList);
}
在DoFieldExchange中的变量m_strIP要与你打开的数据库进程监控信息表中的字段一一对应.
我在这里测试没有问题
ip地址 char 15
进程号 bigint 8
进程名 char 50
事件时间 datatime 10
事件信息 char 10
日期 datatime 10
把[dbo].[进程监控信息表]删除,只留下[ip地址]试试
RFX_Text(pFX, _T("[事件信息]"), m_strEventMeg);
RFX_Text(pFX, _T("[dbo].[进程监控信息表].[ip地址]"), m_strIP);
会不同呢???
{
return _T("[dbo].[出错信息],[dbo].[进程监控信息表]");
}里面有一些字段是相同的,我就只留其中一个了
那个事件内容是出错信息表里的