请大家帮帮忙 我要急疯了!!!!!!!!!!!!!!!!!!!!!!!11

delphiyhp 2003-10-21 09:02:42
老板叫我修改别人的代码,已经可以编译通过运行的.
可是我加一个空格,比如说在NAME前面进去就出现对象名SYSDEVICES无效的编译错误
SELECT NAME
INTO :ls_dumpdevice
FROM sysdevices
where name = :ls_dbbackupname
USING vtransaction[transitem];

另小弟刚入门请大虾们多帮忙啊!!
怎么在PB里面加分号啊为什么有的语句
后加分号有的不加啊到底是个什么规定啊!!!!!!!!!!!!!!
...全文
90 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
LeoKing 2003-10-21
  • 打赏
  • 举报
回复
1、数据库是Sybase
2、连接的数据库是master
3、系统表、各数据项都应用“小写”。
delphiyhp 2003-10-21
  • 打赏
  • 举报
回复
详细的是
DATABASE C0038 : 对象名 'SYSDEVICES'无效.
delphiyhp 2003-10-21
  • 打赏
  • 举报
回复
大哥大哥 救我
错误是

对象名SYSDEVICES无效
鸡翅多 2003-10-21
  • 打赏
  • 举报
回复
编译通不过报的错是什么?
delphiyhp 2003-10-21
  • 打赏
  • 举报
回复
laogao(浪迹编程)
具体怎么个加个TRANS啊
以前的同事是设计了个个全局TRANS数组
在程序里连数据库
但不知道编译是怎么通过的
我加一个空格就通不过

string szKey,szValuename,szValuetype,szValuevariable,szString
string ls_deletedate_min,ls_deletetime_min,ls_deletedate_max,ls_deletetime_max,ls_dbname,ls_dbpath

int transitem,li_net,i,ls_pos
systemLogInfo log
string ls_sql,ls_backup_directory
blob ib_blob
string ls_timemin,ls_timemax
string ls_dbbackupname,ls_dumpdevice
string db_path


open(w_waitforbackup)

transitem=fnConnectDataBase(db_main.database,db_main.server,db_main.loginid,db_main.password)

if transitem=206 then
close(w_waitforbackup)
fnerror(transitem)
log.loglevel="警告"//记录系统日志
log.username=vsystemconfiginfo.username
log.operationTime=string(today())+" "+string(now())
log.operationObject="审计系统"
log.operation="数据库手工备份"
log.operationType="数据库连接"
log.operationResult="失败"
fnsystemlog(log)
return
end if

//备份路径
select filename
into :db_path
from sysfiles
using vtransaction[transitem];

