(2)uniGUI for C++ builder网站开发之ORACLE数据库访问与操作

uniGUI for C++ builder网站开发之ORACLE数据库访问与操作

(中行雷威 于2018.2.15除夕夜)

(同一个世界,同一个梦想,交流学习C++Builder XE10,传承c++builder的魅力!欢迎各地朋友加入我的QQ群484979943、860634510、299497712,进群密码“BCB”,同时也请将该群号广为宣传,希望能够广集各方高手,共同进步。)

 

本人主笔的国内第一本uniGUI教学资料已诞生,分为cbuilder和delphi两个版本,买代码送手册,需要的朋友可以加入我的QQ技术交流群484979943、860634510、299497712给我(群主)留言。资料简介:https://blog.csdn.net/dlboy2018/article/details/88923832

    最喜欢的就是放大假,最闲不住的也是放大假,每个假期都想鼓捣点什么,也都能鼓捣出点什么。前不久开始研究uniGUI控件,一个牛逼的所见即所得WEB开发工具,uniGUI支持delphi和c builder,但是貌似为delphi而生,用官方的说辞那就是“支持c builder,但是未经过严格测试”。c builder和uniGUI的合作案例少之又少,翻墙无数所获无几。值2018狗年除夕夜,研究一下如何实现oracle数据库访问,分享各位。

【说明】

本文基于uniGUI控件和uniDAC两个控件开发出一个演示WEB程序,实现了对ORACLE数据库的访问。千万别混淆,uniGUI和uniDAC是两个东西:

1、uniGUI是WEB开发控件,官网http://www.unigui.com/,他的安装与配置详见本博客的文章《(1)uniGUI for C++ builder网站开发之uniGUI控件安装和你好世界》

2、uniDAC是万能数据库访问控件,官网https://www.devart.com/unidac/,他的安装与配置详见本博客的文档《UniDAC701 for XE10.2.2 tokyo( c++builder)的安装说明(win7 32 or 64)》

本案例源代码:http://download.csdn.net/download/dlboy2018/10252230

一、设计目标

利用uniGUI和uniDAC开发一个样例程序,实现对数据库的查询、添加、删除和修改。

二、程序设计

1、新建项目

File->New->Other,选择Application Wizard创建新项目,名字叫webDataDemo

yes即可。

2、设置参数

Project-》Options,分别设置includePath和libPath,

1)includePath:

添加我的uniGUI目录:C:\Program Files (x86)\Embarcadero\Studio\19.0\uniGUI

添加我的uniDAC目录:C:\Program Files (x86)\Embarcadero\Studio\19.0\Unidac\Include\Delphi25\Win32

2)libPath

添加我的uniGUI目录:C:\Program Files (x86)\Embarcadero\Studio\19.0\uniGUI

添加我的uniDAC目录:C:\Program Files (x86)\Embarcadero\Studio\19.0\Unidac\Lib\Delphi25\Win32

3)取消动态库连接

4)取消动态包连接

3、创建数据库表student

演示程序共三个字段,分别是姓名、年龄、性别.

4、界面设计

(图1)MainForm窗口

(图2)MainModule窗口

新建的项目默认有MainForm、MainModule、ServerModule三个窗口,其中MainForm是主窗口。上图即为MainForm和MainModule窗口

1)MainForm上放一个UniPanel1:Align属性alTop

2)UniPanel1上放一个UniContainerPanel1:Align属性alTop

3)UniContainerPanel1上放UniLabel1、UniLabel2、UniLabel3三个标签控件,放UniEdit1、UniEdit2、UniEdit3三个输入控件

4)UniPanel1上放四个UniButton,分别为新建、添加、删除、修改按钮。

5)在MainModule(非MainForm上,上图未更新)放置一个UniConnection数据库连接控件、一个OracleUniProvider数据库驱动控件。

6)MainForm上放一个UniDBGrid表格显示控件、两个UniQuery数据库访问控件、一个UniDataSource数据源控件。

7)UniDBGrid控件的Align属性alClient、DataSource属性UniDataSource1

8)UniDataSource1的DataSet属性UniQuery1

9)UniQuery1的Connection属性MainModule.UniConnection1(UniQuery1专门用于关联表格查询显示数据)

10)UniQuery2的Connection属性MainModule.UniConnection1(UniQuery2专门用于增删改数据)

11)MainModule窗口上的UniConnection1的LoginPrompt属性False、ProviderName属性Oracle

5、代码实现

在Main.cpp开头定义全局变量mySql,rowId。

#include <vcl.h>
#include <uniGUIVars.hpp>
#pragma hdrstop

AnsiString mySql,rowId;

AnsiString stuName,stuAge,stuSex;


#include "Main.h"
#include "MainModule.h"

 

1)连接数据库

该功能在MainModule的OnCreate事件中实现

void __fastcall TUniMainModule::UniGUIMainModuleCreate(TObject *Sender)
{
//连接数据库
UniConnection1->Disconnect();
UniConnection1->ProviderName="Oracle";
UniConnection1->SpecificOptions->Add("direct=true");
UniConnection1->Username="system";
UniConnection1->Password="oracle";
UniConnection1->Server="127.0.0.1:1521:ORCL";
try
{
UniConnection1->Connect();
}
catch(...)
{
ShowMessage("连接数据库失败!");
}
}

 

 

2)显示表数据

该功能在MainForm窗口OnActivate激活事件中实现

void __fastcall TMainForm::UniFormActivate(TObject *Sender)
{
MainForm激活事件

//清除输入框内容
UniEdit1->Clear();
UniEdit2->Clear();
UniEdit3->Clear();

//初始显示表格数据
UniQuery1->Close();
UniQuery1->SQL->Clear();
mySql="select stu_name,stu_age,stu_sex,rowid from student";
UniQuery1->SQL->Add(mySql);
UniQuery1->Open();
}

