讨论一下,为什么强大的vc连vfp都不如?郁闷ing
以前单位有个vfp程序实现两个功能:excel文本通过程序点个按钮就可以直接导入数据库,然后根据数据库的内容选出相关的自带生成一张单子,最后把数据库的记录一条条取出来,打印出一个个单子.为什么这样的程序要改成vc的,却那么难?想到现在,请教到现在还没有头绪.小弟没学过vfp,大概初看了一下,他excel导入access就用了一条语句,然后打印也是.可是vc好像要实现这样的功能是难上加难.虽然说各有所长,但这样的功能并不复杂,求救各位大吓,否则真对vc失去信心了. 问题点数:100、回复次数:17Top
1 楼42252343(大跃进的猪)回复于 2005-05-11 19:26:13 得分 0
不是没VFP功能强大 是实现起来没VF方便Top
2 楼steedhorse(晨星)回复于 2005-05-11 19:29:49 得分 20
“这样的功能并不复杂”?你用C语言做一个试试看哦。:)
其实如果不定义从什么抽象层次开始编程的话,比较难易一点意义都没有。
再比如:使用Word做一幅艺术字易如反掌,但用VC从头做起的确很难?那是不是做艺术字很简单,不,微软的程序员开发Word的这项功能应该也花了不少时间。Top
3 楼wshcdr(dd)回复于 2005-05-11 22:21:39 得分 0
晨星的话大有道理啊
各个开发工具应用侧重点不同,所以用VC去开发数据库的东西,会比较累。Top
4 楼huyoo(空格键)回复于 2005-05-11 22:35:59 得分 0
说不定VFP就是用VC开发的~Top
5 楼krh2001(边城浪子)回复于 2005-05-11 22:47:27 得分 20
Visual Stdio 里的东东 基本上都是用 VC 开发的, 包括 VC本身(自己开发自己)Top
6 楼EDNecromancer()回复于 2005-05-11 23:24:03 得分 0
vc开发数据库的东西比较累,那VC最适合开发什么东西呢?Top
7 楼qrlvls( 空 气 )回复于 2005-05-11 23:43:20 得分 50
呵呵,正好我最近也正在帮老婆写两个用VC操作VFP数据库的代码
数据库操作非常简单,打印部分可以找现成的报表组件
CVFPDatabase::CVFPDatabase()
{
m_bDatabaseOpened = FALSE;
}
CVFPDatabase::~CVFPDatabase()
{
CloseDatabase();
}
//-------------------------------------------------------------------------------
// 描 述: 打开指定的 DBC 数据库
//-------------------------------------------------------------------------------
BOOL CVFPDatabase::OpenDatabase(CString strDBPath)
{
CString strConnectionString;
try
{
CloseDatabase();
m_pConnection.CreateInstance(_T("ADODB.Connection"));
// 根据连接字符串的
strDBPath.MakeUpper();
if (strDBPath.Right(4) == _T(".DBC"))
{
strConnectionString.Format(_T("Driver={Microsoft Visual FoxPro Driver};UID=;PWD=;")
_T("SourceType=DBC;SourceDB=%s;Exclusive=No;BackgroundFetch=No;Collate=Machine;"),
strDBPath);
TRACE(_T("%s\n"), strConnectionString);
}
else
{
strConnectionString.Format(_T("Driver={Microsoft Visual FoxPro Driver};UID=;PWD=;")
_T("SourceType=DBF;SourceDB=%s;Exclusive=No;BackgroundFetch=No;Collate=Machine;"),
strDBPath);
TRACE(_T("%s\n"), strConnectionString);
}
m_pConnection->Open((LPCTSTR)strConnectionString, _T(""), _T(""), adModeUnknown);
m_bDatabaseOpened = TRUE;
}
catch (_com_error e)
{
CloseDatabase();
m_bDatabaseOpened = FALSE;
}
return m_bDatabaseOpened;
}
//-------------------------------------------------------------------------------
// 描 述: 关闭已经被打开的数据库
//-------------------------------------------------------------------------------
void CVFPDatabase::CloseDatabase()
{
try
{
m_pConnection->Close();
}
catch (_com_error e)
{
try
{
m_pConnection.Release();
}
catch (_com_error e)
{
}
}
m_bDatabaseOpened = FALSE;
}
//-------------------------------------------------------------------------------
// 描 述: 检测数据库是否被打开
//-------------------------------------------------------------------------------
BOOL CVFPDatabase::IsOpened()
{
return m_bDatabaseOpened;
// return TRUE;
}
Top
8 楼qrlvls( 空 气 )回复于 2005-05-11 23:44:05 得分 10
忘了拿新版本出来了
BOOL CsVFPDatabase::OpenDatabase(LPCTSTR szDatabase, LPCTSTR szUser, LPCTSTR szPassword, long lOption)
{
CString strDatabase(szDatabase);
CString strConnectionString;
// 根据数据库名称创建连接字符串
strDatabase.MakeUpper();
if (strDatabase.Right(4) == _T(".DBC"))
{
strConnectionString.Format(_T("Driver={Microsoft Visual FoxPro Driver};UID=;PWD=;")
_T("SourceType=DBC;SourceDB=%s;Exclusive=No;BackgroundFetch=No;Collate=Machine;"),
strDatabase);
}
else
{
strConnectionString.Format(_T("Driver={Microsoft Visual FoxPro Driver};UID=;PWD=;")
_T("SourceType=DBF;SourceDB=%s;Exclusive=No;BackgroundFetch=No;Collate=Machine;"),
strDatabase);
}
// 连接数据库
return OpenConnection(strConnectionString, szUser, szPassword, lOption);
}
Top
9 楼qrlvls( 空 气 )回复于 2005-05-11 23:45:03 得分 0
void CVFPRecordset::Attach(CVFPDatabase *pdbVFP)
{
if (pdbVFP->IsOpened())
{
m_pDatabase = pdbVFP;
TRACE(_T("AttachDatabase: %08X\n"), m_pDatabase);
}
}
//-------------------------------------------------------------------------------
// 描 述: 执行 SQL 语句
//-------------------------------------------------------------------------------
BOOL CVFPRecordset::ExecuteSQL(CString strSQL)
{
CString strExt;
CString strFileName;
CString strVal;
int i = 0;
if (m_pDatabase == NULL)
return FALSE;
Close();
try
{
m_pRecordset.CreateInstance(_T("ADODB.Recordset"));
m_pRecordset->Open((LPCTSTR)strSQL, _variant_t((IDispatch*)m_pDatabase->m_pConnection, true),
adOpenDynamic, adLockPessimistic, adCmdText);
m_bValid = TRUE;
}
catch (_com_error e)
{
Close();
m_bValid = FALSE;
}
return m_bValid;
}
//---------------------------------------------------------------------------
// 描 述: Excel 读取线程
//---------------------------------------------------------------------------
DWORD WINAPI CMainFrame::__ThreadExcelRead(LPVOID pParameter)
{
CMainFrame *pObj = (CMainFrame*)pParameter;
_Application *pExcelApp;
Workbooks objExcelBooks;
Sheets objExcelSheets;
_Workbook objWorkBook;
_Worksheet objWorkSheet;
COleVariant varOptional(DISP_E_PARAMNOTFOUND, VT_ERROR);
COleVariant varTrue((short)TRUE);
COleVariant varFalse((short)FALSE);
ExcelNode sExcelNode;
int nRow;
CString strExcelFile;
CoInitialize(NULL);
pExcelApp = new _Application;
pExcelApp->CreateDispatch(_T("Excel.Application")); // 创建 Excel 应用程序
objExcelBooks = pExcelApp->GetWorkbooks();
pObj->m_wndStatusBar.SetInformation(pObj->m_strExcelFile, RGB(0, 0, 255));
strExcelFile.Format(_T("%s\\EXCEL\\%s"), pObj->m_strCurrentPath, pObj->m_strExcelFile);
objExcelBooks.Open(strExcelFile,
varFalse, varFalse, varOptional, varOptional, varOptional,
varFalse, varOptional, varOptional, varTrue, varOptional, varOptional, varFalse);
objWorkBook = objExcelBooks.GetItem(COleVariant((short)1));
objExcelSheets = objWorkBook.GetSheets();
objWorkSheet = objExcelSheets.GetItem(COleVariant((short)1));
objWorkSheet.Activate();
// pExcelApp->SetVisible(TRUE); // 显示 Excel 应用程序
nRow = 6;
while (__ExcelReadLine(objWorkSheet, nRow, &sExcelNode))
{
_tcscpy(sExcelNode.szExcel, pObj->m_strExcelFile);
::SendMessage(pObj->m_hWnd, UM_EXCEL_READ_DATA, (WPARAM)&sExcelNode, 0);
nRow ++;
}
objWorkBook.SetSaved(TRUE);
objExcelBooks.Close();
delete pExcelApp;
CoUninitialize();
::SendMessage(pObj->m_hWnd, UM_EXCEL_READ_COMPLETE, 0, 0);
return 0;
}
Top
10 楼wshcdr(dd)回复于 2005-05-12 09:02:18 得分 0
vc开发数据库的东西比较累,那VC最适合开发什么东西呢?
//////////////////////////////////
不仅VC了,用C来开发数据库都比较累
VC适合系统级的开发, 比如驱动。Top
11 楼wangjia184(我就是传说中的。。。。。。SB)回复于 2005-05-12 09:10:26 得分 0
VC适合开发 开发工具啊Top
12 楼elian(elian)回复于 2005-05-12 17:51:18 得分 0
诶,可怜啊.看来还是先去学vfp把!
to空气,不是要vc操作vfp的数据库,是excel数据导入到access!!!Top
13 楼SoLike(思危)回复于 2005-05-12 17:57:27 得分 0
数据库不是VC的特长,但只要有一定的代码积累,开发相关应用也是比较轻松的。
你做VC时间不是太长吧Top
14 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-05-12 18:59:19 得分 0
VC又不是万能,各个工具都有自己的长处和短处Top
15 楼batboys(BatSky)回复于 2005-05-12 19:09:24 得分 0
其实VC是可以开发任何东西的
只是看你想不想得到```
只有你能想到,就会有办法解决的`
至于难与易 不是哪么想的`
Top
16 楼elian(elian)回复于 2005-05-22 16:48:13 得分 0
话虽然这么说的,不过什么都要与时俱进.
今天下午坐在办公室里,就花了一个小时,从没接触过vfp,就搞定了上述的两个问题
有时候觉得vfp也是恨强的
哈哈哈,虽然以前比较bs它,现在才错了知道Top
17 楼newzk(zk)回复于 2005-05-22 17:03:34 得分 0
照你的说法,vc都不如word、excel
你是杀鸡用牛刀Top




