星期三, 五月 21, 2008

EXcel多表之间操作(VBA)

"from [产品资料$] a,[进货$] b,[销售$] c where a.产品代码=b.产品代码 and a.产品代码=c.产品代码"
'[a65536].End(xlUp).Offset(1, 0).CopyFromRecordset conn.Execute(Sql)
 
Sub 汇总()
Range("A2:J100").ClearContents
Set conn = CreateObject("adodb.connection")
conn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
Sql = "select A.产品代码,A.名称,sum(B.进货数量),B.进货单价,sum(B.进货金额),sum(C.销售数量),C.销售单价,sum(C.销售金额),sum(C.销售数量)*(C.销售单价-B.进货单价),sum(B.进货数量)-sum(C.销售数量) from [产品资料$] as A,[进货$] as B,[销售$] as C where A.产品代码=B.产品代码 and B.产品代码=C.产品代码 group by A.产品代码,A.名称,B.进货单价,C.销售单价"
Sheet2.[a2].CopyFromRecordset conn.Execute(Sql)
conn.Close
Set conn = Nothing
End Sub
 

Excel表格下面的SQL对比

在excel工具--宏下面--VBA然后在模块中加入模块1,然后显示窗体设计器下面加入一个按钮
Sub 查询()
  Dim MYSTR As String
   Range("A2:AT1500").ClearContents
   Set CONN = CreateObject("adodb.connection")
   CONN.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
  ' For I = 1 To Sheets.Count - 2
   '    sq1 = sq1 & "select * from [" & Sheets(I).Name & "$] where 工资级别='6级'" & " UNION "
  ' Next I
  ' sq1 = Left(sq1, Len(sq1) - 7)
  Sq1 = "select * from [" & Sheets(2).Name & "$] where 监管条件 like '%/B'  and b2 not in (select b2 from [" & Sheets(1).Name & "$])"
  [a2].CopyFromRecordset CONN.Execute(Sq1)
  CONN.Close
  Set CONN = Nothing
 End Sub

星期二, 五月 20, 2008

C#--事件教程


本教程展示如何在 C# 中声明事件、调用事件和挂接到事件。
 
C# 中的"事件"是当对象发生某些有趣的事情时,类向该类的客户提供通知的一种方法。事件最常见的用途是用于图形用户界面;通常,表示界面中的控件的类具有一些事件,当用户对控件进行某些操作(如单击某个按钮)时,将通知这些事件。
 
但是事件未必只用于图形界面。事件为对象提供一种通常很有用的方法来发出信号表示状态更改,这些状态更改可能对该对象的客户很有用。事件是创建类的重要构造块,这些类可在大量的不同程序中重复使用。
 
使用委托来声明事件。如果您尚未学习"委托教程",您应先学习它,然后再继续。请回忆委托对象封装一个方法,以便可以匿名调用该方法。事件是类允许客户为其提供方法(事件发生时应调用这些方法)的委托的一种方法。事件发生时,将调用其客户提供给它的委托。
 
除声明事件、调用事件和与事件挂钩的示例以外,本教程还介绍下列主题:
 
事件和继承
接口中的事件
.NET Framework 指南
示例 1
下面的简单示例展示一个 ListWithChangedEvent 类,该类类似于标准的 ArrayList 类,而且,每当列表内容更改时,该类均调用 Changed 事件。这样一个通用用途的类可在大型程序中以多种方式使用。
 
例如,某字处理器可能包含打开的文档的列表。每当该列表更改时,可能需要通知字处理器中的许多不同对象,以便能够更新用户界面。使用事件,维护文档列表的代码不需要知道需要通知谁,一旦文档列表发生了更改,将自动调用该事件,正确通知每个需要通知的对象。使用事件提高了程序的模块化程度。
 
// events1.cs
using System;
namespace MyCollections
{
   using System.Collections;
 
   // A delegate type for hooking up change notifications.
   public delegate void ChangedEventHandler(object sender, EventArgs e);
 
   // A class that works just like ArrayList, but sends event
   // notifications whenever the list changes.
   public class ListWithChangedEvent: ArrayList
   {
      // An event that clients can use to be notified whenever the
      // elements of the list change.
      public event ChangedEventHandler Changed;
 
      // Invoke the Changed event; called whenever list changes
      protected virtual void OnChanged(EventArgs e)
      {
         if (Changed != null)
            Changed(this, e);
      }
 
