SQL工廠法

表結構:

exeno? caption? params???????????????????????????? sqlcommand??????????????????????????????????????????????????????????? ?tablename

201???? 登錄??????? @loginname ftsring(20)??? select * from user where loginname=:loginname??? user

?

//author: cxg

unit MySQL;

interface

uses
? SysUtils, ADODB, uFunction;

type
? TMySQL = class(TObject)
? private
??? fExeNo: Integer;
??? fCaption: string;
??? fParams: string;
??? fSqlcommand: string;
??? fTablename: string;
??? fQry: TADOQuery;
??? fValueArr: array[0..49] of Variant;? //最多支持50個參數
??? procedure SetExeNo(Value: integer);
? protected

? public
??? constructor Create;
??? destructor Destroy; override;
??? procedure AddParam(const aValue: Variant);
??? //說明: 添加參數值
??? //參數: const aValue: Variant -- 參數值
??? function GetData: _Recordset;? //非事務性查詢
??? procedure ExeSQL;????????????? //事務性操作
??? procedure BeginTrans;????????? //開始事務
??? procedure CommitTrans;???????? //提交事務
??? procedure RollbackTrans;?????? //回滾事務
??? property ExeNo: Integer read fExeNo write SetExeNo;? //SQL執行序號
? end;

implementation

{ TMySQL }

procedure TMySQL.AddParam(const aValue: Variant);
begin
? fValueArr[fQry.Parameters.Count] := aValue;??
? fQry.Parameters.AddParameter;
end;

procedure TMySQL.BeginTrans;
begin
? fQry.Connection.BeginTrans;
end;

procedure TMySQL.CommitTrans;
begin
? fQry.Connection.CommitTrans;
end;

constructor TMySQL.Create;
begin
? inherited;
? fQry := TADOQuery.Create(nil);
? fQry.Connection := uFunction.GetConnection;
end;

destructor TMySQL.Destroy;
begin
? FreeAndNil(fqry);
? inherited;
end;

procedure TMySQL.ExeSQL;
var
? i: Integer;
begin
? with fQry do
? begin
??? Close;
??? SQL.Clear;
??? SQL.Text := fSqlcommand;
??? if Parameters.Count > 0 then
????? for i := 0 to Parameters.Count - 1 do
??????? Parameters[i].Value := fValueArr[i];
??? ExecSQL;???
? end;?
end;

function TMySQL.GetData: _Recordset;
var
? i: Integer;
begin
? Result := nil;
? with fQry do
? begin
??? Close;
??? SQL.Clear;
??? SQL.Text := fSqlcommand;
??? if Parameters.Count > 0 then
????? for i := 0 to Parameters.Count - 1 do
??????? Parameters[i].Value := fValueArr[i];
??? Open;
??? Result := fQry.Recordset;
? end;
end;

procedure TMySQL.RollbackTrans;
begin
? fQry.Connection.RollbackTrans;
end;

procedure TMySQL.SetExeNo(Value: integer);
var
? aQry: TADOQuery;
begin
? fQry.Parameters.Clear;
? fExeNo := Value;
? aQry := TADOQuery.Create(nil);
? aQry.Connection := uFunction.getconnection;
? with aQry do
? begin
??? Close;
??? SQL.Clear;
??? SQL.Text := 'select * from [sql] where [exeno]=:exeno';
??? Parameters.ParamByName('exeno').Value := fExeNo;
??? Open;
??? if not IsEmpty then
??? begin
????? fCaption := FieldByName('caption').AsString;
????? fParams := FieldByName('params').AsString;
????? fSqlcommand := FieldByName('sqlcommand').AsString;
????? fTablename := FieldByName('tablename').AsString;
??? end;
? end;
? aQry.Free;
end;

end.

?

?

客戶端只需要寫執行號,和參數

客戶端完全沒有sql語句?

MySQL := TMySQL.Create;

? MySQL.ExeNo := 201;

? MySQL.AddParam(Trim(Edit_LoginName.Text));

? MySQL.AddParam(Trim(Edit_LoginPW.Text));

? DS.Data := MySQL.GetData;

??

直接寫sql就是胖客戶

首先安全性差

其次維護不方便

我換個數據庫,我的服務端和客戶端都不需要更改

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252571.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于深度學習和傳統算法的人體姿態估計,技術細節都講清楚了

計算機視覺的一大研究熱點是人體姿態估計,還有很多問題急需解決,比如遮擋,交互等等。在最近的CVPR2020里邊也有很多這方面的工作。本文站長主要是想談談基于深度學習的實時多人姿態估計。 人體姿態估計要干嘛? 關于人類活動規律的…

一些linux知識和http知識

一些linux知識和http知識 1 yum安裝比源碼編譯安裝 有的模塊不能自定義安裝 只能安裝默認的模塊進行安裝 2 關于php的fastcgi 如果使用fastcgi 那么需要啟動服務 如果不使用fastcgi 那么不需要啟動這個服務 3 一個完整的HTTP解析路徑 用戶瀏覽器比如訪問www.123.com/index.…

楊浦區阜盛農民工子弟小學見聞

天氣有些陰沉,起了個大早,一個小時奔波后來到了這里…… 大門口: 校領導: 有些破舊的校舍和陰沉的天空下祖國的希望: 同上,希望…… 期待的目光: 頑皮的笑臉,排著隊也要調皮&#xf…

《構建之法》7

