有2个问题,每个50分,麻烦各位了

howard 2002-04-11 09:15:41
我用VC++的编写数据库程序,如何打开带密码的ACCESS? [所有相关帖子]
用的是CDAORecordSet类,请问,如果是我自己从CDAORecordSet派生出来的类CMySet;
如何打开带密码的数据库呢?
如果是动态创建的:CDaoDatabase m_db;m_db.openOpen("C:\MyDatabaseFile.mdb",FALSE,FALSE,";PWD=MyPassWord");就不用了.

CMySet public:CDaoRecordSet
使用的时候,我只要 CMySet.Open();就可以了,而且数据绑定是MFC帮你做的,直接赋值就可以了,但要打开有密码的MDB数据库该怎么办?

2:关于注册表的问题

如何创建一个二进制值和DWORD值
如何删除一个项?
顺便告诉我如何创建一个字符串值吧(忘了)
...全文
111 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
howard 2002-04-11
  • 打赏
  • 举报
回复
SORRY,编译没有错误,可是不能创建键值
Swallowdeng_cq 2002-04-11
  • 打赏
  • 举报
回复
HKEY m_key;
DWORD m_dwDispoistion, m_dwLength, m_dwType, m_dwRdLen;
int m_nError;
CString m_strKeyPath;
m_strKeyPath.Format("Software\\123\\789");
m_nError=RegCreateKeyEx(HKEY_CURRENT_USER, m_strKeyPath, NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL, &m_key, &m_dwDispoistion);
在错我就没法了.
howard 2002-04-11
  • 打赏
  • 举报
回复
如果用NULL,好象不能创建值
我不是大明 2002-04-11
  • 打赏
  • 举报
回复
第九个参数你用了DWORD,但要求的是 const long型的!
howard 2002-04-11
  • 打赏
  • 举报
回复
RegCreateKeyEx(HKEY_CURRENT_USER,"\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"
,0,"aa",REG_OPTION_NON_VOLATILE,KEY_CREATE_SUB_KEY,
NULL,&mHkey,REG_CREATED_NEW_KEY);
error C2664: 'RegCreateKeyExA' : cannot convert parameter 9 from 'const long' to 'unsigned long *'

按照MSDN写的,为什么有错误?
Swallowdeng_cq 2002-04-11
  • 打赏
  • 举报
回复
想一想,你要把打开的键放在那?OK!对了就是放你刚定义的HKEY
HKEY m_mykey;
RegCreateKeyEx(
HKEY hKey, // handle to open key
LPCTSTR lpSubKey, // subkey name
DWORD Reserved, // reserved
LPTSTR lpClass, // class string
DWORD dwOptions, // special options
REGSAM samDesired, // desired security access
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // inheritance
PHKEY &m_mykey, // 在这呢!
LPDWORD lpdwDisposition // disposition value buffer
);


howard 2002-04-11
  • 打赏
  • 举报
回复
LONG RegCreateKeyEx(
HKEY hKey, // handle to open key
LPCTSTR lpSubKey, // subkey name
DWORD Reserved, // reserved
LPTSTR lpClass, // class string
DWORD dwOptions, // special options
REGSAM samDesired, // desired security access
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // inheritance
PHKEY phkResult, // key handle
LPDWORD lpdwDisposition // disposition value buffer
);

PHKEY phkResult,这个参数应该写什么?
yanglx 2002-04-11
  • 打赏
  • 举报
