Поиск с подсказками на jQuery + PHP

autocomplete В этой статье я кратко опишу свой опыт в реализации поиска в базе MySQL с автодополнением (это когда по мере набирания текста, во всплывающем окошке показываются похожие результаты, такое можно наблюдать при наборе текста в поисковиках и уже во многих сайтах). Это очень удобно, так как при поиске товара или чего-либо еще на сайте, рядом со строкой поиска появляется окно с уже найденными вариантами написания и пользователю уже легче ориентироваться, а так же меньше надо набирать текст.
Читать далее Поиск с подсказками на jQuery + PHP

Как программно создать фильтр для dxDBGrid

При использовании замечательно компоненты ExpressQuantumGrid Suite удобно в шапке Grid’а устанавливать фильтры. Но если надо установить фильтр программно, то я столкнулся с таким нюансом. Если просто надо отфильтровать данные по какому-то значению, то это делается легко вызовом такой процедуры:

dxDBGrid1.Filter.Add(AColumn: TdxDBTreeListColumn; const AValue: Variant; const ADisplayValue: string);

где
AColumn — какую колонку фильтруем
AValue — по какому значению фильтруем
ADisplayValue — что отобразить в панели статуса фильтра

Вот мой пример использования:
Читать далее Как программно создать фильтр для dxDBGrid

Меняем программно папку установки в Inno Setup

При использовании замечательного установщика Inno setup понадобилось сделать проверку на существование папки для установки программы. Если такая папка есть, то переименовать ее по определенному алгоритму (в моем случае добавлять единичку в конце имени) и не озадачивать пользователя переименованием; и уж тем более не перезаписывать программу. Вот такая задача: дать возможность ставить одну программу несколько раз в разные папки.

В скрипте меняем параметр DefaultDirName вот так:

DefaultDirName={code:newTargetDir}

И в конце скрипта в секции code пишем объявленную функцию newTargetDir:

function newTargetDir(Param : string):string;
var
 entry: String;
 i: integer;
begin
  entry := ExpandConstant('{sd}') + '\MyProgram\';
  i := 1;
  if DirExists(entry) then
    repeat
      entry := ExpandConstant('{sd}') + '\MyProgram' + IntToStr(i) + '\'; 
      i := i + 1;
    until not dirExists(entry);
  result := entry;
end;

Здесь встроенная переменная {sd} означает системный диск.

Копирование в буфер обмена в Delphi

Обычное копирование в буфер обмена командой

Clipboard.AsText := str;

работает если копируется строка с английскими символами и/или цифрами.
Строка из русских букв будет скопирована в неверной кодировке.
Вот тут нашел простое решение:

type
    TMyClipboard = class(TClipboard);

  procedure StrToClipboard(const AStr :string);
  var
    vLangID :LANGID;
  begin
    with TMyClipboard(Clipboard) do begin
      Open;
      try
        AsText := AStr;
        vLangID := GetUserDefaultLangID;
        SetBuffer(CF_LOCALE, vLangID, SizeOf(vLangID));
      finally
        Close;
      end;
    end;
  end;

Как исправить поврежденную базу MS SQL (Suspect Mode)

Так случилось, что MS SQL база перешла в «подозрительный» режим (Suspect mode). Никакие манипуляции с базой в таком режиме сделать невозможно, даже отключить. Помогла следующая серия команд в management Studio.
Для начала необходимо перевести базу данных в режим EMERGENCY:

EXEC sp_resetstatus 'yourDBname'
GO
ALTER DATABASE yourDBname SET EMERGENCY
GO

Далее появляется выполнять тестирование и исправление базы:

DBCC checkdb('yourDBname')
GO
ALTER DATABASE yourDBname SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
DBCC CheckDB ('yourDBname', REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE yourDBname SET MULTI_USER
GO

Как вводить только цифры в UITextField и ограничить длину строки ввода

Чтобы в UITextField вводить только цифры и не позволить вводить длинные строки, делаем следующее:

Объявим константы

#define NUMBERS_ONLY @"1234567890"
#define CHARACTER_LIMIT 4

И пишем в делегате UITexField

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS_ONLY] invertedSet];
    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
    return (([string isEqualToString:filtered])&&(newLength <= CHARACTER_LIMIT));
}

Как из Delphi определить установлен ли Excel

Небольшая заметка-памятка. Перед работой с MS Excel желательно проверить установлен ли в системе MS Office.

Uses ActiveX;

if not IsOLEObjectInstalled('Excel.Application') then
  ShowMessage('MS Excel не установлен!')
else
  ShowMessage('MS Excel установлен!');

function IsOLEObjectInstalled(Name: String): boolean;
var
  ClassID: TCLSID;
begin
  Result := CLSIDFromProgID(PWideChar(WideString(Name)), ClassID) = S_OK;
end;