十五章講的是穩定和發布階段。軟件生命周期的最后階段往往是最考驗團隊的。從代碼完成到最終發布軟件,需要經歷:完成代碼、集成測試、Bug修復、Alpha發布、DCR Bug修復、Beta發布、外部測試、RTO等。軟件團隊的各個角色代表,組成會診小組。對…

人體姿態估計算法之open pose

一,openpose是一種自底向上的算法: OpenPose人體姿態識別項目是美國卡耐基梅隆大學(CMU)基于卷積神經網絡和監督學習并以Caffe為框架開發的開源庫。可以實現人體動作、面部表情、手指運動等姿態估計。適用于單人和多人&am…

python練習5

import re from datetime import datetime, timezone, timedeltadef to_timestamp(dt_str, tz_str):# 時間dt_now datetime.strptime(dt_str, %Y-%m-%d %H:%M:%S)#時區tz_num int(re.match(\w{3}([|-]\d):00,tz_str).groups()[0])tz_utc timezone(timedelta(hours tz_num))…

搶火車票這個事吧,其實我也能做!(python黑科技)

2019獨角獸企業重金招聘Python工程師標準>>> 又是一年,馬上就要回家過年了,還沒有買到票的小伙伴們是否已經像熱鍋上的螞蟻了無腦的開始找黃牛了? 俗話說的好,求人不如求自己,搶票這玩意,其實我覺得我也可…

用 Python+openpose 實現抖音尬舞機

游戲開始后,隨著音樂會給出不同的動作提示,用戶按照提示擺出正確動作即可得分。援引官方說法,“尬舞機”主要應用了今日頭條 AI Lab 自主開發的“人體關鍵點檢測技術”,依靠這項技術,抖音能夠檢測到圖像中所包含人體的…

PHP獲取中文字符拼音首字母

在項目中遇到需要把游戲進行字母排序,于是百度到一個格式化的首字母的方法。 /*** name php獲取中文字符拼音首字母* param $str* return null|string*/public function getFirstCharter($str){if (empty($str)) {return ;}$fchar ord($str{0});if ($fchar > or…

Array類型

一、轉換方法 toString() 調用數組的toString()方法會返回由數組中每個值的字符串形式拼接而成的一個以逗號分割的字符串 valueOf() 返回的還是數組 實際上,為了創建這個字符串會調用數組每一項的toString()方法 二、棧方法 push() pop() 只發生在棧的頂部 三…

Create a Service Catalog Request via REST API

http://wiki.servicenow.com/index.php?titleUseful_Catalog_Scripts#Eureka http://wiki.servicenow.com/index.php?titleService_Catalog_Script_API#gsc.tab0 Service Catalog APIhttps://docs.servicenow.com/bundle/istanbul-servicenow-platform/page/integrate/inboun…

MYSQL和JAVA(課堂筆記)

MYSQL  數據庫管理工具 JAVA    編程語言 數據庫驅動(JAVA和MYSQL對接方式) 到官網上下載驅動    加載驅動 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement;public class S…

解密昇騰AI處理器--Ascend310簡介

Ascend310 AI處理器規格 Ascend310 AI處理器邏輯架構 昇騰AI處理器本質上是一個片上系統(System on Chip,SoC),主要可以應用在和圖像、視頻、語音、文字處理相關的應用場景。其主要的架構組成部件包括特制的計算單元、大容量的存儲…

銀盒子掃碼下單在線訂單開啟商品售賣時段使用說明

1,登陸管理員賬號,子賬號下,配置管理--店鋪配置--掃碼下單Tab頁,是否開啟商品售賣時段,選擇“是” 2,在商家后臺登陸相應的子賬號,在店鋪管理--商品售賣時段里配置售賣時間以及相應時段售賣的商…

使用pandas時遇到ValueError: numpy.dtype has the wrong size, try recompiling

[問題]使用pandas時遇到ValueError: numpy.dtype has the wrong size, try recompiling [原因] 這是因為 Python 包的版本問題,例如安裝了較舊版本的 Numpy,但安裝了較新版本的 Pandas。 [解決方法] 查看Numpy版本號 python -c "import numpy; prin…

『Python基礎-12』各種推導式(列表推導式、字典推導式、集合推導式)

# 『Python基礎-12』各種推導式(列表推導式、字典推導式、集合推導式) 推導式comprehensions(又稱解析式),是Python的一種獨有特性。推導式是可以從一個數據序列構建另一個新的數據序列的結構體。 共有三種推導&#x…

海思芯片選型表匯總

海思芯片選型表匯總_「違規用戶」的博客-CSDN博客_海思芯片型號大全

Docker中未指定掛載點容器間volume卷的數據共享

一 背景 在實際使用過程中,我們可能會經常遇到容器間數據共享的情況,怎么處理呢?通過 docker 命令中的一些選項,我們即可完成容器間的數據共享。 二 實驗步驟 2.1 創建容器 容器一:gysl-1 [rootdev ~]# docker run -it…

為什么早上和傍晚的太陽總是紅色,而中午的大陽卻是黃白色?

由太陽光本質決定,但會受環境影響。在地球上和火星上看到的太陽光也是有區別的,和太氣層物質及厚薄也有關系。太陽光是由赤橙黃綠青藍紫七色光組成的復合光是白色光。 在日出和日落的時候,地平線上所透過的大氣層厚度,一般要比白…

js把日期字符串轉換成時間戳

//獲取當前時間: var myDate new Date();//當前時間 var year myDate.getFullYear();//當前年份 var month myDate.getMonth() 1;//當前月份 var day myDate.getDate();//當前日 myDate.getYear(); //獲取當前年份(2位) myDate.getFullYear(); …