delphi 并发取数据库id问题
这段时间有个项目id频繁出现 id冲突的问题 一真找不到原因 后来想到了个办法 在新建取id时先把到到的id保存起来
上代码 望大神指点下
/// <summary>
/// 到表中的最大id
/// </summary>
/// <param name="fld">字段名--必须是int型</param>
/// <param name="tbl">表名</param>
/// <param name="qrytmp">临时数据集</param>
/// <param name="RdType">字段</param>
/// <returns></returns>
function TMainForm.GetMaxID(fld, tbl: string; qrytmp: tadoQuery; RdType: string): string;
var
s, cId, cCondition: string;
begin
cCondition := ' where cRdType = ' + quotedstr(RdType); s := 'select isnull(max(' + fld + '),0) +1 from ' + tbl; if RdType <> '' then
s := s + cCondition; DoQuery(qrytmp, s, true); cid := qrytmp.Fields[0].AsString; s := 'select count(1) from ' + tbl;
if RdType <> '' then
s := s + cCondition; DoQuery(qrytmp, s); if RdType <> '' then
begin
if qrytmp.Fields[0].AsInteger <= 0 then
begin
s := 'insert yq_GetMaxID (cRdType,cMaxid) values ('
+ quotedstr(RdType) + ',' + cid + ')';
DoQuery(qrytmp, s, false);
end else
begin
s := 'update yq_GetMaxID set cMaxID = ' + cid + cCondition; DoQuery(qrytmp, s, false);
end;
end; result := cid;
end;
yq_GetMaxID是建的一个临时表
如下:
create table yq_GetMaxID
(
id int identity primary key,
cRdType nvarchar(32) default '',--出入库类型
cMaxId int default 0 --这个地方应是i开头
)
执行sql语句如下:
/// <summary>
/// 执行sql语句
/// </summary>
/// <param name="adoquery">数据集</param>
/// <param name="strSQL">sql语句</param>
/// <param name="bOpen">是否执行open</param>
procedure TMainForm.DoQuery(var adoquery: TADOQuery; strSQL: string; bOpen: boolean);
begin
adoquery.close;
adoquery.sql.clear;
adoquery.sql.add(strSQL);
if bopen then
begin
adoquery.Open;
end else
adoquery.ExecSQL; end;
delphi 并发取数据库id问题的更多相关文章
- sql 数据量高并发的数据库优化(转)
Mysql 大数据量高并发的数据库优化 一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实 ...
- 高并发非自增ID如何设计?
博友们一起来讨论下高并发非自增ID如何设计? 底层是很重要的,我最近设计底层,通用底层. 我想跟大家谈论下这个话题: 如何在高并发环境下设计出一套好用的非自增ID的添加操作的解决方案?更新的操作我随机 ...
- 大数据量高并发的数据库优化详解(MSSQL)
转载自:http://www.jb51.net/article/71041.htm 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能. ...
- SqlServer中用@@IDENTITY取最新ID不准的问题
最近遇到了一个SqlServer中用@@IDENTITY取最新ID不准的问题,经过在网上的一番查找,找到了如下资料,略作记录:"一个网友问我一个关于@@IDENTITY的问题.他的数据库中有 ...
- Python--读取数据库
原文地址:https://www.wukong.com/answer/6591280609824342286/?iid=40708017633&app=news_article&sha ...
- python爬虫构建代理ip池抓取数据库的示例代码
爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...
- delphi的取整函数round、trunc、ceil和floor
delphi的取整函数round.trunc.ceil和floor 首先引入math单元 uses math; 1.Round(四舍六入五留双) 功能说明:对一个实数进行四舍五入.(按照银行家算法) ...
- 不能取组织ID
应用 Oracle Purchasing 层 Level Function 函数名 Funcgtion Name PO_POXBWVRP 表单名 Form Name POXBWVRP 说明 Des ...
- 自学Python之路-Python并发编程+数据库+前端
自学Python之路-Python并发编程+数据库+前端 自学Python之路[第一回]:1.11.2 1.3
随机推荐
- 关于C语言函数调用压栈和返回值问题的疑惑
按照C编译器的约定调用函数时压栈的顺序是从右向左,并且返回值是保存在eax寄存器当中.这个命题本该是成立的,下面用一个小程序来反汇编观察执行过程: #include<stdio.h> in ...
- Project、Target、Workspace and Scheme
前言 今天有人问我Target和Project是什么关系?额...学习iOS开发都知道Target和Project的关系.这里我就简单的做了一个总结,而且加入的Scheme和Workspace.如果不 ...
- 在Asp.Net MVC中实现计算页面执行时间及简单流量统计
引用www.rsion.com.dll进您的asp.net MVC项目本人不才,源代码中有详细说明,查看demo修改HomeController public class HomeController ...
- python 函数式编程
1高阶函数 1.1 变量可以指向函数,可以把一个函数赋值给变量 如下代码 >>> f = abs >>> f(10) 10 1.2 变量可以指向函数,函数的形参也能 ...
- vim 使用 YouCompleteMe
当然前提是先装好vundle 1 在vimrv中加入Bundle 'Valloric/YouCompleteMe' 2 vim +PluginInstall +qall 3 安装一对底层需要的编译的东 ...
- SqlServer--查询案例
use MyDataBase1 -- * 表示显示所有列 -- 查询语句没有加where条件表示查询所有行 select *from TblStudent ---只查询表中的部分列 select t ...
- Expdp 导数错误 ORA-00832
问题实验环境 操作系统:Red Hat Enterprise Linux Server release 5.7 (Tikanga) 数据库 :Oracle Database 10g Release ...
- 如何查看Windows服务器运行了多长时间
前言:有时候管理.维护Windows服务器需要定期重启服务器(为什么需要重启,你懂的),但是这个"定期"有时候会受很多因素影响,例如某台服务器忘了重启:某台服务器那个时间段业务繁忙 ...
- 从AdventureWorks学习数据库建模——国际化
前一篇博客我已经把各个实体分析了一遍,从分析中可以看到,这个公司是做本地采购,生产,然后通过网站和门店进行国际销售的.所以这里会涉及到一些国际化的问题.接下来就来分析一下有哪些国际化需要注意的问题和数 ...
- Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(二)
七. 构建临时系统 1. 通用编译指南 a. 确认是否正确设置了 LFS 环境变量 echo $LFS b. 假定你已经正确地设置了宿主系统的符号链接: 1)shell 使用的是 bash. 2)sh ...