今天面试的笔试题 帮忙看看答案对不
1.数据窗口Update Properties中数据更新属性Where Clause For Update/Delete有三个选项:
?Key Columns
?Key And Updateable Columns
?Key And Modified Columns
假设对表KHDA(客户档案)进行更新,该表有三个字段(如下),三个字段都具有Updateable属性,请分别写出使用以上三个选项时数据窗口执行Update时发送到数据库要求进行数据更新的SQL语句。(15分)
NameCodeType原来的数据更新操作
客户IDKHID(主键)Numeric(10)1不修改
客户代码KHDMVarchar(10)001不修改
客户名称KHMCVarchar(40)张三改为“李四”
?Key Columns
UPDATE KHDA SET KHMC = ‘李四’ Where KHID = ‘1’
?Key And Updateable Columns
Update KHDA SET KHMC = ‘李四’ Where KHID=’1 AND KHDM=’001’ AND KHMC= ‘张三’
?Key And Modified Columns
Update KHDA set KHMC = ‘李四’ Where KHDM=’001’ AND KHMC= ‘张三’
2.数据窗口更新函数Update()使用语法如下:
dwcontrol.Update ( { accept {, resetflag } } )
请在下表中填写当accept、resetflag为以下值时的含义。(10分)
值含义
accept = True执行acceptText(),如果没有通过数据有效性验证,则取消更新
accept = False不执行acceptText()
resetflag = True复位更新标志
resetflag = False不复位更新标志
3.当执行SQL语句时,用sqlca.sqlcode是否等于0判断是否执行成功,如果不成功,可用sqlca.sqlerrtext获得数据库返回的错误信息。但当我们用数据窗口更新时(语句为:dw_1.update()),用sqlca.sqlerrtext是得不到数据库返回的错误信息的。请写出用数据窗口更新数据时,如何才能得到数据库返回的错误信息?(5分)
longll_sqlcode
stringls_errtext,ls_inf
ll_sqlcode = SQLCA.SQLCODE//获取错误代码
ls_errtext = SQLCA.SQLERRTEXT
IF dw_main.Update() = 0
then
MessageBox(title,ls_inf + &
'~r 错误代码:' + STRING(ll_sqlcode) + &
'~r 错误信息:' + ls_errtext,Stopsign!)
Return -1
END IF
4.当多个数据窗口在更新时需要对事务进行控制事务以确保数据的完整性,假设有两个数据窗口dw_1、dw_2需要同时更新,若其中一个失败则需要进行回滚,请编写同时更新两个数据窗口的代码。(10分)
longll_sqlcode
stringls_errtext,ls_inf
ll_sqlcode = SQLCA.SQLCODE//获取错误代码
ls_errtext = SQLCA.SQLERRTEXT
IF dw_1.update() = 1 and dw_main.Update() = 1 THEN//更新成功
COMMIT ;
MessageBox('提示','数据库更新成功!')
Return 1
ELSE//更新失败
ROLLBACK ;
MessageBox('错误','数据库更新失败!' + &
'~r 错误代码:' + STRING(ll_sqlcode) + &
'~r 错误信息:' + ls_errtext,Stopsign!)
Return -1
END IF
5.在编写程序时需要对变量命名进行规范,一般根据变量的作用范围及变量类型在变量名前增加前缀,请在下表中填写你认为比较规范的变量命名前缀。(10分)
StringIntegerLongDate
全局gs_Gi_Gl_Gdt_
共享Ss_Si_Sl_Sdt_
实例Is_Ii_Il_Idt_
局部Ls_Li_Ll_Ldt_
参数:Ls_:Li_:li_:ldt_
6.请编写一个日期转换函数,要求将日期转换成中文写法,函数参数名:ad_CurDate。如传入:2002.8.12,返回:“二零零二年八月十二日 星期一”。(30分)
Integer li_year
Integer li_month
Integer li_day
String ls_object
String ls_year
String ls_number[32]
Integer li_o b j e c t
String ls_result
int t
ls_number[1] = "零"
ls_number[2] = "一"
ls_number[3] = "二"
ls_number[4] = "三"
ls_number[5] = "四"
ls_number[6] = "五"
ls_number[7] = "六"
ls_number[8] = "七"
ls_number[9] = "八"
ls_number[10] = "九"
ls_number[11] = "十"
ls_number[12] = "十一"
ls_number[13] = "十二"
ls_number[14] = "十三"
ls_number[15] = "十四"
ls_number[16] = "十五"
ls_number[17] = "十六"
ls_number[18] = "十七"
ls_number[19] = "十八"
ls_number[20] = "十九"
ls_number[21] = "二十"
ls_number[22] = "二十一"
ls_number[23] = "二十二"
ls_number[24] = "二十三"
ls_number[25] = "二十四"
ls_number[26] = "二十五"
ls_number[27] = "二十六"
ls_number[28] = "二十七"
ls_number[29] = "二十八"
ls_number[30] = "二十九"
ls_number[31] = "三十"
ls_number[32] = "三十一"
li_year = Year(adt_date)
li_month = Month(adt_date)
li_day = Day(adt_date)
//年
ls_o b j e c t = String(li_year)
ls_year = ""
Do
li_o b j e c t = Integer(Left(ls_o b j e c t, 1))
ls_o b j e c t = Mid(ls_o b j e c t, 2)
ls_year += ls_number[li_o b j e c t + 1]
Loop Until Len(ls_o b j e c t) = 0 Or isNull(ls_o b j e c t)
t=daynumber(today())
//结果
ls_result = ls_year + '年' + ls_number[li_month + 1] + '月' + ls_number[li_day + 1] + '日'+ ‘ 星期’ +ls_number[t]
Return ls_result
7.参照第1题,请编写创建表KHDA的SQL语句(KHDM、KHMC可为空)。(10分)
CREATE TABLE [dbo].[KHDA](
[KHID] [numeric](10, 0) NOT NULL,
[KHDM] [varchar](10) NULL,
[KHMC] [varchar](40) )
8.参照第1题,假设还有另外一张表KHTS(客户投诉),表结构如下:
NameCodeType
客户IDKHIDNumeric(10)
投诉日期TSRQDatetime
投诉内容TSNRVarchar(250)
假设要从表KHDA中检索客户名称第一个字为“张”并且在2004-01-01前没有投诉记录的所有客户并按客户代码进行排序,请编写SQL。(10分)
Select DISTINCT K.KHDA
FROM KHDA K,KHTS T
WHERE K.KHID = T.KHID
AND K.KHDA LIKE ‘张%’
AND T.TSRQ >=’2004-01-01’
ORDER BY K.HKDM
[解决办法]
看来我们POWERBUILDER 已经在边缘化了吧
[解决办法]
兄弟你的答案不少有问题哦
[解决办法]
新年快乐,接分快乐!
[解决办法]
今天去面试也遇到楼主的问题了,比你写的还多了2题。难道是同一家公司?楼主是在哪里面试的。
[解决办法]
LZ 大概还需要写更多的代码练练手。。。