很难的问题:如何提取datawindow中的不能为空的字段名称?

zhqworld 2003-12-16 11:29:54
设 表:tab_student中的字段为(ID,name, course ,score),
其中(name,course)为不可空字段

能否用程序的方法使字符串数组string CanNotNull[]
获得不可空字段,
使: CanNotNull[1] = "name"
CanNotNull[2] = "course"
...全文
219 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
thomasfu 2004-01-01
  • 打赏
  • 举报
回复
up hzhxxx(程序方程)
zhqworld 2003-12-18
  • 打赏
  • 举报
回复
To mittee(最后一条大白鲨) :

如果我还没有用程序的方法获得该字段是否可以为空,我怎么能用代码控制其不空呢?
mittee 2003-12-17
  • 打赏
  • 举报
回复
换个思路行不,不提取不为空的字段,
而是用代码控制其不为空
zhqworld 2003-12-17
  • 打赏
  • 举报
回复
To treesoft(长沙水) :
主键我也会提取,和你的方法完全相同,但是你忘了
dw_1.Describe("DataWindow.Column.Count")的返回值
是字符串类型的,要Integer()一下再用,呵呵。
另外,我不能用tag设置的办法,因为我的表是动态的,谢谢!

让我们共同期待高手的出现!
treesoft 2003-12-17
  • 打赏
  • 举报
回复
pb的dw中并没有包含null/not null的信息,但是有主键信息,即如果一个列的key属性为yes则表示此列为主键或主键的一部分。
integer li_i,li_colCount
integer li_keyColCount
string ls_keyCol[]

li_colCount = dw_1.Describe("DataWindow.Column.Count")
for li_i =1 to li_colCount
if dw_1.describe("#"+string(li_i)+".key") = 'yes' then
li_keyColCount ++
ls_keyCol[li_keyColCount] = dw_1.describe(("#"+string(li_i)+".name")
end if
next

我有一个笨办法,那就是在dw一些闲置的属性中设置一个标志,如在tag中设置。然后再用代码来取。但是不足之处是不能和你的表结构修改同步。
wwwafa9 2003-12-17
  • 打赏
  • 举报
回复
你用的是什么数据库?
zhqworld 2003-12-17
  • 打赏
  • 举报
回复
高手们再为我支支招吧,要不我就要提前回家过年了...
zhqworld 2003-12-16
  • 打赏
  • 举报
回复
To hzhxxx(程序方程) :
我是要获得数据库表中的 不可空字段名 ,而不是如何分隔出 带分隔符号的字符串 ,所以你可能把问题搞错了,不过也谢谢你哦!

wwwafa9 2003-12-16
  • 打赏
  • 举报
回复
在系统表里可以找到。SQL Server数据库的Syscolumns表有相应的信息。
hzhxxx 2003-12-16
  • 打赏
  • 举报
回复
借鉴 c# 的 split()函数,pb 中有:

public function integer uf_split (string as_source, string as_splitprompt, ref string as_value[]);
//******************************************************************//
//function : 分隔出带分隔符号的字符串
//parm :
// 1. as_source ->带分隔符号的源字符串
// 3. as_splitprompt ->分隔符号
// 2. as_value[] ->目标字符串数组,按地址传送
//return : of no use
//author : hzh
//date : 2003.02.13
//*****************************************************************//

Integer i_arrayindex
Long l_start,l_end = 1,l_splitlen
String s_target

IF IsNull(as_source) OR as_source = '' THEN RETURN -1
IF IsNull(as_splitprompt) OR as_splitprompt = '' THEN RETURN -1
s_target = Trim(Lower(as_source))
l_splitlen = Len(as_splitprompt)
IF Right(s_target,l_splitlen) <> as_splitprompt THEN s_target += as_splitprompt

l_start = Pos(s_target,as_splitprompt)

DO WHILE l_start > 0
i_arrayindex ++
as_value[i_arrayindex] = Trim(Mid(s_target,l_end,l_start - l_end))
l_end = l_start + l_splitlen
l_start = Pos(s_target,as_splitprompt,l_end)
LOOP

RETURN 1
wwwafa9 2003-12-16
  • 打赏
  • 举报
回复
你建立一个数据窗口,选择系统表作为数据源,然后找到你要找的信息。
zhqworld 2003-12-16
  • 打赏
  • 举报
回复
To wwwafa9(阿发) :
你说的太模糊了,我不太明白。
wwwafa9 2003-12-16
  • 打赏
  • 举报
回复
你用数据窗口提取那些信息出来,然后和你要判断的字段比较一下即可。
klbt 2003-12-16
  • 打赏
  • 举报
回复
你可以查找一下相应数据库的系统表,看看有无某个系统表存储各字段是否为空的属性。
zhqworld 2003-12-16
  • 打赏
  • 举报
回复
To wwwafa9(阿发) :
非常感谢你的回答,可是我的应用可能是Sqlserver,也可能是Oracle,我有没有办法通过
PB中的控件、属性或者方法得到datawindow中不可空的字段名称呢?
再次感谢!!!

754

社区成员

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

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