一个好用的DBGRID --- VC数据库开发之二

VC DataGrid控件使用总结 MS CDataGrid控件用法详解 本文示例源代码或素材下载 。DataGrid控件是VC方便地用来显示数据的一个极好的网格控件,我不否认网上还有期它不少优秀的网格控件,但我总喜欢使用微软自已的东西 。除非它满足不了我的需要。不是我太依赖Microsoft,你想想,如果你最常用的开发工具是VC,VC是微软的主打开发工具,它与Windows系统的兼容性极好,连它的控件也不例外,你为何不 阅读详情
 一个好用的DBGRID --- VC数据库开发之二
来源: 作者:cool 转自-陈松乐 时间:2005-11-22 点击:1566 次

下载本文配套代码一 (演示CGridCtrl的使用)
下载本文配套代码二 (演示与CMYODBC的配合使用)

一、引言

在用vc开发关于数据库的项目时,通常我们只好用微软的DBGRID作为数据库表格控件,其实微软的DBGRID并不好用,想找一份好的帮助文档都找不 到,并且界面并不友好,比起C++Builder中的DBGRID来说是逊色不少,但是DBGRID在开发数据库的项目中又是常用的控件,所以就一直想找 一个好用的DBGRID,可是网上又没有找到。上次在无意中看到了CGridCtrl(一个很漂亮的表格控件,如果你还没有用过,可以到http://www.codetools.com/miscctrl/gridctrl.asp/下 载,上面还有详细的使用说明)支持虚模式,在这种模式下,即使你向这个表格插入一百万条数据,它并不会真的生成一百万行,而是随着你的滚动条的滚动,计算 出在屏幕上要显示的行和列,然后会向你提供一个接口,通过这个接口,你可以在这儿设置你要显示的数据。这给了我一些启示,我决定用它来做一个 DBGRID。下面的例子是它的一个应用。



二、原理

DBGRID和一般的GRID的不同之处在于,一般的GRID并不适合显示大的数据量,如果你的一个查询结果有上万条记录的话,如果你都要插入到GRID 中,这将是一个很慢的过程,并且你在GRID中移动滚动条的话,它的记录的滚动也是很慢的,而DBGRID并不会真正把这些记录的数据全部插入到控件中, 当DBGRID的滚动条滚动时,它会根据DBGRID的显示面积的大小和查询得到的总的记录数计算出当前应该显示哪那些行,然后会把那几行的记录数据插入 到表格中,这样速度当然是很快的,而且没有数据量多少的限制。

幸运的是,CGridCtrl类已经为我们提供了这种机制,它是采用虚模式的方式,要使用这种方式,按照以下的步骤就可以了:

步骤一 初始化

void SetVirtualMode(TRUE) 设为虚模式
BOOL SetRowCount(int nRows) 设置总的行数。
BOOL SetFixedRowCount(int nFixedRows = 1)设置固定的行数据
BOOL SetColumnCount(int nCols) 设置列数
BOOL SetFixedColumnCount(int nFixedCols = 1)设置固定的列数

步骤二 响应消息 显示数据

我们假设CGridCtrl是放在对话框上,而且它关联的变量是m_Grid,利用ClassWizard添加对话框的OnNotify响应函数。这个响应函数的写法是固定的,类似下面的代码:

BOOL CMyOdbcDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
if (wParam == (WPARAM)m_Grid.GetDlgCtrlID())
{
     *pResult = 1;
     GV_DISPINFO *pDispInfo = (GV_DISPINFO*)lParam;
     if (GVN_GETDISPINFO == pDispInfo->hdr.code)
     {
        /*这是我们自己加的函数,在这个函数里我们设置当前要显示的数据*/
        SetGridItem(pDispInfo);
        return TRUE;
      }
    }
  return CDialog::OnNotify(wParam, lParam, pResult);
}

在上面的代码中,SetGridItem(pDispInfo)是我们自己加的函数,在这个函数里我们设置当前要显示的数据,pDispInfo是一个 GV_DISPINFO的结构体对象,在这个结构中包含了每个单元格的信息,如行号,列号,有没有位图,背景色,前景色等,CGRIDCTRL会在当前要 显示那个单元格时,会把这个单元格的行号,列号传递给我们,我们只要在里面设置要显示的数据就可以了。如下面是一个显示数据的例子。

int CMyOdbcDlg::SetGridItem(GV_DISPINFO *pDispInfo)
{
    pDispInfo->item.strText.Format("row%d,col%d",pDispInfo->item.row, pDispInfo->item.col);
    return 0;
}


通过上面的介绍,我们应该已经会使用CGridCtrl虚模式,下面说明一下用CGridCtrl虚模式做DBGRID的原理,大家都知道,MFC的 CRecordset类支持多种游标机制,如双向游标的,如果我们是用ClassWizard来生成一个查询的CRecordset的派生类的话,那么可 以调用函数CRecordset::SetAbsolutePosition(),用这种方式方式来做DBGRID真是太简单了,因为在上面的int CMyOdbcDlg::SetGridItem(GV_DISPINFO *pDispInfo)函数中,我们已经知道要显示的是哪一行,哪一列的数据,所以只要通过CRecordset:: SetAbsolutePosition(pDispInfo->item.row)函数,把游标定位到那一行,然后获取每个字段的数据就可以了。

但是使用上面的方法有一个不好的地方在于,我们必须用ClassWizard为每个查询从CRecordset派生出新类,这样做很不方便,在VC知识库 第六期上面有一篇介绍“单独使用CRecordset”文章,可是上面的CRecordset打开方式只能使用CRecordset:: forwardOnly,游标只能向前滚动,我们不能使用CRecordset::SetAbsolutePosition()函数,如果要想使用方便的 话,我们必须想别的办法,来提供当前要显示的那个单元格的数据。

我们知道,oracle数据库并不支持双向游标,那么为什么我们用ClassWizard为查询从CRecordset派生的类能够使游标双向移动呢?我 的猜想是这样的,CRecordset类其实把每次获取的数据都保存了下来,并且保存了每行记录所在的位置,这样,当我们调用CRecordset:: SetAbsolutePosition()函数时,它就可以得到我们想要的数据了。不管这种猜想对不对,按照上面的思路已经实现一个很好用的 DBGRID。我把封装成了类COdbcDBGRIDFILE,它实现的原理是首先得到所查询的行数,列数,然后设置CGridCtrl的属性,如把它设 为虚模式,设定CGridCtrl的行数和列数等。然后使用内存映射文件来保存每条记录数据,同时用一个结构体来记录下这条记录所在的位置。

这里有一个小技巧,如果查询的结果有几十万条的话,如果我们一开始就把所有的这些记录都保存在内存映射文件中的话,那么时间要很长,所以根本不能满足应 用,所以我们在开始时,只会获取记录集的一部分用于显示,当用户在CGRIDCTRL上拖动滚动条向下滚动时,它会随着用户的滚动不断的获取数据,这样显 示上面就一点问题也没有。

三、使用实例

好了,给大家说了这么多,下面就看看如何使用这个封装好的类COdbcDBGRIDFILE 这个类对外的接口只有4个函数可以被调用,下面简单的说明一下这4个函数

COdbcDBGridFILE(CGridCtrl *pGrid = NULL,
CDatabase *pDatabase = NULL,
CString strSql = "",
CString strFilePath = ""); //构造函数,必须把所要的变量传递进去。
int InitGrid();//初始化函数
int SetGridText(GV_DISPINFO *pDispInfo);//被外部函数调用接口,用来返回每个单元格应该显示的
int Release();//释放资源

按照下面的步骤做一遍,你就能够知道它是不是很实用了。

步骤一
新建一个基于对话框的工程,命名为demo2,打开stdafx.h文件,加入#include<afxdb.h>,从例子中把OdbcDBGRIDFILE.h, OdbcDBGRIDFILE.cpp复制到这个工程的目录下,并且加入到工程中,方法是菜单project->add to project->files,选择这二个文件就可以了。不要忘了,你要把CGRIDCTRL类的文件都包含进来。
 
步骤二
在对话框上,按照上面的样例放上一个CURSTOMER CTROL(就是一个人头的那个控件),在属性的CLASS上输入MFCGridCtrl,ID为IDC_GRIDODBC,然后在放上其它编辑框和按钮控件,为四个编辑框控件通过CLASSWIZARD关联变量

CString m_strPass;//口令
CString m_strSource;//数据源名
CString m_strSql;//查询sql
CString m_strUser;//用户名

