发布新日志

  • VBS:SQL记录查询、更新、删除

    2009-12-22 17:04:54

    Set conn = createobject("ADODB.Connection")
      conn.Open"Provider=OraOLEDB.Oracle.1;Password=sx;Persist Security Info=True;User ID=pipfgys_sx_user;Data Source=pip132"
      Set res = createobject("ADODB.Recordset")
      res.Open"select  *  from aa ",conn,2,2
    '遍历查询结果
    Do While Not res.EOF
     iUser_pwd=""
     For i=0 To res. Fields.Count - 1
       iUser_pwd = iUser_pwd+CStr(res(i))+","
     Next
        print  iUser_pwd
      res.movenext
    lOOP
    '更新语句
    sqlstr="update aa set a1=1 where a1=100"
    Conn.Execute(sqlstr)
    '删除语句
    sqlstr="delete aa where a1=1"
    Conn.Execute(sqlstr)
     res.close
     res.Open"select  *  from aa ",conn,2,2
    '遍历查询结果
    Do While Not res.EOF
     iUser_pwd=""
     For i=0 To res. Fields.Count - 1
       iUser_pwd = iUser_pwd+CStr(res(i))+","
     Next
        print  iUser_pwd
      res.movenext
    lOOP
      res.close        '关闭记录集
      Set res=nothing        '释放对象
      conn.close        '关闭连接
      Set conn=nothing        '释放对象

     

    ==============================================================

    RecordSet对象的详细用法


    RecordSet对象(代表来自基本表或命令执行结果的记录的全集。)
    为了更精确地跟踪数据,要用RecordSet组件创建包含数据的游标,游标就是储存在内存中的数据:

      rs = Server.CreateObject("ADODB.RecordSet")

      rs.Open(sqlStr,conn,1,A)

     

    RS.OPEN SQL,CONN,A,B

    A:

    ADOPENFORWARDONLY(=0)
    只读,且当前数据记录只能向下移动

    ADOPENKEYSET(=1)
    只读,当前数据记录可自由移动

    ADOPENDYNAMIC(=2)
    可读写,当前数据记录可自由移动

    ADOPENSTATIC(=3)
    可读写,当前数据记录可自由移动,可看到新增记录

    B:

    ADLOCKREADONLY(=1)
    缺省锁定类型,记录集是只读的,不能修改记录

    ADLOCKPESSIMISTIC(=2)
    悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。

    ADLOCKOPTIMISTIC(=3)
    乐观锁定 ,直到用Update方法提交更新记录时才锁定记录。

    ADLOCKBATCHOPTIMISTIC(=4)
    批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。

    当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。
    对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,
    数据在这段时间被更新。这减少了资源的使用。

      在RecordSet组件中,常用的属性和方法有:

      rs.Fields.Count:RecordSet对象字段数。

      rs(i).Name:第i个字段的名称,i为0至rs.Fields.Count-1

      rs(i):第i个字段的数据,i为0至rs.Fields.Count-1

      rs("字段名"):指定字段的数据。

      rs.RecordCount:数据记录总数。

      rs.EOF:是否最后一条记录。

      rs.MoveFirst:指向第一条记录。

      rs.MoveLast:指向最后一条记录。

      rs.MovePrev:指向上一条记录。

      rs.MoveNext:指向下一条记录。

      rs.GetRows:将数据放入数组中。

      rs.Properties.Count:ADO的ResultSet或Connection的属性个数。

      rs.Properties(item).Name:ADO的ResultSet或Connection的名称。

      rs.Properties:ADO的ResultSet或Connection的值。

      rs.close():关闭连接。

    Recordset 对象的属性
    1、CursorType 属性
    AdOpenForwardOnly: 仅向前游标,默认值。除了只能在记录中向前滚动外,与静态游标相同。当只需要在记录集中单向移动时,使用它可提 高性能。(顾名思义,这种游标只能向前移动。然而,由于这种游标功能有限,将它用于系统资源时是非常有效的。)
    AdOpenKeyset: 键集游标。尽管从您的记录集不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,键集游标与动态游标相似 。仍然可以看见其他用户更改的数据。(KeySet游标允许你看见自它创建起其他用户所做的修改,然而你却不能看到其他用户增加或删除的记 录。)
    AdOpenDynamic :动态游标。可以看见其他用户所作的添加、更改和删除。允许在记录集中进行所有类型的移动,但不包括提供者不支持的书 签操作。(此类型的游标功能强大同时也是耗费系统资源最多的游标。Dynamic游标可以看到他们保存记录集合的所有变化。使用Dynamic游标 的用户可以看到其他用户所做的编辑、增加、删除。如果数据提供者允许这种类型的游标,那么它是通过每隔一段时间从数据源重取数据来支 持这种可视性的。毫无疑问这会需要很多的资源。 )
    AdOpenStatic:静态游标。可以用来查找数据或生成报告的记录集合的静态副本。另外,对其他用户所作的添加、更改或删除不可见。 (Static类游标只是数据的一幅快照。这就是说,它无法看到自它创建以后其他用户对RecordSet所做的修改。采用这类游标你可以向前和向后 航行。由于其功能简单,资源的需求比Dynamic要小! )
    需要注意的是:一旦打开RecordSet,你就无法改变CursorType属性。但是,如果你首先关闭RecordSet,改变CursorType属性,然后重新打开 RecordSet,那么你仍可以有效地改变游标的类型!

    2、LockType 属性
    在任何同时可被多用户修改的数据库应用程序中,你必须处理可能发生的多个用户同时对同一条记录进行操作时的情况。当这种情况出现时, 数据的完整性就会受到威胁,这是因为一个用户可能会在不自觉地在保存自己所做的修改时覆盖他人的修改。到时候你会觉得自己好象是没有 做事。为了处理这种情况。ADO允许你在对RecordSet对象进行更新时决定并发事件控制的类型,当一个用户编辑时,如何由他对记录进行锁定 。这就是由LockType属性所决定的。这个属性有四个值:
    adLockReadonly:默认值,只读。无法更改数据。(这是RecodSet的默认值,如果你把锁定的方式设为该值,那么你将不能更新 Recordset。 )
    adLockPessimistic:保守式记录锁定(逐条)。提供者执行必要的操作确保成功编辑记录,通常采用编辑时立即锁定数据源的记录的方式。( 如果设置为此类锁定,记录被锁定,且只有在编辑开始到将记录更新的提交给数据提供者这段时间内进行编辑的用户才可以访问! )
    adLockOptimistic:开放式记录锁定(逐条)。提供者使用开放式锁定,只在调用 Update 方法时锁定记录。(只有在将数据提交给数据提供 者的那一瞬间才把记录锁定。)
    adlockBatchOptimistic:开放式批更新。用于与立即更新模式相反的批更新模式。(设定为这种类型的锁定制式将被称为批量更新模式的 RecordSet。 可以加快更新RecordSet修改数据的速度,但因为同时更新多个记录,它也会恶化与并发访问相关的问题! )

    3、AbsolutePage 属性
    AbsolutePage属性设定当前记录的位置是位于哪一页的页数编号;使用PageSize属性将Recordset对象分割为逻辑上的页数,每一页的记录数为 PageSize(除了最后一页可能会有少于PageSize的记录数)。这里必须注意并不是所有的数据提供者都支持此项属性,因此使用时要小心。
    与AbsolutePosition属性相同,AbsolutePage属性是以1为起始的,若当前记录为Recordset的第一行记录,AbsolutePage为1。可以设定 AbsolutePage属性,以移动到一个指定页的第一行记录位置。

  • 通过bat备份ORACLE数据及执行语句

    2009-08-14 15:17:51

    备忘仅供参考:

    保存最近五次内数据,将以下内容保存为BAT文件

    echo 在e:\数据库日备份目录下创建tmp,a,b,c,d,e目录

    @echo off
    echo 开始备份数据库.....
    set filename=e:\数据库日备份\tmp\%date:~0,10%
    exp userid=pip_sx_sys/sx@pip132 file=%filename%pipsys.dmp wner=pip_sx_sys INDEXES=y grants=y  constraints=y compress=y log=%filename%pipsys.log
    echo 备份结束


    if not exist %filename%fgysuser.dmp goto finish
    del/q e:\数据库日备份\e
    move e:\数据库日备份\d\*.* e:\数据库日备份\e
    move e:\数据库日备份\c\*.* e:\数据库日备份\d
    move e:\数据库日备份\b\*.* e:\数据库日备份\c
    move e:\数据库日备份\a\*.* e:\数据库日备份\b
    move e:\数据库日备份\tmp\*.* e:\数据库日备份\a
    :finish

    在BAT里执行ORACLE的SQL语句

    建个一个BAT文件写入以下语句:

    sqlplus etms/12@orcl15 @runSql.sql

    在 runSql.sql文件输入以下内容

    conn etms/12@orcl15   
    alter table AA add a4 varchar2(10);
    commit;
    exit

     

  • 系统崩溃重装系统后还原ORACLE(个人小记)

    2008-12-22 13:36:41

    问题记录:

    原问题:数据库:ORACLE10G,原操作系统win server2000,现WINDOWS XP
    服务器崩溃了,但ORACLEDATE下的数据还存在,我想还原部分数据行不?

    以下是网上的常用方法:
    方法一:"把原来的oracle存放数据的整个目录备份出来,重装oracle,安装要跟原来的一样,实例名也和原来的一样,再把备份的oracle目录覆盖新建的数据库的目录就可以了。" 这个我试过第一次能试成功,但由于同事操作失误把整个ORACLE卸掉了,然后再试就没试成功过.

    解决方法:整个数据库还原了,但还原部分用户下的没有实现
    以下是在还原中我碰到的一些问题
    是用方法一实现的,原先试了多次没成功的原因是在新建数据库的时候选择"指定数据库的位置"出错,原数据库是所有数据文件使用公共的,而我在新建数据时选择了"使用ORACLE管理",所以还原的时候要步步注意啊
    按方法一完成后,进入10G的EM中查看数据库是否正常,我碰到的是数据库与监听都是关着的,
    先启动数据库,按提示一步一步启动,成功应该就没事的,我是没成功就点击查看详细信息,我碰到的是某些文件没有找到,从原数据文件中复制过来就行了.
    到此为止,我的数据库是可以访问了,但访问表空间出错
    重建EM后就可以了
    emca -repos recreate

    ===========================================================================

    在未使用emca -repos recreate前使用DMP导出曾出过错是用以下方法解决的.估计执行recreate命令后应该就行了不需要执行下面方法

    参考:

    下面内容来自以下连接

    http://space.itpub.net/?uid-701141-action-viewspace-itemid-135994

    下面,是我做的Oracle 10G 里面控制文件恢复后,临时表空间为空的处理方法,这是Oracle 10G 的一个bug,在11G里面已经没有这个问题。

    问题: ORA-25153: Temporary Tablespace is Empty

    我们先查看表空间

    SQL> select tablespace_name,status from dba_tablespaces;

    TABLESPACE_NAME                STATUS
    ------------------------------ ---------
    SYSTEM                         ONLINE
    UNDOTBS1                       ONLINE
    SYSAUX                         ONLINE
    TEMP                           ONLINE
    USERS                          ONLINE
    RECOVERY_TBS                   ONLINE
    都temp online 在线。

     SQL> select tablespace_name,file_name from dba_temp_files;

    no rows selected

    就会发现,dba_temp_files 原来如此。

    SQL> alter tablespace temp add tempfile '/oradata/elife02/temp01.dbf'SQL>  select FILE_NAME,TABLESPACE_NAME,STATUS from dba_temp_files;

    FILE_NAME TABLESPACE_NAME STATUS

    ----------------------------------- ------------------------------ ---------

    /oradata/elife02/temp01.dbf TEMP AVAILABLE

    还可以指定默认的临时表空间

    SQL>alter database  default temporary tablespace temp;

  • bat中执行SQL相关内容(ORACLE)

    2008-10-17 11:09:54

    在BAT文件中执行ORACL中的语句、过程等的写法:

    建一个BAT文件(内容如下):
    sqlplus pip_sx_sys/sx@etms140 @BB.SQL
      说明:
          sqlplus pip_sx_sys/sx@etms140:连接串
          @BB.SQL:调用的SQL脚本

    SQL脚本内容:要执行的SQL语句

    例:
    CALL BB();--调用一个过程
    EXIT;--退出(不加会停在SQL>状态哦)

  • ORACLE dblink 小记

    2008-09-02 09:45:33

    建DBLINK:
    使用pl/sql developer建:找到Database Links,右键新建
                              名称:dblink名  连接到用户名:目标数据库登录名 密码:目标数据库密码
                              数据库:目标数据库服务名

    查询表:
    select * from 用户名.表 @DBLINK名称 where 条件;

    查询函数:
    select  用户名.函数名@DBLINK名称(参数) from dual;

    在本地函数中调用dblink函数:
    Result:=用户名.函数名@DBLINK名称(参数);

    复制dblink中的表结构与数据:
    CREATE TABLE 表名 AS SELECT * FROM 用户名.表名@DBLINK名称 where 条件
    索引这些可以使用手工建:在pl/sql developer的SQL窗口中选中表名再查看表结构

    备注:
    如果机子上同时安装ORACLE的数据库与客户端,要用数据库建需连接dblink的数据库的服务
    在过程中创建表时要先给权限execUTE immediate 'Grant Create any table to 用户名';
    从dblink的从张表中取数只需在每个表名后加@dblink名称

  • 本命年真是背

    2008-03-09 22:31:06

    2008本命年,没穿红衣服,不信那一套。实事证明今年我真的很背

    找人合租房子被人放鸽子,自己找租房被房东放鸽子,找到好房被别人抢先一步,直今还在交双倍房租累啊。

    想考软件评测师找遍了各大书店与网上各大销售点找不到想要的书

    网上买东东客户收到货物因运输有问题全赔还好金额少

    好运好运快快来

  • TD8.0+OutLook邮件配置(简单)

    2008-01-30 18:11:41

    环境:windows 2000 server +td8.0+OutLook Express 5

    接触TD有段时间了,自动发邮件一直没有成功过,网上有一堆的例子,人比较笨就是学不会,东拼西凑终于发送成功了,

    前提:先配置好OutLook,我就在163上注册了一个邮箱用于专门发送TD的东东,就在OutLook里工具->帐户->添加就好了(具体步骤参见GOOGLE),配置完后测试能否正常收发邮件.

    ==============================================================

    TD设置:
    1、进入TD->sit administrator:

    Project页:在左侧树中选中一个域(就是三个蓝色圆柱),设置其右侧界面参数,如下:
    Miscellaneous
        Contact Name:用户名(就是上面163里注册的用户名)
        Contact Email:用户名@163.com(邮箱)
        User Quota:Unlimited Connections(我没改动)

    ==========================================================

    Users页:

    这里就是输入各用户的邮箱信息等

    ===================================================

    TD Servers页:这个是主要设置,我原先发送没反应就是这里的问题

    见界面最下面的设置如下:
    Miscellaneous
        Mail Protocol: Using Windows MAPI<Windows Mapi OUTLOOK> Profile.
        Lock Timerout:0(HOURS)(这个我乱设置的)
        注:个人认为Mail Protocol设置是关键,点击Mail Protocol后在弹出对话框中选择Windows MAPI ,在后输入框中输入Windows Mapi OUTLOOK就OK了,网上很多是写SMTP server的可能是邮件服务器不同(最初也试过都没用)

    =====================================================

    Site Config页

    修改表格的MAIL_INTERVAL=0,网上看来的,哈哈

    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    总结:经过以上操作后,手工发送邮件通过,自动的还没测,163外的邮也没测,到现在还不明什么是邮件服务器,配置时为什么要邮件服务器,OUTLOOK是吗?为什么不能样BUGFREE一样定死算了,哈哈

     

     

  • TD7.6移植到TD8.0(另一台机)简单过程

    2008-01-29 16:02:35

    操作系统版本:windows 2000 to windows 2000 server

    数据库:Access

    背景:想在服务器上装个TD8.0,把本机上的东东移植到上面,在网上找了“N”多资料,初步测试移植成功,很简单的方法可能不是完全移植有待试验,对这次移植做个总结

    需要备份的文件
    1、c:\TD_dir\Default\项目(存放该项目数据库、附件信息等,要拷的)
    2、C:\Program Files\Common Files\Mercury Interactive\DomsInfo

    步骤:
    1、在服务器上装好TD8.0,确保能正常使用
    2、创建同名项目(数据库),进Site Administrator里建
    3、将本机上的项目拷至服务器上对应目录覆盖:如本机的C:\TD_Dir\TEST\PIP_SX(项目名)
    4、分别打开服务器与本机的“C:\Program Files\Common Files\Mercury Interactive\DomsInfo\DOMS.MDB”文件(密码为tdtdtd),打开USERS表,将本机的users表中数据复制至服务器的users表中。
    5、 重启服务器上的TD服务
    6、现在登录TD会提示更新数据库,只要进入Site Administrator中找到刚移植的数据库后,选中点击右键“Upgrade Project ”更新完毕后就可以进入了。

    遗留问题:怎么修改C:\TD_Dir的路径,装在C盘不是很“危险”???

  • WINDOWs2000下安装ORACLE9I与10G

    2007-12-03 17:02:44

    操作系统:windows2000 server

    软件oracle9i+oracle10G102

    步骤:(先装9i再装10g)

    1、先安装oracle9i,完成后关闭所有服务。

    2、安装oracle10G,安装的路径与9i路径不一致,完成。

    3、重启系统(个人行为),修改oracle9i监听程序端口listener.ora(1522)并修改tnsnames.ora、snmp_ro.ora文件中的相关端口。

    问题:

    1、装完9i后发现可以登录,但点击时出现“ORACLE不可用”

    方法:sqlplus /nolog
         conn sys/sys as sysdba
         startup
         执行以上命令后,就可以登入了

    2、装完10G且修改好9i的监听程序端口后,进入9i同样出现“ORACLE不可用”,用一中的方法不行,执行tnsping orcl9i发现指向的10G的目录

    方法一:我的电脑->属性->高级->环境变量->path;修改path值将"oracle9i\...\bin"放到"oracle10g\...\bin"前,重启系统再使用问题一的方法就可以了。

    方法二:不修改path值,修改10g下的tnsnames.ora文件,将9i中的配置拷入10的tnsnames.ora,同样修改9i的tnsnames.ora文件。再使用命令启动9i数据库(修改后的tnsnames.ora文件见下面)
         sqlplus /nolog
         conn sys/sys@orcl9i as sysdba
         startup

    以上只为个人做参考用,感谢天涯浪子的帮助

    10G的tnsnames.ora
    ====================================================

    ORCL10G =
       (DEscrīptION =
         (ADDRESS = (PROTOCOL = TCP)(HOST = xt-b271dac81b07)(PORT = 1521))
         (CONNECT_DATA =
           (SERVER = DEDICATED)
           (SERVICE_NAME = orcl10g)
         )
       )
    ORCL9I =
       (DEscrīptION =
         (ADDRESS_LIST =
           (ADDRESS = (PROTOCOL = TCP)(HOST = xt-b271dac81b07)(PORT = 1522))
         )
         (CONNECT_DATA =
           (SERVICE_NAME = ORCL9I)
         )
       )
    EXTPROC_CONNECTION_DATA =
       (DEscrīptION =
         (ADDRESS_LIST =
           (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
         )
         (CONNECT_DATA =
          (SID = PLSExtProc)
           (PRESENTATION = RO)
         )
       )

    ====================================================

    9i的tnsnames.ora
    ====================================================

    ORCL10G =
       (DEscrīptION =
         (ADDRESS = (PROTOCOL = TCP)(HOST = xt-b271dac81b07)(PORT = 1521))
         (CONNECT_DATA =
           (SERVER = DEDICATED)
           (SERVICE_NAME = orcl10g)
         )
       )
    ORCL9I =
       (DEscrīptION =
         (ADDRESS_LIST =
           (ADDRESS = (PROTOCOL = TCP)(HOST = xt-b271dac81b07)(PORT = 1522))
         )
         (CONNECT_DATA =
           (SERVICE_NAME = ORCL9I)
         )
       )
    INST1_HTTP =
       (DEscrīptION =
         (ADDRESS_LIST =
           (ADDRESS = (PROTOCOL = TCP)(HOST = xt-b271dac81b07)(PORT = 1522))
         )
         (CONNECT_DATA =
           (SERVER = SHARED)
           (SERVICE_NAME = MODOSE)
           (PRESENTATION = http://HRService)
        )
       )
    EXTPROC_CONNECTION_DATA =
       (DEscrīptION =
         (ADDRESS_LIST =
           (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
         )
         (CONNECT_DATA =
           (SID = PLSExtProc)
           (PRESENTATION = RO)
         )
       )

  • ORACLE 杂记

    2007-09-24 10:39:06

    取得字段中的最大值:
       SELECT GREATEST(1,2,3) from dual;
       说明:Oracle中,greatest比较如果第一个值为数字,则将所有的值进行数值比较,如果为字符串,则所有的参数进行字符串比较。

    在过程中更新不确定字段:
        execute immediate('update pippro set '||P_NAME||'=to_date(to_char(sysdate,''yyyy-mm-dd''),''yyyy-mm-dd'') where nid='||P_NID);
        说明:P_NAME:传进来的参数
             '':字段串里的'用''代替

    ORA-00913
       通常在一张表向另一张表插数据或更改数据时出现,原因是张两表的表结构不一致可用desc test,desc test1对照一下

    ORA-02298
       “未找到父项关键字”的错误。该错误的原因就是数据库表中出现了不能满足外键约束条件的记录,子表中的外键值取值不在父表的主键值内

    ORA-08189
       “ 因为未启用行移动功能, 不能闪回表”的错误。
        执行以下语句启用行移动功能:alter table TAB1 enable row movement;
        执行以下语句关闭行移动功能:alter table TAB1 DISABLED row movement;

Open Toolbar