0
点赞
收藏
分享

微信扫一扫

Delphi7数据库应用开发ADO数据类型为bigint大整数的一个问题

Delphi7数据库应用开发ADO数据类型为bigint大整数的一个问题

用Delphi来开发windows pc桌面数据库应用程序是非常方便,使用自带的VCL控件ADO组件是能非常方便的开发出Windows下数据库应用的。

如果在低版本如Delphi7中使用ADO连接SQLServer,主键ID使用bigint,如果使用雪花算法生成ID,数据位数为18位左右就需要注意:在特定情况会出现一个bug,ADOQuery获取得数据库出来的数据是错的

问题现象

Delphi7数据库应用开发ADO数据类型为bigint大整数的一个问题_UniDac

实际数据库里的内容

Delphi7数据库应用开发ADO数据类型为bigint大整数的一个问题_UniDac_02

这个问题在高版本Delphi已修复,通过第三方UniDac组件测试是能正确显示的,这应该是Delphi7自带的ADO组件有Bug造成的

ADO与UniDAC比较验证结果

Delphi7数据库应用开发ADO数据类型为bigint大整数的一个问题_Delphi_03

所以在使用ADOQuery及雪花算法生成ID就需要特别注意了

附上测试表:SQL

CREATE TABLE [dbo].[tb1] (
  [ID] bigint  NOT NULL primary key ,
  [ID1] varchar(30)  NULL,
  [NAME] varchar(30)   NULL
)
GO

INSERT INTO [dbo].[tb1] ([ID], [ID1], [NAME]) VALUES (N'9261788060926010', N'9261788060926010', N'A1')
GO
INSERT INTO [dbo].[tb1] ([ID], [ID1], [NAME]) VALUES (N'9261788060926011', N'9261788060926011', N'A2')
GO
INSERT INTO [dbo].[tb1] ([ID], [ID1], [NAME]) VALUES (N'9261788060926012', N'9261788060926012', N'A3')
GO
INSERT INTO [dbo].[tb1] ([ID], [ID1], [NAME]) VALUES (N'9261788060926013', N'9261788060926013', N'A4')
GO
INSERT INTO [dbo].[tb1] ([ID], [ID1], [NAME]) VALUES (N'9261788060926014', N'9261788060926014', N'A5')
GO
INSERT INTO [dbo].[tb1] ([ID], [ID1], [NAME]) VALUES (N'9261788060926015', N'9261788060926015', N'A6')
GO
INSERT INTO [dbo].[tb1] ([ID], [ID1], [NAME]) VALUES (N'9261788060926016', N'9261788060926016', N'A7')
GO
INSERT INTO [dbo].[tb1] ([ID], [ID1], [NAME]) VALUES (N'9261788060926017', N'9261788060926017', N'A8')
GO
INSERT INTO [dbo].[tb1] ([ID], [ID1], [NAME]) VALUES (N'9261788060926018', N'9261788060926018', N'A9')
GO
INSERT INTO [dbo].[tb1] ([ID], [ID1], [NAME]) VALUES (N'9261788060926019', N'9261788060926019', N'A10')
GO

举报

相关推荐

0 条评论