旷世难题!!!!!!!!!!!!!!!!!!
可以不可以请教大家一个关于VC的问题,是我最近的一个工程遇到的麻烦,当 程序中加入了打印功能的话,实现打印后,打开数据库就会出错;如果没有打印的话,打开数据库是不会出错的,所以希望大虾们能指教一下,不胜感激!!!!本人邮箱yierhan111@163.com,如果要DEMO程式的请告诉我
部分代码如下:
BOOL CALLBACK DialogData(HWND hdwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
switch(message)
{
case WM_INITDIALOG:
pConn-> Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=HistorRecord.mdb ", " ", " ",adModeUnknown);
pRst-> Open( "select * from HistoryData ",_variant_t((IDispatch*)pConn),adOpenDynamic,adLockOptimistic,adCmdText);
//////////////////////////////////////////////////
显示数据
/////////////////////
pRst-> Close();
pConn-> Close();
pRst.Release();
pConn.Release();
CoUninitialize();
break;
case WM_COMMAND:
switch(LOWORD (wParam))
{
case IDC_BTN_PRINT:
X = Y = 0;
/* initialize PRINTDLG struct */
PrintInit(&printdlg, hdwnd);
if(!PrintDlg(&printdlg)) break;
docinfo.cbSize = sizeof(DOCINFO);
docinfo.lpszDocName = "Printing text ";
docinfo.lpszOutput = NULL;
docinfo.lpszDatatype = NULL;
docinfo.fwType = 0;
strcpy(str, "This is printed on the printer. ");
StartDoc(printdlg.hDC, &docinfo);
StartPage(printdlg.hDC);
for( i=0; i <500; i++)
{
TextOut(printdlg.hDC, X, Y, str, strlen(str));
Y = Y +20;// + tm.tmExternalLeading;
}
EndPage(printdlg.hDC);
EndDoc(printdlg.hDC);
DeleteDC(printdlg.hDC);
break;
default:
break;
}
break;
default:
break;
}
return 0;
}
[解决办法]
有可能是打印的时候改变了当前路径
Source=HistorRecord.mdb 这个地方用绝对路径试试先
如果用绝对路径OK
那么在看一下你的程序有没有用类似于打开文件对话框之类的东西
MFC的CFileDialog会改变系统当前路径的
[解决办法]
pConn-> Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=HistorRecord.mdb ", " ", " ",adModeUnknown);Source=HistorRecord.mdb
这一句的位置引用使用了当前工作路径来定位数据库文件,但是应该正确理解当前工作路径的含义,它是可以变化,也是不确定的。你可以查看一个快捷方式的属性就知道了
最好的办法就是使用当前程序所在的实际目录为基准(GetModuleFileName)加上数据库文件所在的相对位置,这个路径是不会变化。也是稳定的
类语言说法就是GetModuleFileName+ ".\\xxx.mdb " //与程序文件同位置的mdb
GetModuleFileName+ ".\\db\\xxx.mdb " //与程序文件同位置中的db目录下的mdb
GetModuleFileName+ ".\\..\\db\\xxx.mdb " //程序文件位置的上一层目录中的db目录下的mdb