在类CDemo2Dlg中加入下面的几个成员变量

CGridCtrl m_Grid;
COdbcDBGRIDFILE *m_pMapFile;
CImageList m_ImageList;
CDatabase m_db;

当然你要在CDemo2Dlg的声明文件中加入
#include "gridctrl.h"
#include "OdbcDBGRIDFILE.h"

在CDemo2Dlg::DoDataExchange(CDataExchange* pDX)函数中加入DDX_Control(pDX, IDC_GRIDODBC, m_Grid);
在CDemo2Dlg的构造函数中加入m_pMapFile = NULL;

步骤三
用ClassWizard生成CDemo2Dlg的CDemo2Dlg::OnNotify消息响应函数,在这个函数中,输入如下的代码

BOOL CDemo2Dlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
if (wParam == (WPARAM)m_Grid.GetDlgCtrlID())
{
   *pResult = 1;
   GV_DISPINFO *pDispInfo = (GV_DISPINFO*)lParam;
   if (GVN_GETDISPINFO == pDispInfo->hdr.code)
   {
      SetGridItem(pDispInfo);
      return TRUE;
    }
  }
 return CDialog::OnNotify(wParam, lParam, pResult);
}

在上面的代码中,SetGridItem(pDispInfo)是我们自己加的函数,在这个函数里我们设置当前要显示的数据

步骤四
为CDemo2Dlg加入查询按钮的响应函数OnBtnquery()
下面是这个函数的代码
void CDemo2Dlg::OnBtnquery()
{
this->Release();/*这个函数用于释放资源的*/
CString strConn;
UpdateData(TRUE);
strConn.Format("ODBC;DSN=%s;UID=%s;PWD=%s",m_strSource,m_strUser, m_strPass);
BOOL bResult = m_db.Open(strConn);
if(bResult == FALSE)
{
return;
}/*上面的代码用于连接数据库*/
m_pMapFile = new COdbcDBGRIDFILE(&m_Grid, &m_db, m_strSql, "c://csl.txt");
m_pMapFile->InitGrid();/*初始化函数,用于创建内存映射文件等*/
}

在上面的代码中,调用了COdbcDBGRIDFILE的构造函数,它的原型是

COdbcDBGRIDFILE::COdbcDBGRIDFILE(CGridCtrl *pGrid , CDatabase *pDatabase, CString strSql, CString strFilePath),其中的参数的含义如下

CGridCtrl *pGrid-------是一个指向CGridCtrl的指针
CDatabase *pDatabase------是一个指向Cdatabase的指针,你必须把一个已经连接好的Cdatabase的对象传递进去。
CString strSql------是一个查询语句,如select * from emp;
CString strFilePath-----是一个用于生成内存映射文件的文件的路径

步骤五
为CDemo2Dlg加入成员函数SetGridItem(pDispInfo),这个函数是CDemo2Dlg::OnNotify()中调用的,我们用它来设置显示记录数据。void CDemo2Dlg::SetGridItem(GV_DISPINFO *pDispInfo)
{
/*
在这儿你可自己进行设置,如第一行为查询的字段中文名,
第一行为行的序号等,如果你不进行设置,那么默认会取每
个查询得到的字段名,每一行的序号
*/

m_pMapFile->SetGridText(pDispInfo);

/*
上面的函数只是用来得到了本来,你还可以用它来进行另
外一些属性,如当超过一定的值是显示DBGRID的不同的前
景色和前景色等
*/

}

步骤六
添加成员函数Release(),下面是它的代码,用于释放资源
void CDemo2Dlg::Release()
{
   if(this->m_pMapFile)
    {
       m_pMapFile->Release();
       m_db.Close();
       delete m_pMapFile; m_pMapFile = NULL;
    }
}
在上面的代码中 m_pMapFile->Release()是COdbcDBGRIDFILE的成员函数,用于释放所有的资源。

步骤七
添加对话框的消息响应函数OnClose(),释放所有资源

void CDemo2Dlg::OnClose()
{
   this->Release();
   CDialog::OnClose();
}
完成好上面的工作,你就可以编译运行了,在上面的编辑框上输入数据源名、用户名、口令和查询的sql语句,你就可以试试效果了,你可以找一张大一点的表,最好有几十万条记录来测试一下,这个DBGRID怎么样。