      // Override some of the methods that can change the list;
      // invoke event after each
      public override int Add(object value)
      {
         int i = base.Add(value);
         OnChanged(EventArgs.Empty);
         return i;
      }
 
      public override void Clear()
      {
         base.Clear();
         OnChanged(EventArgs.Empty);
      }
 
      public override object this[int index]
      {
         set
         {
            base[index] = value;
            OnChanged(EventArgs.Empty);
         }
      }
   }
}
 
namespace TestEvents
{
   using MyCollections;
 
   class EventListener
   {
      private ListWithChangedEvent List;
 
      public EventListener(ListWithChangedEvent list)
      {
         List = list;
         // Add "ListChanged" to the Changed event on "List".
         List.Changed += new ChangedEventHandler(ListChanged);
      }
 
      // This will be called whenever the list changes.
      private void ListChanged(object sender, EventArgs e)
      {
         Console.WriteLine("This is called when the event fires.");
      }
 
      public void Detach()
      {
         // Detach the event and delete the list
         List.Changed -= new ChangedEventHandler(ListChanged);
         List = null;
      }
   }
 
   class Test
   {
      // Test the ListWithChangedEvent class.
      public static void Main()
      {
      // Create a new list.
      ListWithChangedEvent list = new ListWithChangedEvent();
 
      // Create a class that listens to the list's change event.
      EventListener listener = new EventListener(list);
 
      // Add and remove items from the list.
      list.Add("item 1");
      list.Clear();
      listener.Detach();
      }
   }
}输出
This is called when the event fires.
This is called when the event fires.代码讨论
声明事件    
    若要在类内声明事件,首先必须声明该事件的委托类型(如果尚未声明的话)。
   public delegate void ChangedEventHandler(object sender, EventArgs e);
   委托类型定义传递给处理该事件的方法的一组参数。
   多个事件可共享相同的委托类型,因此仅当尚未声明任何合适的委托类型时才需要执行该步骤。
 
接下来,声明事件本身。
 
       public event ChangedEventHandler Changed;
       声明事件的方法与声明委托类型的字段类似,只是关键字 event 在事件声明前面,在修饰符后面。
       事件通常被声明为公共事件,但允许任意可访问修饰符。
 
调用事件  
        类声明了事件以后,可以就像处理所指示的委托类型的字段那样处理该事件。
          如果没有任何客户将委托与该事件挂钩,该字段将为空;否则该字段引用应在调用该事件时调用的委托。
        因此,调用事件时通常先检查是否为空,然后再调用事件。
 if (Changed != null)
 Changed(this, e);调用事件只能从声明该事件的类内进行。
 
与事件挂钩  
 从声明事件的类外看,事件像个字段,但对该字段的访问是非常受限制的。只可进行如下操作:
 在该字段上撰写新的委托。
 从字段(可能是复合字段)移除委托。
 使用 += 和 -= 运算符完成此操作。为开始接收事件调用,客户代码先创建事件类型的委托,
 该委托引用应从事件调用的方法。然后它使用 += 将该委托写到事件可能连接到的其他任何委托上。
 
 // Add "ListChanged" to the Changed event on "List":
 List.Changed += new ChangedEventHandler(ListChanged);
 
 当客户代码完成接收事件调用后,它将使用运算符 -= 从事件移除其委托。
 // Detach the event and delete the list:
 List.Changed -= new ChangedEventHandler(ListChanged);
 
事件和继承
 当创建可以从中派生的通用组件时,事件中有时出现似乎会成为问题的情况。由于事件只能从声明它们的类中调用,
 因此派生类不能直接调用在基类内声明的事件。虽然这有时符合需要,但通常使派生类能够自由调用事件更合适。
 这通常通过为事件创建受保护的调用方法来实现。通过调用该调用方法,派生类便可以调用此事件。
 为获得更大的灵活性,调用方法通常声明为虚拟的,这允许派生类重写调用方法。
 这使得派生类可以截获基类正在调用的事件,有可能对这些事件执行它自己的处理。
 
 在前面的示例中,这已用 OnChanged 方法实现。如果需要,派生类可调用或重写该方法。
 
接口中的事件
事件和字段之间的另一个差异是,事件可放在接口中,而字段不能。当实现接口时,实现类必须在实现接口的类中提供相应的事件。
 
.NET Framework 指南
尽管 C# 语言允许事件使用任意委托类型,但".NET Framework"对于应为事件使用的委托类型有一些更严格的指南。
 
如果打算将您的组件与".NET Framework"一起使用,您可能希望遵守这些指南。
 
