//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ADOQuery1->Close(); //退出
ServerSocket1->Close();
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString clientAddr = Socket->RemoteAddress;//记录发来信息的客户机地址
AnsiString as = Socket->ReceiveText(); //从客户端获取Text
if(as == "exit")
{
Memo1->Lines->Add(Socket->RemoteHost+"退出");
return;
}
std::string str = as.c_str(); //将AnsiString转换为std::string
std::vector<std::string> v;
split(v, str, "+");
if(v[0]=="query") //如果标识位是 "query",表示客户机要求查询数据库
{
AnsiString result = "";
AnsiString sql = v[1].c_str(); //保存SQL语句主句
int unsigned i;
for(i=2; i<v.size();++i)
{
std::string ss = v[i];
AnsiString astr = ss.c_str(); //std::string转换为AnsiString
result += queryResuit(sql,astr);
}
int n;
for(n=0; n<ServerSocket1->Socket->ActiveConnections;n++)
{
AnsiString crrentAddr = ServerSocket1->Socket->Connections[n]->RemoteAddress;
if(crrentAddr == clientAddr)
ServerSocket1->Socket->Connections[n]->SendText(result);
}
}
}
//---------------------------------------------------------------------------
void TForm1::split(std::vector<std::string>& vec,const std::string& str,const std::string& spe)
{
std::string::size_type pos1,pos2;
pos1 = 0; //起始
pos2 = str.find(spe); //从0位置开始发现分隔符位置
while(pos2!=std::string::npos) //pos2到达最末位置跳出循环
{
vec.push_back(str.substr(pos1,pos2-pos1)); //截取从pos1到pos2之间的字符串
pos1 = pos2 + spe.size(); //更新pos ,向右移动
pos2 = str.find(spe,pos1); //从新的pos1位置开始找
}
if(pos1!=str.length())
vec.push_back(str.substr(pos1));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1Accept(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo1->Lines->Add("客户机"+Socket->RemoteHost+"加入");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnStartClick(TObject *Sender)
{
if(ServerSocket1->Active == true)
{
ServerSocket1->Active = false;
BtnStart->Caption = "开始";
StatusBar1->Panels->Items[0]->Text = "";
}
else
{
ServerSocket1->Active = true; //开启服务
StatusBar1->Panels->Items[0]->Text = "开始监听...";
BtnStart->Caption = "关闭";
}
}
//---------------------------------------------------------------------------
AnsiString TForm1::queryResuit(AnsiString sql, AnsiString field)
{
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(sql);
ADOQuery1->Open(); //打开数据流
return ADOQuery1->FieldByName(field)->AsString; //将字段保存到变量
}
BCB6访问服务端数据库
需积分: 10 137 浏览量
2018-04-15
17:31:50
上传
评论
收藏 845KB RAR 举报
BCB_123_tcx
- 粉丝: 0
- 资源: 1
最新资源
- C#,数值计算-计算实对称矩阵所有特征值和特征向量的雅可比(Jacobi)方法与源程序
- C#图像处理OpenCV开发指南(CVStar,08)-边缘识别之Sobel算法的实例代码
- C/C++,优化算法-使用遗传算法的旅行商问题(traveling-salesman-problem)的源程序
- 操作系统实验二:Linux基本操作
- C/C++,图算法-布伦特循环检测算法(Brent‘s cycle detection algorithm)的源程序
- C/C++,数值计算-快速幂(Quick Pow)的几种算法源代码
- python代码运行后画出图
- C#,数值计算,计算实非对称矩阵的所有特征值和特征向量,简化为Hes-senberg形式,然后进行QR迭代
- windows10-画图
- ME4953-VB一种2个P-Channel沟道SOP8封装MOS管
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