四、总结

使用这个DBGRID的好处在于我们在查询时,不需要进行先绑定的操作,而且它比微软的DBGRID控件方便多了,希望它能为我们用VC开发数据库项目提 高一点效率。如果你看过上一篇文章,用类CMYODBC和CODBCSet来代替MFC的CDatabase和CRecordset的话,那么运行的效率 会有很大的提高,我也写了一个相似的类CMyODBCDBGRIDFile,并且用这个类做了一个样例,就是文章篇头提供的配套代码二。

VB编写的 DBGrid 控件及使用范例 这是我用VB写的一个表格控件,主要采用GDI/GDI+绘制实现的界面效果,支持表格合并、数据编辑、拖动数据等效果,界面美观灵活、可控性强,具体的可看一下Readme.txt 文档的说明和范例代码。 立即下载

相关推荐

vc6 使用 adodc DBgrid 显示数据,使用代码遍历数据,得到行号,得到指定行列的内容

vc6 使用 adodc DBgrid 显示数据,使用代码遍历数据,得到行号,得到指定行、列的内容,使用mfc环境。

Visual C++环境下DBGrid控件的使用

Visual C++环境下DBGrid控件的使用 DBGrid数据表格控件以其短小精悍而深受大家的喜爱,但其如何在Visual C++中使用却很少有文章提及,本文将VC下使用DBGrid的具体步骤简要地介绍给大家。一.前期准备 为了实现DBGrid控件的自动捆绑,我们需要建立一个数据库和与之关联的数据源,本例中我们用Access建立数据库mydat

水上漂的专栏 1163

别再翻手册了!用Materials Studio的Forcite模块,5步搞定复杂溶剂的溶解度参数计算

本文详细介绍了如何使用Materials Studio的Forcite模块,通过5个步骤快速计算复杂溶剂的溶解度参数。从分子建模、结构优化到分子动力学采样,再到最终的内聚能密度计算,该方法大幅提升了石油化工和高分子材料研发中的效率,避免了传统手册查阅和实验的繁琐过程。

weixin_28707739的博客 280

Visual C++2010开发权威指南 中文高清PDF - VC.NET

第一部分Visual C++ 2010开发与新特性第1章Visual C++ 2010开发环境简介 11.1Visual C++ 2010简介 11.2Visual C++ 2010下载安装指南 11.3Visual C++ 2010主要特点与1.3新特性 31.4Visual C++ 2010开发环境操作1.4指南 61.4.1创建Visual C++应用程序...

weixin_34090643的博客 586

深入解析:如何在Visual Studio中高效编译libredwg与libdxfrw

本文详细介绍了在Visual Studio中高效编译libredwg与libdxfrw的完整流程,包括环境配置、源码获取、CMake技巧及常见错误解决方案。针对CAD开发者,提供了从基础编译到项目集成的实用指南,帮助快速处理DWG/DXF文件,提升开发效率。

weixin_29215391的博客 232

【凌智视觉模块】rv1106 部署 pp-humseg 模型

人像分割技术实现摘要 人像分割是利用计算机视觉技术将图像/视频中的人物与背景分离的像素级处理技术。凌智视觉模块基于RV1106芯片开发,支持高效视觉模型部署。当前主流方法包括PP-HumanSeg、BiSeNet等深度学习模型,其中PP-HumanSegV2以96.63% mIoU精度和63FPS手机端速度成为SOTA方案。 实现流程包含: 初始化RKNN模型后端 图像预处理(尺寸调整、颜色空间转换) 执行模型推理 后处理(概率解码、动态阈值分割、形态学优化) 代码实现要点: 使用RKNPU2Backend

m0_50786932的博客 986

