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
随机推荐
- iOS开发之功能模块--高仿Boss直聘的IM界面交互功能
本人公司项目属于社交类,高仿Boss直聘早期的版本,现在Boss直聘界面风格,交互风格都不如Boss直聘以前版本的好看. 本人通过iPhone模拟器和本人真机对聊,将完成的交互功能通过Mac截屏模拟器 ...
- Linux iptables配置错误导致ORA-12535 & ORA-12170
实验环境: 操作系统 : Red Hat Enterprise Linux Server release 5.7 (Tikanga) 数据库版本: Oracle Databa ...
- SQL Server 2008 master 数据库损坏解决总结
SQL Server 2008 master数据库损坏后,SQL SERVER服务启动失败,查看错误日志,你会看到下面错误信息: 2015-10-27 10:15:21.01 spid6s ...
- PHP无限级分类的实现(不使用递归)
无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在 ...
- JDBC-Oracle
例子: publicclassTestJdbc { public static void main(String[] args)throwsException { //程序入口,并抛出异常 Class ...
- java实现基于activeMQ的消息推送
一. 准备工作 1. 点击此下载相关的第三方jar包,并在工程中引用 二. spring配置文件:application.xml <?xml version="1.0" en ...
- js 输出数组最大值
,,,,]; ]; ; i < run.length; i++) { if (max<run[i]) { max=run[i]; }else{ max=max; } } alert(max ...
- 004.测试解析php,安装discuz
一.配置解析php 编辑nginx配置文件/usr/local/nginx/conf/nginx.conf [root@huh ~]# vim /usr/local/nginx/conf/nginx. ...
- Windows7开机登录界面背景图修改
首先,准备一张文件大小不超过250K的.jpg格式图片,文件名为:BackgroundDefault,图片分辨率建议与屏幕分辨率一致,因为这张背景无法像壁纸一样拉伸或者填充的. 打开这个路径,[C:\ ...
- svm使用的一般步骤
LIBSVM 使用的一般步骤是:1)准备数据集,转化为 LIBSVM支持的数据格式 :[label] [index1]:[value1] [index2]:[value2] ...即 [l类别标号] ...