".NET Framework"指南指示用于事件的委托类型应采用两个参数:指示事件源的"对象源"参数和封装事件的其他任何相关信息的"e"参数。
"e"参数的类型应从 EventArgs 类派生。对于不使用其他任何信息的事件,".NET Framework"已定义了一个适当的委托类型:EventHandler。
 
示例 2
下面的示例是"示例 1"的修改版本,它遵守".NET Framework"指南。该示例使用 EventHandler 委托类型。
 
// events2.cs
using System;
namespace MyCollections
{
   using System.Collections;
 
   // A class that works just like ArrayList, but sends event
   // notifications whenever the list changes:
   public class ListWithChangedEvent: ArrayList
   {
      // An event that clients can use to be notified whenever the
      // elements of the list change:
      public event EventHandler Changed;
 
      // Invoke the Changed event; called whenever list changes:
      protected virtual void OnChanged(EventArgs e)
      {
         if (Changed != null)
            Changed(this,e);
      }
 
      // Override some of the methods that can change the list;
      // invoke event after each:
      public override int Add(object value)
      {
         int i = base.Add(value);
         OnChanged(EventArgs.Empty);
         return i;
      }
 
      public override void Clear()
      {
         base.Clear();
         OnChanged(EventArgs.Empty);
      }
 
      public override object this[int index]
      {
         set
         {
            base[index] = value;
            OnChanged(EventArgs.Empty);
         }
      }
   }
}
 
namespace TestEvents
{
   using MyCollections;
 
   class EventListener
   {
      private ListWithChangedEvent List;
 
      public EventListener(ListWithChangedEvent list)
      {
         List = list;
         // Add "ListChanged" to the Changed event on "List":
         List.Changed += new EventHandler(ListChanged);
      }
 
      // This will be called whenever the list changes:
      private void ListChanged(object sender, EventArgs e)
      {
         Console.WriteLine("This is called when the event fires.");
      }
 
      public void Detach()
      {
         // Detach the event and delete the list:
         List.Changed -= new EventHandler(ListChanged);
         List = null;
      }
   }
 
   class Test
   {
      // Test the ListWithChangedEvent class:
      public static void Main()
      {
      // Create a new list:
      ListWithChangedEvent list = new ListWithChangedEvent();
 
      // Create a class that listens to the list's change event:
      EventListener listener = new EventListener(list);
 
      // Add and remove items from the list:
      list.Add("item 1");
      list.Clear();
      listener.Detach();
      }
   }
}输出
This is called when the event fires.
This is called when the event fires.
 
 
 

C#--委托教程

 本教程演示委托类型。它说明如何将委托映射到静态方法和实例方法,以及如何组合委托(多路广播)。
 
C# 中的委托类似于 C 或 C++ 中的函数指针。使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与 C 或 C++ 中的函数指针不同,委托是面向对象、类型安全的,并且是安全的。
 
委托声明定义一种类型,它用一组特定的参数以及返回类型封装方法。对于静态方法,委托对象封装要调用的方法。对于实例方法,委托对象同时封装一个实例和该实例上的一个方法。如果您有一个委托对象和一组适当的参数,则可以用这些参数调用该委托。
 
委托的一个有趣且有用的属性是,它不知道或不关心自己引用的对象的类。任何对象都可以;只是方法的参数类型和返回类型必须与委托的参数类型和返回类型相匹配。这使得委托完全适合"匿名"调用。
 
注意   委托是在调用方的安全权限下运行而不是声明方的权限下运行。
此教程包括两个示例:
 
示例 1 展示如何声明、实例化和调用委托。
示例 2 展示如何组合两个委托。
此外,还讨论以下主题:
 
委托和事件
委托与接口
示例 1
下面的示例阐释声明、实例化和使用委托。BookDB 类封装一个书店数据库,它维护一个书籍数据库。它公开 ProcessPaperbackBooks 方法,该方法在数据库中查找所有平装书,并为每本书调用一个委托。所使用的 delegate 类型称为 ProcessBookDelegate。Test 类使用该类输出平装书的书名和平均价格。
 
委托的使用促进了书店数据库和客户代码之间功能的良好分隔。客户代码不知道书籍的存储方式和书店代码查找平装书的方式。书店代码也不知道找到平装书后将对平装书进行什么处理。
 
// bookstore.cs
using System;
 
// A set of classes for handling a bookstore:
namespace Bookstore d
{
   using System.Collections;
 