个好用的DBGRID --- VC数据库开发

 一、引言在用vc开发关于数据库的项目时,通常我们只好用微软的DBGRID作为数据库表格控件,其实微软的DBGRID并不好用,想找一份好的帮助文档都找不到,并且界面并不友好,比起C++Builder中的DBGRID来说是逊色不少,但是DBGRID在开发数据库的项目中又是常用的控件,所以就一直想找一个好用的DBGRID,可是网上又没有找到。上次在无意中看到了CGridCtrl(一个很漂亮的表格控件,

sxlijieoo1的专栏 1157

【ESP32-S3量产指南】基于Flash下载工具实现Release模式Flash加密与安全配置

本文详细介绍了ESP32-S3量产阶段如何通过Flash下载工具实现Release模式下的Flash加密与安全配置。从加密模式选择、工具配置到分区表优化,提供了一套完整的量产安全解决方案,帮助开发者有效防止固件泄露和篡改,确保设备安全。

weixin_28730131的博客 230

一个好用的DBGRID --- VC数据库开发之二 (copy)

 from http://www.php168.com/html/981/93/93613/1.htm 一个好用的DBGRID --- VC数据库开发之二 [ 录入者:mmcbbs | 时间:2005-04-10 06:01:06 |

of的专栏 1138

Qt Design Studio 入门指南:从零开始打造炫酷UI(详细+实用+轻松上手)

本文是Qt Design Studio的详细入门指南,旨在帮助UI设计新手从零开始轻松打造炫酷界面。文章系统介绍了软件的核心概念、安装步骤、主界面解析,并通过创建一个完整的登录界面实例,手把手教学如何拖拽组件、设置属性、添加交互状态与动画。同时,分享了创建自定义组件、管理资源以及提升效率的实用技巧与常见问题解决方案,让读者能够快速上手并应用于实际项目开发。

devops8pract的博客 588

深度学习简介(框架)

深度学习是一种基于人工神经网络的机器学习方法,它通过模拟人脑的工作原理来解决复杂的数据模式识别问题。这种方法在图像识别、语音识别、自然语言处理等领域取得了显著的进展。深度学习是机器学习的一个子领域,它基于人工神经网络的学习算法,特别是那些具有多层(深层)结构的网络。这些深度神经网络能够学习数据的高级特征和模式。深度学习作为人工智能的关键驱动技术,已经在多个领域展现出其强大的能力。随着研究的深入和技术的发展,深度学习将继续推动人工智能的边界向前发展。

2301_77539454的博客 5351

一个好用的VC DBGRID[图]

本文示例源代码下载 CGridCtrl_demo19_01.zip为演示CGridCtrl的使用   CGridCtrl_demo19_02.zip演示与CMYODBC的配合使用   一、引言   在用vc开发关于数据库的项目时,通常我们只好用微软的DBGRID作为数据库表格控件,其实微软的DBGRID并不好用,想找一份好的帮助文档都找不到,并且界面并不友好,比起C++Builder中...

SurpassLi的专栏 56

TMS320F28335调试跟踪的问题:DSP从上电复位,一直到执行main()的第一条语句之间,都干了些什么,以及CCS调试时程序查找的问题

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1211

CGridCtrl控件(原文来自vc知识库,转载请标明出处)

一、引言 在用vc开发关于数据库的项目时,通常我们只好用微软的DBGRID作为数据库表格控件,其实微软的DBGRID并不好用,想找一份好的帮助文档都找不到,并且界面并不友好,比起C++Builder中的DBGRID来说是逊色不少,但是DBGRID在开发数据库的项目中又是常用的控件,所以就一直想找一个好用的DBGRID,可是网上又没有找到。上次在无意中看到了CGridCtrl(一个很漂亮的表格控件

阿特图 2465

llama2-7b下载并转llama-2-7b-hf

④输入https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/convert_llama_weights_to_hf.py会下载 convert_llama_weights_to_hf.py 文件,我们需要用到这个文件将llama2-7b转成llama-2-7b-hf。③下载完之后是这四个文件,这里我是在windows操作系统中安装的WSL,没有linux操作系统,没办法。

wenling54321的博客 1030

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

StringGrid组件与dbgrid的区别

StringGrid组件主要用来做什么,StringGrid组件主要用在哪些场合? 1、如果要连接数据库,就用DBGrid。不连接数据库的话,比如手动向表格添加数据,将数据保存为自定义文件等可以用StringGrid 2、DBGrid一定要绑定数据源来实现显示数据,但它实现前端与后台数据库的联动,也就是可以直接在DBGrid单元格中修改数据,当光标离开单元格后,数据会自动提交到数据库。Stri...

weixin_30411819的博客 253

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

在动态报表制作中巧用DBGRID

在动态报表制作中巧用DBGRID 作者:未知 时间:2005-08-07 20:59 出处:编程爱好者网              摘要:在动态报表制作中巧用DBGRID分析问题 首先可想到一种笨办法,就是在确定报表中需要显示的字段后,对每一个字段的宽度赋予一个初始值(比如80),对于需要调整的字段再通过编辑框进行输入修改。这样的确可以达到预期目的,但由于不直观,可能需要多次调整,影响了效率和方便

chinalog的专栏 1041

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

VB企业数据信息管理系统(源代码+论文+开题报告+答辩PPT)

现在我国的企业中数据信息的管理水平还停留在纸介质的基础上,这样的机制已经不能适应时代的发展,因为它浪费了许多人力和物力,在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代。控件(ActiveX)是指“空的对象”或者基本对象,是应用程序的图形用户界面的一个组件,对其属性可以进行不同的设置,从而构成不同的对象;是为Microsoft最新最强大的数据访问范例OLE DB而设计的,是基于OLE DB之上的技术,因此ADO通过其内部的属性和方法提供统一的数据访问接口方法,是一个便于使用的应用程序层接口。

yushibing717的博客 1526

关于 dbgril 与ado

最近开发需要用上 dbgril 也就是VC 6中 自带的那个微软的 控件 CDataGrid 。上网搜索了N + N 天,就是没一个入手的资料,郁闷,难道都是高手中的高手,可是我都没入门。MSDN 没有,帮助目录中也没有基本使用方法,走了很多弯路啊。终于搞定了入门,现在公布出来大家共享。 首先,要能正常使用这个 dbgril 你在建立工程的时候一定要勾上 使用 ACTIVEX 控件这项,否则死活就

143

Visual C ++经验谈

学习VC是一个艰难的过程。如果在学习的过程中遇到一些经验人士为你指点一二,那么一切都变的那么简单,这里我收录了一些在学习使用VC过程中积累的经验,以期与大家共同进步。1、取得系统时间方法:SYSTEMTIME systime;::GetSystemTime(&systime);CTime time(systime);2、在程序中添加ODBC数据源方法:使用SQLConfigDataSource

tryibest的专栏 838

现流行数据库程序开发工具的比较分析

   1 几种数据库开发工具的介绍  1.1 VB  全称Visual Basic,它是以Basic语言作为其基本语言的一种可视化编程工具。在中国乃至全世界都曾看到过它的身影,它曾是在中国最为流行的编程工具,到现在还占据着非常重要的地位,对于它的好坏大家都有一定的了解,VB作为一种较早出现的开发程序以其容易学习,开发效率较高,具有完善的帮助系统等优点曾影响了好几代编程人员,但是由于VB

网络 人生 学习 进步 5588

wincc 数据库的连接方法

<br />  <br />• WinCC 中如何与本地数据库(如SQL SERVER、ORACLE)进行数据交换?<br />以下的测试将说明如连接远程的数据库:<br />Topic One: ODBC<br />Testing environment:<br />Primary PC with a WinCC, This PC, we named is Server.<br />Secondary PC with a Access DB, This PC, we named is Client.<b

软件开发大神 1万+

Delphi编写数据库程序要点

Delphi是著名的Borland公司开发的可视化软件开发工具。有这样一句话最为经典、贴切的描述了Delphi——“真正的程序员用C,聪明的程序员用Delphi”。很多人把Delphi称为是第四代编程语言,它具有简单、高效、功能强大等特点。和Visual C++比较,Delphi更简单、更易于学习掌握,而在功能上却毫不逊色;和Visual Basic相比,Delphi则功能更强大、更实用。可以说,

技术资料收集站 1600

VC++下借助DBGird控件显示数据库记录

摘要:本文主要讲述了使用DBGird等ActiveX控件来显示Access数据库记录数据的一般方法。    关键字:DBGird控件、ActiveX、Access数据库   一、 引言  随着数据库技术的进一步发展,我们在生活、办公时越来越多地同各式各样的数据库前台程序打着交道,这就要求数据库前台程序必须拥有良好的人机界面,使用户能有一种好的心情方便的同程序进行交互。Microsoft 的Offi

fxpopboy的博客 1152
上一篇: 常见Visual C++开发使用问答(下)
下一篇: 更改Erlang的工作目录收藏
skyremember
博客等级 码龄20年 204粉丝 484原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值