You may find that some other recordset or object is referenced more often,
or that there are just too few references to the "With" object in its block
to justify the "With ... End With" block.

Great for eliminating the FeatureEnvy smell that "With" can paper over.

Languages:
* VbClassic
* Applies to any language supporting the "with" shorthand.  Such as...
** PascalLanguage

Related Refactorings:
* RefactorIntroduceWith - to reintroduce "with" block, possibly for a different record.

----

In VbClassic:
from...
   With rsObject
      .Open ...
      If .R''''''ecordCount = 0 Then
         .A''''''ddNew
         !PK = value
      End If
      !Attr = value
   End With

to...
   rsObject.Open ...
   If rsObject.R''''''ecordCount = 0 Then
      rsObject.A''''''ddNew
      rsObject!PK = value
   End If
   rsObject!Attr = value

PascalLanguage:
from...
   with emp do
   begin
      name       := "Joe";
      status     := "X";
      with bday do
      begin
         month :=    6;
         day   :=   27;
         year  := 1958;
      end
   end
to...
   emp.name       := "Joe";
   emp.status     := "X";
   emp.bday.month :=    6;
   emp.bday.day   :=   27;
   emp.bday.year  := 1958;
----
'''However'''

   With rsObject
      .Open ...
      If .R''''''ecordCount = 0 Then
         .A''''''ddNew
         !PK = value
      End If
      !Attr = value
   End With

is immaculately clear, and prevents a lot of needless typing.  This particular example is one in which I '''would''' use a WITH construct if my language provided it.  Absolutely.
----
ContributorsList: JeffGrigg, ''(name of Pascal example author missing)''
----
[CategoryRefactoring/RefactoringLanguage]