anchor.diff:    BindStringV(AParamName, AParamValue);
   end;
   
  +procedure TKDBConnection.BindStringOrNull(AParamName, AParamValue: String);
  +begin
  +  if AParamValue = '' then
  +    BindNull(aParamName)
  +  else
  +    BindString(aParamName, AParamValue);
  +end;
  +
   procedure TKDBConnection.BindTimeStamp(AParamName: String; AParamValue: TTimeStamp);
   begin
     BindTimeStampV(AParamName, AParamValue);
  
positive.code:     {@member ColMemoryByName
        Get Column "AName" as a Blob}
      property ColBlobByName    [AName: String]: TBytes Read GetColBlobByName;
      {@member ColTimeStampByName
        Get Column "AName" as a TTimeStamp}
      property ColTimeStampByName [AName: String]: DateSupport.TTimeStamp Read GetColTimeStampByName;
  
negative.code:     FTransactionId: String;
      function GetTables : TStrings;
      function LookupInternal(ATableName, AKeyField, AKeyValue, AValueField, ADefault: String; bAsString: Boolean): String;
      function GetColBlobAsString(ACol: Integer): String;
      function GetColBlobAsStringByName(AName: String): String;
    Protected
      // caching for blobs, for use by concrete implementations
      procedure KeepBoundObj(sName : String; AObj : TKDBBoundParam);
  