   // Describes a book in the book list:
   public struct Book
   {
      public string Title;        // Title of the book.
      public string Author;       // Author of the book.
      public decimal Price;       // Price of the book.
      public bool Paperback;      // Is it paperback?
 
      public Book(string title, string author, decimal price, bool paperBack)
      {
         Title = title;
         Author = author;
         Price = price;
         Paperback = paperBack;
      }
   }
 
   // Declare a delegate type for processing a book:
   public delegate void ProcessBookDelegate(Book book);
 
   // Maintains a book database.
   public class BookDB
   {
      // List of all books in the database:
      ArrayList list = new ArrayList(); 
 
      // Add a book to the database:
      public void AddBook(string title, string author, decimal price, bool paperBack)
      {
         list.Add(new Book(title, author, price, paperBack));
      }
 
      // Call a passed-in delegate on each paperback book to process it:
      public void ProcessPaperbackBooks(ProcessBookDelegate processBook)
      {
         foreach (Book b in list)
         {
            if (b.Paperback)
            // Calling the delegate:
               processBook(b);
         }
      }
   }
}
 
// Using the Bookstore classes:
namespace BookTestClient
{
   using Bookstore;
 
   // Class to total and average prices of books:
   class PriceTotaller
   {
      int countBooks = 0;
      decimal priceBooks = 0.0m;
 
      internal void AddBookToTotal(Book book)
      {
         countBooks += 1;
         priceBooks += book.Price;
      }
 
      internal decimal AveragePrice()
      {
         return priceBooks / countBooks;
      }
   }
 
   // Class to test the book database:
   class Test
   {
      // Print the title of the book.
      static void PrintTitle(Book b)
      {
         Console.WriteLine("   {0}", b.Title);
      }
 
      // Execution starts here.
      static void Main()
      {
         BookDB bookDB = new BookDB();
 
         // Initialize the database with some books:
         AddBooks(bookDB);    
 
         // Print all the titles of paperbacks:
         Console.WriteLine("Paperback Book Titles:");
         // Create a new delegate object associated with the static
         // method Test.PrintTitle:
         bookDB.ProcessPaperbackBooks(new ProcessBookDelegate(PrintTitle));
 
         // Get the average price of a paperback by using
         // a PriceTotaller object:
         PriceTotaller totaller = new PriceTotaller();
         // Create a new delegate object associated with the nonstatic
         // method AddBookToTotal on the object totaller:
         bookDB.ProcessPaperbackBooks(new ProcessBookDelegate(totaller.AddBookToTotal));
         Console.WriteLine("Average Paperback Book Price: ${0:#.##}",
            totaller.AveragePrice());
      }
 
      // Initialize the book database with some test books:
      static void AddBooks(BookDB bookDB)
      {
         bookDB.AddBook("The C Programming Language",
            "Brian W. Kernighan and Dennis M. Ritchie", 19.95m, true);
         bookDB.AddBook("The Unicode Standard 2.0",
            "The Unicode Consortium", 39.95m, true);
         bookDB.AddBook("The MS-DOS Encyclopedia",
            "Ray Duncan", 129.95m, false);
         bookDB.AddBook("Dogbert's Clues for the Clueless",
            "Scott Adams", 12.00m, true);
      }
   }
}输出
Paperback Book Titles:
   The C Programming Language
   The Unicode Standard 2.0
   Dogbert's Clues for the Clueless
Average Paperback Book Price: $23.97代码讨论
声明委托   以下语句:
public delegate void ProcessBookDelegate(Book book);声明一个新的委托类型。每个委托类型都描述参数的数目和类型,以及它可以封装的方法的返回值类型。
每当需要一组新的参数类型或新的返回值类型时,都必须声明一个新的委托类型。
 
实例化委托   声明了委托类型后,必须创建委托对象并使之与特定方法关联。与所有其他对象类似,新的委托对象用 new 表达式创建。但是当创建委托时,传递给 new 表达式的参数很特殊:它的编写类似于方法调用,但没有方法的参数。
下列语句:
 
bookDB.ProcessPaperbackBooks(new ProcessBookDelegate(PrintTitle));创建与静态方法 Test.PrintTitle 关联的新的委托对象。下列语句:
 
bookDB.ProcessPaperbackBooks(new
   ProcessBookDelegate(totaller.AddBookToTotal));创建与对象 totaller 上的非静态方法 AddBookToTotal 关联的新的委托对象。在两个例子中,新的委托对象都立即传递给 ProcessPaperbackBooks 方法。
 
