| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1621 人关注过本帖
标题:[求助]有关动态sql语句写法,紧急求助
只看楼主 加入收藏
jsxwr
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-10-22
收藏
 问题点数:0 回复次数:17 
[求助]有关动态sql语句写法,紧急求助

我是个pb的新手,很多东西只是皮毛,为了锻炼一下,决定为局里写个教职工信息管理系统,现在遇到了棘手问题,请高手紧急赐招,先谢了——

我有a,b两张表,一个教职工信息,一个是教职工信息修改,两张结构相同,比如:

序号 数值型
姓名 字符型
性别 字符型
出生年月 字符型
工作时间 日期时间型
学历 字符型

现在我在数据窗口中对该表信息进行修改,对教职工的修改同时更新a表,b表是为上报的信息做准备的,仅仅保存对原表修改后的记录,没有修改的字段不记录。

对数据窗口更新的代码很简单,但对修改部分记录到b表的代码该如何写?由于修改的列不确定,是否一定要使用动态的sql语句才可以完成?该怎么写,在线急等!!!

[此贴子已经被作者于2007-10-22 17:48:11编辑过]

搜索更多相关主题的帖子: sql 语句 动态 
2007-10-22 16:59
jsxwr
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-10-22
收藏
得分:0 

这是用来修改数据的dw_2
附件: 游客没有浏览附件的权限,请 登录注册

向论坛中的所有热心人致敬!坚持常读贴,勤发贴,多回贴,一起进步!
2007-10-22 17:38
jsxwr
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-10-22
收藏
得分:0 

在保存按钮的clicked事件中,本人先用

s_xb=dw_2.getitemstring(1,"性别")
if s_xb="" or isnull(s_xb) then
messagebox("提示","请为该职工选择性别!")
dw_2.setcolumn("性别")
dw_2.setfocus()
return
end if
s_xm=dw_2.getitemstring(1,"姓名")
if s_xm="" or isnull(s_xm) then
messagebox("提示","请为该职工输入姓名!")
dw_2.setcolumn("姓名")
dw_2.setfocus()
return
end if
…………

对数据窗口中的信息进行检查,并将相应内容保存到 s_xm,s_xb……等变量中

由于新建中不存在修改内容判定,所以相对轻松,用dw_2.update后提交信息就可以,然后通过

insert into 教职工信息新增 select * from 教职工信息 where 序号=:i_xh ;

将新增信息放到“教职工信息新增”表中以便上报即可,暂不作讨论。主要问题是对已有记录修改问题——

[此贴子已经被作者于2007-10-22 19:29:28编辑过]


向论坛中的所有热心人致敬!坚持常读贴,勤发贴,多回贴,一起进步!
2007-10-22 19:28
jsxwr
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-10-22
收藏
得分:0 

下面是关键部分,想对修改记录进行保存了,可能也是问题开始的时候——

string s_sql1,s_sql2,s_sql_up
s_sql1 = "序号"
s_sql2 =":i_xh"
s_sql_up="序号=:i_xh"


由于有部分教职工存在重复修改现象,所以用s_sql1和s_sql2 来为新增加insert修改记录准备相关字段及值,s_sql_up 为重复修改准备更新项目

if dw_2.getitemstring(1,"姓名",Primary!,True)<>dw_2.getitemstring(1,"姓名",Primary!,false) then
s_sql1 = s_sql1 +",姓名"
s_sql2 = s_sql2 +",:s_xm"
s_sql_up =s_sql_up + ",姓名=:s_xm"
end if
if dw_2.getitemstring(1,"性别",Primary!,True)<>dw_2.getitemstring(1,"性别",Primary!,false) then
s_sql1 = s_sql1 +",性别"
s_sql2 = s_sql2 +",:s_xb"
s_sql_up =s_sql_up + "性别=:s_xb"
end if
…………

通过上述处理,将被修改的相应字段名及值 存入字符串变量中,以便组成sql语句——

[此贴子已经被作者于2007-10-22 19:44:10编辑过]


向论坛中的所有热心人致敬!坚持常读贴,勤发贴,多回贴,一起进步!
2007-10-22 19:42
leejun
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-10-22
收藏
得分:0 
好久没研究这个了。。。

2007-10-22 19:43
jsxwr
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-10-22
收藏
得分:0 

检测当前教职工在修改记录(b表)中是否存在,存在则更新,否则新增

select count(*) into :i_cur_s from 教职工信息修改 where 序号=:i_xh ;
string s_sql_sql
if i_cur_s = 0 then
s_sql_sql= "insert into 教职工信息修改 (" + s_sql1 + ") values (" + s_sql2 +")"
else
s_sql_sql=" update 教职工信息修改 set " + s_sql_up +" where 序号= :i_xh"
end if


如果单纯从格式上看,s_sql_sql中储存的是标准sql语句,形如:

insert into 教职工信息修改 ( 序号,姓名,性别 ) values ( :i_xh,:s_xm,:s_xb )

update 教职工信息修改 set 序号=:i_xh,姓名=:s_xm,性别=:s_xb where 序号= :i_xh

可能最主要的问题也出在这里,组合成的sql语句,不符合相关语法要求,所以通过下面的

execute immediate :s_sql_sql;

来运行时,就出错了!提示信息如下:


现在我也只能写到这儿了,下面只能请高手赐招了,到底如何组合这个语句才合法?

附件: 游客没有浏览附件的权限,请 登录注册

向论坛中的所有热心人致敬!坚持常读贴,勤发贴,多回贴,一起进步!
2007-10-22 20:03
jsxwr
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-10-22
收藏
得分:0 
急盼有人早日回贴呀!!

向论坛中的所有热心人致敬!坚持常读贴,勤发贴,多回贴,一起进步!
2007-10-22 21:26
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
收藏
得分:0 

错误是数据库访问出错 看起来似乎数据库连接语句不正确
你访问ACCESS的数据库连接字符串是什么?


2007-10-23 09:59
jsxwr
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-10-22
收藏
得分:0 
回复:(Kendy123456)错误是数据库访问出错 看起来似...

可能最主要的问题也出在这里,组合成的sql语句,不符合相关语法要求:

execute immediate :s_sql_sql;

s_sql_sql 是字符串变量,其值为

insert into 教职工信息修改 ( 序号,姓名,性别 ) values ( :i_xh,:s_xm,:s_xb )
或者
update 教职工信息修改 set 序号=:i_xh,姓名=:s_xm,性别=:s_xb where 序号= :i_xh

//其中字段表和变量表都是由其它字符串变量提供的,具体项目和值不固定,取决于实际被修改情况。

可能是组成sql语句时,其中的变量没有传递过来,导致执行时参数不足,出现错误

[fly]到底如何解决,我一直没有弄清楚,请高手支招![/fly]


向论坛中的所有热心人致敬!坚持常读贴,勤发贴,多回贴,一起进步!
2007-10-23 11:38
比蜗牛快些
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:124
专家分:0
注 册:2007-4-16
收藏
得分:0 
pb不懂,你用其它的我可能还能帮忙,不好意思。

地球人的缺点与恶习集一身,小心感染不良恶习
2007-10-23 20:01
快速回复:[求助]有关动态sql语句写法,紧急求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017623 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved