如何获得自动增量的值

oyj 2011-01-05 01:20:33
主键是自动增量的字段,通过数据窗口新生成一条记录之后,如何获得刚才生成的记录的主键值?
...全文
268 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyj 2011-02-16
  • 打赏
  • 举报
回复
我觉得正解应该是

select @@identity
oyj 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wag_enu 的回复:]
在建DW 的时候选择出那主键列sid,再像上面那样设置Specify Update Properties
并且在给DW 写代码的时候不要操作那个主键列sid.
若是新增的行,该DW 在update() = 1 之后,再取DW 里该……
[/Quote]
若是新增的行,该DW 在update() = 1 之后,再取DW 里该行的sid 即是sid 在DB 里刚写入的自增值。

就是纠结这个问题,怎么能保证取到是刚刚添加的那一行记录?而不是别人添加的记录(假设:RETRIEVE的参数是相同的,或者WHERE子句是一样的)
eviler 2011-01-07
  • 打赏
  • 举报
回复
#12 楼正解

设置上 identity column ,保存后 ,你直接取这个列的值就有了 ,数据窗口会自动填上的
wag_enu 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 komodo_0087 的回复:]
机子未安装数据库 在数据源为externa 显示方式为grid型数据窗口上建立一个256列的串型数据表,除了一列一列定义意外还有什么方法? 我是刚学习PB的菜鸟,在这儿没积分,各位大大帮个忙啊
[/Quote]

朋友,看你在这么多贴后面跟了这个问题啊。。。

参考一下
<DW Control Name>.Modify(&
"create column( id=<an integer> tabsequence=<an integer> accelerator='<a single letter>' moveable=<0 - False, 1 - True> resizeable=<0 - False, 1 - True> pointer='<Arrow!, Cross!, HourGlass!, IBeam!, Icon!, Size!, SizeNESW!, SizeNS!, SizeNWSE!, SizeWE!, UpArrow!, or cursor filename (with path)>' band=<Detail, Footer, Header, Header.<group #>, Summary, Trailer.<group #>, Background, Foreground>" + &
" x='<an integer>' y='<an integer>' bitmapname=<Yes or No> criteria.dialog=<Yes or No> criteria.override_edit=<Yes or No> format='<constant string containing display format (i.e., [general]) for col (can also be an expression)>' alignment='<0 - Left, 1 - Right, 2 - Center>' criteria.required=<Yes or No> height.autosize=<Yes or No> border='<0 - None, 1- Shadow, 2 - Box, 3 - Resize, 4 - Underline, 5 - 3D Lowered, 6 - 3D Raised>' color='<a long>' height='<an integer>' width='<an integer>' name=<string> tag='<string>'"+&
" background.mode='<0 - Opaque, 1 - Transparent>' background.color='<a long>' font.face='<name of type face (i.e., SYSTEM, COURIER)>' font.height='<negative number for points, positive number for PBUs (i.e., -10 = 10 points, 10 = 10 PBUs>' font.weight='<400 - Normal, 700 - Bold>' font.family='<0 - AnyFont, 1 - Roman, 2 - Swiss, 3 - Modern, 4 - Script, 5 - Decorative>' font.pitch='<0 - default, 1 - Fixed, 2 - Variable>' font.charset='<0 - Ansi, 1 - default, 2 - Symbol, 128 - Shift JIS, 255 - OEM>' font.italic='<0 - False, 1 - True>' font.strikethrough='<0 - False, 1 - True>' font.underline='<0 - False, 1 - True>' html.link='<URL (with or without parameters) that is used to generate a link for each row of the particular column>' html.linktarget='<Target frame or window that is used to as part of the generated link for each row of the particular column>' html.linkargs='<argName>='<expr>' [<argName>='<expr>'] ...'"+&
" edit.validatecode=<Yes or No> edit.focusrectangle=<Yes or No> edit.format=<constant string containing display format (i.e., [general]) for col (can also be an expression)> edit.nilisnull=<Yes or No> edit.password=<Yes or No> edit.required=<Yes or No> edit.hscrollbar=<Yes or No> edit.limit=<max number of chars the user can type (0 - 32767)> edit.codetable=<Yes or No> edit.displayonly=<Yes or No> edit.autovscroll=<Yes or No> edit.case=<Any, Upper or Lower> edit.autohscroll=<Yes or No> edit.autoselect=<Yes or No> edit.vscrollbar=<Yes or No> edit.name='<repository style name, if any>') ")

wag_enu 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 oyj 的回复:]
主键是自动增量的字段,通过数据窗口新生成一条记录之后,如何获得刚才生成的记录的主键值?
[/Quote]

不知道这个是不是你要的:


在建DW 的时候选择出那主键列sid,再像上面那样设置Specify Update Properties
并且在给DW 写代码的时候不要操作那个主键列sid.
若是新增的行,该DW 在update() = 1 之后,再取DW 里该行的sid 即是sid 在DB 里刚写入的自增值。
komodo_0087 2011-01-07
  • 打赏
  • 举报
回复
机子未安装数据库 在数据源为externa 显示方式为grid型数据窗口上建立一个256列的串型数据表,除了一列一列定义意外还有什么方法? 我是刚学习PB的菜鸟,在这儿没积分,各位大大帮个忙啊
再无风清扬 2011-01-07
  • 打赏
  • 举报
回复
主键是如何实现自动增量的?通过数据库的方法还是自定义函数?是保存时自动自增吗?你现在的疑问是新增还没保存就得到该自增主健值吗?这有个逻辑先后的问题。
hyf_0023 2011-01-06
  • 打赏
  • 举报
回复
如果是SQL Sqlserver库的话楼上的方法应该可以,但我一在想直接通过DataWindow本身的函数事件实现,试了多次也没成功,唉!
  • 打赏
  • 举报
回复
SELECT TOP 1 主键 from 表 order by 主键 desc
oyj 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 core0 的回复:]
数据保存到数据库后,select max那个主键,where刚插入的非主键内容,那不就能找得到吗
[/Quote]

这个有点意思,不过好像也有点缺陷,我想想。
oyj 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lightsword1 的回复:]
是获得数据库中自增的值?retrieve一下就出来了
[/Quote]

RETRIEVE的参数是什么?除了主键值是唯一的,其他的字段都有可能相同,返回的结果就不只一条记录了。
oyj 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hyf_0023 的回复:]
不是很理解:主键是如何实现自动增量的?通过数据库的方法还是自定义函数?是保存时自动自增吗?你现在的疑问是新增还没保存就得到该自增主健值吗?这有个逻辑先后的问题。
[/Quote]

可能我没有说清楚,是数据库方式定义的自动增量。
可以在保存前拿到主键值最好,但是估计是不可能的。
记录保存后如何拿到这个主键值,这就是要问的问题。
pcwe2002 2011-01-05
  • 打赏
  • 举报
回复
我知道的只有再retrieve了。
灰色轨迹 2011-01-05
  • 打赏
  • 举报
回复
取MAX加一不就行了~
core0 2011-01-05
  • 打赏
  • 举报
回复
数据保存到数据库后,select max那个主键,where刚插入的非主键内容,那不就能找得到吗
lightsword1 2011-01-05
  • 打赏
  • 举报
回复
是获得数据库中自增的值?retrieve一下就出来了
hyf_0023 2011-01-05
  • 打赏
  • 举报
回复
不是很理解:主键是如何实现自动增量的?通过数据库的方法还是自定义函数?是保存时自动自增吗?你现在的疑问是新增还没保存就得到该自增主健值吗?这有个逻辑先后的问题。

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