ls_pos = lastpos(db_path,'\')
vsysbackup.backup_path =mid(db_path,1,ls_pos)


SELECT min(deletedate),max(deletedate)
INTO :ls_deletedate_min,:ls_deletedate_max
FROM log_nat
USING vtransaction[transitem];

SELECT min(deletetime)
INTO :ls_deletetime_min
FROM log_nat
where deletedate = :ls_deletedate_min
USING vtransaction[transitem];

SELECT max(deletetime)
INTO :ls_deletetime_max
FROM log_nat
where deletedate = :ls_deletedate_max
USING vtransaction[transitem];

ls_timemin = ls_deletetime_min
ls_timemax = ls_deletetime_max

//字符转换
ls_deletedate_min = replace (ls_deletedate_min,5,1,'_')
ls_deletedate_min = replace (ls_deletedate_min,8,1,'_')

ls_deletedate_max = replace (ls_deletedate_max,5,1,'_')
ls_deletedate_max = replace (ls_deletedate_max,8,1,'_')

ls_deletetime_min = replace (ls_deletetime_min,3,1,'_')
ls_deletetime_min = replace (ls_deletetime_min,6,1,'_')

ls_deletetime_max = replace (ls_deletetime_max,3,1,'_')
ls_deletetime_max = replace (ls_deletetime_max,6,1,'_')

ls_dbname = ls_deletedate_min +'_'+ls_deletetime_min +'_'+ls_deletedate_max +'_'+ls_deletetime_max


if isnull(ls_deletedate_min) or isnull(ls_deletedate_max) or isnull(ls_deletedate_min) or isnull(ls_deletedate_max) then
close(w_waitforbackup)
messagebox("错误!","当前数据库记录数为 0,不需要进行数据库备份操作!~r~n如有问题,请与系统管理员联系?",question!)
log.loglevel="警告" //记录系统日志
log.username=vsystemconfiginfo.username
log.operationTime=string(today())+" "+string(now())
log.operationObject="审计系统"
log.operation="数据库手工备份"
log.operationType="获取备份文件名"
log.operationResult="失败"
fnsystemlog(log)
return
end if

ls_dbpath = vsysbackup.backup_path + ls_dbname


// //********************备份数据库**********************

//恢复数据库备份文件不存在
IF ls_dbpath = ls_dbname THEN
Messagebox('系统提示!',"请您先在“数据库备份设置”模块对数据库备份进行设置! ")
close(w_waitforbackup)
RETURN
END IF


ls_dbbackupname = "db"+ls_dbname


//********************对备份设备进行判断,若有则删除**********************
//首先判断备份设备是否存在

transitem = fnConnectDataBase("MASTER",db_main.server,"sa",vsysbackup.sa_password)

if transitem = 206 then
close(w_waitforrestore)
fnerror(transitem)
log.loglevel="警告" //记录系统日志
log.username=vsystemconfiginfo.username;
log.operationTime=string(today())+" "+string(now())
log.operationObject="审计系统"
log.operation="手工备份数据库"
log.operationType="数据库连接"
log.operationResult="失败"
fnsystemlog(log)
return
end if

SELECT NAME
INTO :ls_dumpdevice
FROM sysdevices
where name = :ls_dbbackupname
USING vtransaction[transitem];

fndisconnectdatabase(transitem)
transitem = transitem -1

vtransaction[transitem].AutoCommit = true /////////////////VTRANSACITON[]就是哪个数组

//here ,have some coffee on me.
if ls_dumpdevice <> "" then

i=messagebox("信息","数据库备份文件~r~n"+ls_dbname+"已经存在!~r~n 确定要将原文件进行覆盖备份吗?",question!,yesno!,1)
ls_sql = 'EXEC sp_dropdevice '+"'"+ls_dumpdevice+"'"+',DELFILE'
execute immediate :ls_sql using vtransaction[transitem];

if i =2 then
fndisconnectdatabase(transitem)
close(w_waitforbackup)
return
end if
end if

vtransaction[transitem].AutoCommit = true

// ls_sql='USE master~n'
ls_sql='EXEC sp_addumpdevice '+"'"+'disk'+"',"+"'"+ls_dbbackupname+"','"+ls_dbpath+"'~n"

ls_sql=ls_sql+'backup database '+db_main.database+' to '+ls_dbbackupname

execute immediate: ls_sql USING vtransaction[transitem];

if vtransaction[transitem].sqlcode = 0 then
messagebox('提示信息','备份完毕!')

else
if vtransaction[transitem].Sqlcode=-1 then
messagebox("错误","审计系统手工备份数据库出错,请您检查备份路径是否设置正确!~r~n"+ String (vtransaction[transitem].sqldbcode) + ": " + vtransaction[transitem].sqlerrtext, exclamation!)
halt close
end if
end if

vtransaction[transitem].AutoCommit = false

INSERT INTO log_restore_dbname(dbbackupFileName, dbname,Startdate,Enddate,StartTime,EndTime,backupname)
VALUES( :ls_dbpath, :db_main.database,:ls_deletedate_min,:ls_deletedate_max,:ls_timemin,:ls_timemax,:ls_dbbackupname)
USING vtransaction[transitem];
if vtransaction[transitem].Sqlcode=-1 then
messagebox("错误","保存备份文件到数据表LOG_RESTORE_DBNAME出错!~r~n"+ String (vtransaction[transitem].sqldbcode) + ": " + vtransaction[transitem].sqlerrtext, exclamation!)
close(w_waitforbackup)
return
end if

commit USING vtransaction[transitem];

//// 清除数据表空间
ls_sql ="truncate table log_nat ~n truncate table log_pf ~n truncate table log_proxy "
execute immediate: ls_sql USING vtransaction[transitem];
if vtransaction[transitem].Sqlcode=-1 then
messagebox("错误","清空审计系统主数据库出错!~r~n"+ String (vtransaction[transitem].sqldbcode) + ": " + vtransaction[transitem].sqlerrtext, exclamation!)
close(w_waitforbackup)
return
end if


fndisconnectdatabase(transitem)
close(w_waitforbackup)

qiyousyc 2003-10-21
  • 打赏
  • 举报
回复
//定义2个事务
transobject trans1
trans1=create transobject
//各种属性设置,连接就可以了
laogao 2003-10-21
  • 打赏
  • 举报
回复
用两个trans分别连接两个数据库,只有设置好它们的参数,之间不会有冲突的.
delphiyhp 2003-10-21
  • 打赏
  • 举报
回复
谢谢大哥了可以交个朋友有QQ吗
我的QQ:38232606
但是我这个文件里要有访问两个基本点数据库啊
一个是MASTER库一个是自己的DATA库
如果连上MASTER库那么有访问DATA库的语句不又出错了啊!!
workhand 2003-10-21
  • 打赏
  • 举报
回复
1、你当前连接的数据库可能不对,无效是说你的表无效,检查连接的数据库
2、pb里sql语句后面必须跟;,其他语句后面必须不跟;
delphiyhp 2003-10-21
  • 打赏
  • 举报
回复
我使用的是PB8.0
同时在DB PROFILE里连上一个我自己的数据库一个是MASTER数据库
但是只能设置一个数据库为ACTIVE状态
也就是一个是绿色的勾一个是白色的勾

我是想编译器忽视这个问题 但是他就是不要我运行啊
先提示要不要保存修改
我选保存
然后出来要不要忽视编译错误我选忽视的话就谈出来无法保存
不忽视就出来哪个编译错误!
那位高手愿意帮忙啊
我可以把代码送大家调试调试
是公司的不过要保密啊!!!
xl1004 2003-10-21
  • 打赏
  • 举报
回复
其实我觉得你不必理睬PB环境下的编译错误,因为你当前使用了至少两个事物对象,在编译的时候,PB会依照当前profile里你设置的连接而不是你应用对象脚本里的连接信息,在低版本的PB中,profile一次只能连接一个,而你的程序是动态连数据库的,所以会出现这种编译错误,尽可以忽略它。如果用高版本的PB,好象在profile中可以同时连两个数据库,你配好那个连接master数据库的profile,同时连两个,编译时应该不会报错了,不过我没试过。如果在运行时还有错,那就要仔细看你的程序了。
jdsnhan 2003-10-21
  • 打赏
  • 举报
回复
急解决不了问题。
从你的语句中看,sysdevices是什么,表?那为什么会提示对象名SYSDEVICES无效呢?
到具体提示错误的行看看。是不是遗漏了小的方面。
另外,你可以把脚本粘贴出去,再拷贝进来试试。有时候PB就是这样。:)
delphiyhp 2003-10-21
  • 打赏
  • 举报
回复
大哥我用的是SQL2000 SERVER

1,072

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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