3)新建按钮功能

点击新建按钮,清空各个输入框内数据,第一个输入项聚焦.

void __fastcall TMainForm::UniButton1Click(TObject *Sender)
{
//新建
UniEdit1->Clear();
UniEdit2->Clear();
UniEdit3->Clear();
UniEdit1->SetFocus();
}

4)添加记录

void __fastcall TMainForm::UniButton2Click(TObject *Sender)
{
添加
if(UniEdit1->Text.IsEmpty())
    {
    ShowMessage("姓名不能为空!");
    UniEdit1->SetFocus();
    return;
    }
if(UniEdit2->Text.IsEmpty())
    {
    ShowMessage("年龄不能为空!");
    UniEdit2->SetFocus();
    return;
    }
if(UniEdit3->Text.IsEmpty())
    {
    ShowMessage("性别不能为空!");
    UniEdit3->SetFocus();
    return;
    }

UniQuery2->Close();
UniQuery2->SQL->Clear();
mySql="insert into student values(:p1,:p2,:p3)";
UniQuery2->SQL->Add(mySql);
UniQuery2->ParamByName("p1")->Value=UniEdit1->Text;
UniQuery2->ParamByName("p2")->Value=UniEdit2->Text;
UniQuery2->ParamByName("p3")->Value=UniEdit3->Text;
UniQuery2->ExecSQL();
if(UniQuery2->RowsAffected>0)
    {
    ShowMessage("添加成功!");
    UniQuery1->Refresh();
    }
else
    {
    ShowMessage("添加失败!");
    }
}
 

5)删除选中记录

void __fastcall TMainForm::UniButton3Click(TObject *Sender)
{
删除选中记录
if(UniQuery1->Active && UniQuery1->RecNo>0)
    {
    UniQuery1->Delete();
    UniQuery1->Refresh();
    }
}---------------------------------------------------------------------------

6)选择记录

在UniDBGrid1的OnCellClick事件中添加代码,当选中记录时,记录选中记录的各个变量值。主要是记录选中的行号rowid,用做修改记录的唯一性条件。

void __fastcall TMainForm::UniDBGrid1CellClick(TUniDBGridColumn *Column)
{
表格选中记录
stuName="";
stuAge="";
stuSex="";
rowId="";
if(UniQuery1->Active && UniQuery1->RecNo>0)
    {
    stuName=UniQuery1->FieldByName("stu_name")->AsString;
    stuAge=UniQuery1->FieldByName("stu_age")->AsString;
    stuSex=UniQuery1->FieldByName("stu_sex")->AsString;
    rowId=UniQuery1->FieldByName("rowid")->AsString;

    UniEdit1->Text=stuName;
    UniEdit2->Text=stuAge;
    UniEdit3->Text=stuSex;

    }
}

7)修改记录

void __fastcall TMainForm::UniButton4Click(TObject *Sender)
{
//修改记录
if(UniEdit1->Text.IsEmpty())
    {
    ShowMessage("姓名不能为空!");
    UniEdit1->SetFocus();
    return;
    }
if(UniEdit2->Text.IsEmpty())
    {
    ShowMessage("年龄不能为空!");
    UniEdit2->SetFocus();
    return;
    }
if(UniEdit3->Text.IsEmpty())
    {
    ShowMessage("性别不能为空!");
    UniEdit3->SetFocus();
    return;
    }
UniQuery2->Close();
UniQuery2->SQL->Clear();
mySql="update student set stu_name=:p1,stu_age=:p2,stu_sex=:p3 where rowid=:p4";
UniQuery2->SQL->Add(mySql);
UniQuery2->ParamByName("p1")->Value=UniEdit1->Text;
UniQuery2->ParamByName("p2")->Value=UniEdit2->Text;
UniQuery2->ParamByName("p3")->Value=UniEdit3->Text;
UniQuery2->ParamByName("p4")->Value=rowId;
UniQuery2->ExecSQL();
if(UniQuery2->RowsAffected>0)
    {
    ShowMessage("修改成功!");
    UniQuery1->Refresh();
    }
else
    {
    ShowMessage("修改失败!");
    }

}

三、运行结果

编译程序后,在窗口右下角任务栏将出现一个紫色小图标(坐标:横3纵1),该图标即为你开发后运行起来的web服务器(重新编译前请右键点击该图标,选择shutdown先关闭服务器)。

启动浏览器,输入服务器地址http://localhost:8077回车就可以登录访问你开发的web网站了,运行效果如下:

另外,如果你不喜欢这种窗口的感觉,想要让程序运行后将普通窗口的边框融于浏览器中请将ServerModule的mainFormDisplayMode设置为mfPage(mfWindow为窗口显示模式,如上图),设置后效果如下:

怎么样?表格左下角自动带翻页功能,一切的一切实现起来都要比java web开发简单的太多太多,效果不错吧!

 

四、求助

uniGUI下窗口之间的调用我一直没弄明白,哪位兄台如果弄明白了麻烦到我的QQ群里告诉我,十分感谢。

五、后记

各位,爆竹声声辞旧岁、小狗汪汪迎新春,c++buider的魅力真的是超乎你的想象,国内也小有在用的人群,只可惜互联网上的帖子和书籍太少了,再热闹的迎春晚会也难以抵挡我撰写这篇精品博文的欲望,谨以此篇犒赏一直热衷于c++builder的粉丝们。另外,据互联网消息,c++builder的开发商易博龙正在筹划收购uniGUI控件,让我们翘首以待吧!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值