请注意一旦创建了委托,它所关联到的方法便永不改变:委托对象不可改变。
 
调用委托   创建委托对象后,通常将委托对象传递给将调用该委托的其他代码。通过委托对象的名称(后面跟着要传递给委托的参数,括在括号内)调用委托对象。下面是委托调用的示例:
processBook(b);在此示例中,可以通过使用 BeginInvoke 和 EndInvoke 方法同步或异步调用委托。
 
示例 2
本示例演示组合委托。委托对象的一个有用属性是,它们可以"+"运算符来组合。组合的委托可调用组成它的那两个委托。只有相同类型的委托才可以组合。
 
"-"运算符可用来从组合的委托移除组件委托。
 
// compose.cs
using System;
 
delegate void MyDelegate(string s);
 
class MyClass
{
    public static void Hello(string s)
    {
        Console.WriteLine("  Hello, {0}!", s);
    }
 
    public static void Goodbye(string s)
    {
        Console.WriteLine("  Goodbye, {0}!", s);
    }
 
    public static void Main()
    {
        MyDelegate a, b, c, d;
 
        // Create the delegate object a that references
        // the method Hello:
        a = new MyDelegate(Hello);
        // Create the delegate object b that references
        // the method Goodbye:
        b = new MyDelegate(Goodbye);
        // The two delegates, a and b, are composed to form c:
        c = a + b;
        // Remove a from the composed delegate, leaving d,
        // which calls only the method Goodbye:
        d = c - a;
 
        Console.WriteLine("Invoking delegate a:");
        a("A");
        Console.WriteLine("Invoking delegate b:");
        b("B");
        Console.WriteLine("Invoking delegate c:");
        c("C");
        Console.WriteLine("Invoking delegate d:");
        d("D");
    }
}输出
Invoking delegate a:
  Hello, A!
Invoking delegate b:
  Goodbye, B!
Invoking delegate c:
  Hello, C!
  Goodbye, C!
Invoking delegate d:
  Goodbye, D!委托和事件
委托非常适合于用作事件(从一个组件就该组件中的更改通知"侦听器")。有关将委托用于事件的更多信息,请参见事件教程。
 
委托与接口
委托和接口的类似之处是,它们都允许分隔规范和实现。多个独立的作者可以生成与一个接口规范兼容的多个实现。类似地,委托指定方法的签名,多个作者可以编写与委托规范兼容的多个方法。何时应使用接口,而何时应使用委托呢?
 
委托在以下情况下很有用:
 
调用单个方法。
一个类可能希望有方法规范的多个实现。
希望允许使用静态方法实现规范。
希望类似事件的设计模式(有关更多信息,请参见事件教程)。
调用方不需要知道或获得在其上定义方法的对象。
实现的提供程序希望只对少数选择组件"分发"规范实现。
需要方便的组合。
接口在以下情况下很有用:
 
规范定义将调用的一组相关方法。
类通常只实现规范一次。
接口的调用方希望转换为接口类型或从接口类型转换,以获得其他接口或类。
 
 

P903 X500 重启

P903硬启的方式和其他PPC手机相比较为"独特",需要用户同时按下开关以及RESET键,然后同时松开,再按下"挂断键"约5秒左右,屏幕便会提示询问是否清除本机内存,接下来要在倒计时结束时按住左软键不放,直到屏幕提示"yes",便可以硬启手机.

星期五, 五月 16, 2008

3DES加解密

///    <summary>   
        ///   3des加密字符串   
        ///    </summary>   
        ///    <param   name="a_strString">要加密的字符串 </param>   
        ///    <param   name="a_strKey">密钥 </param>   
        ///    <returns>加密后并经base64编码的字符串 </returns>   
        ///    <remarks>静态方法,采用默认ascii编码 </remarks>   
        public static string Encrypt3DES(string a_strString, string a_strKey)
        {
            TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();
            MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();

            DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(a_strKey));
            DES.Mode = CipherMode.ECB;

            ICryptoTransform DESEncrypt = DES.CreateEncryptor();

            byte[] Buffer = ASCIIEncoding.ASCII.GetBytes(a_strString);
            return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
        }//end   method   