回复
楼上的朋友说的删除部分不能在Win2000下使用:
删除
void DeleteRegistryKey(HKEY hKeyRoot,char *szSubKey)
{
LONG lErr;
HKEY hkey = NULL;
//Open the key check sub-keys
lErr = RegOpenKeyEx(hKeyRoot,szSubKey,NULL,KEY_ALL_ACCESS,&hkey);
if(lErr==ERROR_SUCCESS) {
FILETIME ftKey;
char achName[MAX_PATH];
DWORD dwcbName;
DWORD dwiKey=0;
//check for subkeys to delete
while(lErr==ERROR_SUCCESS) {
dwcbName = sizeof(achName);
lErr=RegEnumKeyEx(hkey,dwiKey,achName,&dwcbName,0,NULL,NULL,&ftKey);
if(lErr==ERROR_SUCCESS) {
DeleteRegistryKey(hkey,achName);
// ++dwiKey;
}
}
//close the subkey and try to delete it
RegCloseKey(hkey);
lErr = RegDeleteKey(hKeyRoot,szSubKey);
if(lErr!=ERROR_SUCCESS) {
char *szBuf,*szTitle;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|
FORMAT_MESSAGE_IGNORE_INSERTS|
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
0,
lErr,
(LPTSTR)&szBuf,
1,
NULL);
szTitle=new char[512];
sprintf(szTitle,"Unable to delete registry key %s",szBuf);
MessageBox(NULL,szBuf,szTitle,MB_OK);
delete szTitle;
LocalFree(szBuf);
}
}
}
添加
BOOL CRegistry::SetEntry(const int majorKey,
const CString& subKey,
const CString& value)
{
HKEY hMajorKey = 0;
switch (majorKey)
{
case CREGISTRY_SYSTEM:
{
hMajorKey = HKEY_CLASSES_ROOT;
break;
}
case CREGISTRY_USER:
{
hMajorKey = HKEY_CURRENT_USER;
break;
}
case CREGISTRY_MACHINE:
{
hMajorKey = HKEY_LOCAL_MACHINE;
break;
}
default:
return FALSE;

}

CString actualKey, name;
SplitKeyName(subKey, actualKey, name);

HKEY hKey = 0;
long ret = ::RegOpenKeyEx(hMajorKey, (const char *) actualKey,
0, KEY_ALL_ACCESS, & hKey);

if (ret != ERROR_SUCCESS)
{
// Create key
char classType[1];
classType[0] = 0;
DWORD disposition = 0;
ret = ::RegCreateKeyEx(hMajorKey, (const char *) actualKey,
0, classType, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,
& hKey, & disposition);

if (ret != ERROR_SUCCESS)
return FALSE;
}

DWORD reserved = 0;
DWORD type = REG_SZ;
BYTE *buf = new BYTE[value.GetLength() + 1];
strcpy((char *)buf, (const char *) value);
DWORD sz = value.GetLength() + 1;
ret = ::RegSetValueEx(hKey, (const char *) name, reserved, type, buf, sz);
delete[] buf;

::RegCloseKey(hKey);

if (ret == ERROR_SUCCESS)
{
return TRUE;
}
else
return FALSE;
}
zxs218 2002-04-11
  • 打赏
  • 举报
回复
补充,
字符串值 dwType = REG_SZ
zxs218 2002-04-11
  • 打赏
  • 举报
回复
第二个问题:
首先使用RegCreateKeyEx创建一个key,
然后用RegSetValueEx设置值,
二进制值 dwType = REG_BINARY
DWORD值 dwType = REG_DWORD

删除一个值使用RegDeleteValue

详细参照MSDN的Platform SDK: Registry
Swallowdeng_cq 2002-04-11
  • 打赏
  • 举报
回复
那就好,字符串就把REG_DWORD 换成 REG_SZ 二进制就 REG_BINARY不过长度要小心是字节数
howard 2002-04-11
  • 打赏
  • 举报
回复
呵呵~~~放心啦,我的帖子从来没有不给分的,有的每人解决的话,就平分了 呵呵~~~~这个帖子有100分了

再把我送的西一点

二进制和字符串怎么赋值?
Swallowdeng_cq 2002-04-11
  • 打赏
  • 举报
回复
哎!帮人帮到底,送佛送到西,不过要是你不给分我就&#$@!
DWORD m_l;
DWORD m_dwLength;
m_dwLength=4;
m_l=123;
m_nError=RegSetValueEx( m_key, _T("HelloWorld"), NULL, REG_DWORD, (BYTE*)&m_l, m_dwLength);
Swallowdeng_cq 2002-04-11
  • 打赏
  • 举报
回复
REG_OPTION_NON_VOLATILE也许不对,因为我是在window2000下,试一试
REG_OPTION_NON_VOLATILE 和 REG_OPTION_BACKUP_RESTORE
howard 2002-04-11
  • 打赏
  • 举报
回复
RegSetValueEx


怎么用也教教我吧
howard 2002-04-11
  • 打赏
  • 举报
回复
如何创建值呢?这个办法只创建了一个项啊~~~
tuying2 2002-04-11
  • 打赏
  • 举报
回复
关注
howard 2002-04-11
  • 打赏
  • 举报
回复
(HKEY_CURRENT_USER, m_strKeyPath, NULL, "aa",//这里改成字符就没有错,//可是不能创建
REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL, &m_key, &m_dwDispoistion);
Swallowdeng_cq 2002-04-11
  • 打赏
  • 举报
回复
Sorry 要不你新建个对话框试一下把,我的是一写一个准
howard 2002-04-11
  • 打赏
  • 举报
回复
D:\FILES\VC++\Registry\Registry.cpp(60) : warning C4101: 'm_dwType' : unreferenced local variable
D:\FILES\VC++\Registry\Registry.cpp(59) : warning C4101: 'm_dwLength' : unreferenced local variable
D:\FILES\VC++\Registry\Registry.cpp(61) : warning C4101: 'm_dwRdLen' : unreferenced local variable
加载更多回复(2)

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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