|
可是我加一个空格,比如说在NAME前面进去就出现对象名SYSDEVICES无效的编译错误 SELECT NAME INTO :ls_dumpdevice FROM sysdevices where name = :ls_dbbackupname USING vtransaction[transitem]; 另小弟刚入门请大虾们多帮忙啊!! 怎么在PB里面加分号啊为什么有的语句 后加分号有的不加啊到底是个什么规定啊!!!!!!!!!!!!!! |
|
|
|
1、你当前连接的数据库可能不对,无效是说你的表无效,检查连接的数据库
2、pb里sql语句后面必须跟;,其他语句后面必须不跟; |
|
|
谢谢大哥了可以交个朋友有QQ吗
我的QQ:38232606 但是我这个文件里要有访问两个基本点数据库啊 一个是MASTER库一个是自己的DATA库 如果连上MASTER库那么有访问DATA库的语句不又出错了啊!! |
|
|
用两个trans分别连接两个数据库,只有设置好它们的参数,之间不会有冲突的.
|
|
|
//定义2个事务
transobject trans1 trans1=create transobject //各种属性设置,连接就可以了 |
|
|
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) |
|
|
编译通不过报的错是什么?
|
|
|
大哥大哥 救我
错误是 对象名SYSDEVICES无效 |
|
|
详细的是
DATABASE C0038 : 对象名 'SYSDEVICES'无效. |
|
|
1、数据库是Sybase
2、连接的数据库是master 3、系统表、各数据项都应用“小写”。 |
|
|
大哥我用的是SQL2000 SERVER
|
|
|
急解决不了问题。
从你的语句中看,sysdevices是什么,表?那为什么会提示对象名SYSDEVICES无效呢? 到具体提示错误的行看看。是不是遗漏了小的方面。 另外,你可以把脚本粘贴出去,再拷贝进来试试。有时候PB就是这样。:) |
|
|
其实我觉得你不必理睬PB环境下的编译错误,因为你当前使用了至少两个事物对象,在编译的时候,PB会依照当前profile里你设置的连接而不是你应用对象脚本里的连接信息,在低版本的PB中,profile一次只能连接一个,而你的程序是动态连数据库的,所以会出现这种编译错误,尽可以忽略它。如果用高版本的PB,好象在profile中可以同时连两个数据库,你配好那个连接master数据库的profile,同时连两个,编译时应该不会报错了,不过我没试过。如果在运行时还有错,那就要仔细看你的程序了。
|
|
|
我使用的是PB8.0
同时在DB PROFILE里连上一个我自己的数据库一个是MASTER数据库 但是只能设置一个数据库为ACTIVE状态 也就是一个是绿色的勾一个是白色的勾 我是想编译器忽视这个问题 但是他就是不要我运行啊 先提示要不要保存修改 我选保存 然后出来要不要忽视编译错误我选忽视的话就谈出来无法保存 不忽视就出来哪个编译错误! 那位高手愿意帮忙啊 我可以把代码送大家调试调试 是公司的不过要保密啊!!! |
|