///    <summary>   
        ///   3des解密字符串   
        ///    </summary>   
        ///    <param   name="a_strString">要解密的字符串 </param>   
        ///    <param   name="a_strKey">密钥 </param>   
        ///    <returns>解密后的字符串 </returns>   
        ///    <exception   cref="">密钥错误 </exception>   
        ///    <remarks>静态方法,采用默认ascii编码 </remarks>   
        public static string Decrypt3DES(string a_strString, string a_strKey)
        {
            TripleDESCryptoServiceProvider DES = new
            TripleDESCryptoServiceProvider();
            MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();

            DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(a_strKey));
            DES.Mode = CipherMode.ECB;

            ICryptoTransform DESDecrypt = DES.CreateDecryptor();

            string result = "";
            try
            {
                byte[] Buffer = Convert.FromBase64String(a_strString);
                result = ASCIIEncoding.ASCII.GetString(DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
            }
            catch (Exception e)
            {
                throw (new Exception("不是有效的 base64  字符串", e));
            }

            return result;
        }//end   method   

星期四, 五月 08, 2008

down oracle patch

需要oracle补丁的请进来,oracle 补丁下载新方法。

 

oracle patchset

Tips--Oacle 9i Database 所有大版本补丁集列表
 
有朋友问到补丁集的号是多少,个人通常都是用FTP来download补丁集,这里也顺便记录一下9i的所有补丁集的号。方便自己和需要的朋友查看:
4547809 Oracle PATCH SET FOR DATABASE SERVER 9.2.0.8 25-AUG-2006
4163445 Oracle PATCH SET FOR DATABASE SERVER 9.2.0.7 23-SEP-2005
3948480 Oracle PATCH SET FOR DATABASE SERVER 9.2.0.6 13-DEC-2004
3501955 Oracle PATCH SET FOR DATABASE SERVER 9.2.0.5 26-MAR-2004
3301544 Oracle PATCH SET FOR DATABASE SERVER 9.0.1.5 08-JAN-2004
3095277 Oracle PATCH SET FOR DATABASE SERVER 9.2.0.4 05-SEP-2003
2761332 Oracle PATCH SET FOR DATABASE SERVER 9.2.0.3 03-APR-2003
2632931 Oracle PATCH SET FOR DATABASE SERVER 9.2.0.2 13-NOV-2002
2517300 Oracle PATCH SET FOR DATABASE SERVER 9.0.1.4 17-AUG-2002
2271678 Oracle PATCH SET FOR DATA SERVER 9.0.1.3 19-MAR-2002
2072050 Oracle PATCH SET FOR DATA SERVER 9.0.1.2 15-NOV-2001
1968474 Oracle PATCH SET FOR DATA SERVER 9.0.1.1 12-SEP-2001
 
Tips--Oracle 8174的patch set还是可download
 

有很多的客户,还是跑在Oracle 8i上,所以它的patch备一份还是有必要的,要不然哪一天oracle不提供下载了,不知道到哪里找呢,patch set number 是2376472

C:Documents and SettingsAdministrator>ftp updates.oracle.com
Connected to bigip-aru.oracle.com.
220 FTP server ready.
User (bigip-aru.oracle.com:(none)): vongates
331 Username OK, please send password.
Password:
230-
230- Welcome to the Oracle Patch Download FTP Server
230-
230- For detailed help, use command "quote site help".
230
ftp> cd 2376472
250 Changed directory OK.
ftp> ls
200 PORT command OK.
150 Opening data connection for file listing.
Tips--oracle 10g 所有大版本 patchset 列表(原)

 
今天有一兄弟问我10.1.0.3的patch set number是多少。说实在的只是在10gR1刚出来的时候有自己测试过R1版本。后来没有怎么用过。现在用10gR2的比较多,接着2007OOW以后,大约在2007年的9月应该可以拿到11g的正式安装源CD吧。这里记录一下到现在的所有大的patchset number供大家方便查看:

5337014 Patchset 10.2.0.3 22-FEB-2007
4547817 Patchset 10.2.0.2 03-MAR-2006
4505133 Patchset 10.1.0.5 05-FEB-2006
4163362 Patchset 10.1.0.4 18-MAY-2005
3761843 Patchset 10.1.0.3 16-AUG-2004

 

域策略设首页

开始--->管理工具-->active directory用户和计算机-->选择域右键属性-->找到组策略tab--》新建一个对像链接--》打开后用户配置中windows设置--》Internet explorer 维护-->URL――――》重要URL打开就首页设置
 
然后在管理模板中-->windows组件-->Internet Explorer-->禁用更改主页设置
 
原因:设置用户代理策略,不要设置计算机策略,这样当用户登录域时策略被应用,不登录域时,用本地帐户则不应用域策略。