четверг, октября 13, 2011

Как включить показ номеров строк в редакторе SQL Server Management Studio

Чтобы не отвечать на вопрос "А чем ты занимался вчера три часа" ответом "Искал строчку 983 в редакторе" удобно включить отображение номеров строк в редакторе.

Включить можно вот тут: выбрать Сервис - Параметры - Текстовый редактор - Все языки - Общее и поставить крыжик "Номера строк".

В англ. варианте путь этот - Tools - Options - TextEditor - All Languages - General.

среда, октября 12, 2011

Word 2010 - Макрос не найден. Возможно он отключен по соображениям безопасности

Запускаю свежеустановленный MS Office 2010 - и при запуске три раза появляется сообщение "Макрос не найден. Возможно он отключен по соображениям безопасности".



У меня Windows 7 64bit и такой же, 64-bit-ный, Office.

На компьютере установлен Lingvo X3, вот он-то и портит нам картину этим сообщением.
Что характерно, Office ставился уже после того, как был установлен Lingvo.

Чтобы убрать это надоедливое сообщение (пока в ABBYY не смогут пофиксить проблему, правда, зная сколько они делают Lingvo для Андроида, возможно этого не случится никогда), нужно:

зайти в %APPDATA%\Microsoft\Word\Startup и переименовать файл Lingvo14.dotm. Делать это нужно при не запущенном офисе.

понедельник, октября 10, 2011

ProgressDialog, Back и handler


У меня есть activity. На ней имеется кнопка, инициализирующая обращение к какому-то объекту, выполняющему длительную обработку запроса. Перед началом обработки activity показывает progressDialog.
В качестве одного из параметров метода вызываемого объекта передаётся handler. После окончания обработки запроса сервер отправит этому handler сообщение, уведомляя о завершении работы, и передавая, возможно, результат при помощи Bundle.

handler, получив сообщение, спрячет progressDialog и покажет alertDialog, который и сообщит о завершении обработки запроса.

Пусть логика взаимодействия подразумевает возможность не дожидаться завершения запроса. progressDialog в таком случае логично сделать сancelable.

Теперь нужно сделать так, чтобы при нажатии пользователем на Back во время отображения progressDialog, не только прятался бы сам progressDialog, но и завершалась бы текущая activity.  В противном случае получается так, что progressDialog больше не показывается, но по-прежнему продолжает показываться та же activity. Что смутительно.

Для этого нужно диалогу сказать, что делать в случае его отмены:


@Click
public void callServerButton() {
ProgressDialog dialog = new ProgressDialog(this);
dialog.setTitle("Подождите");
dialog.setMessage("Запрос обрабатывается...");
dialog.setCancelable(true);
dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {

@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
dialog.cancel();
finish();
return true;
}
return false;
}
});

activeDialog = dialog;
activeDialog.show();

Server server = new Server();
server.doIt(serverHandler);
}

Теперь во время отображения progressDialog в случае нажатия на Back закроется не только сам диалог, но и activity, чего и добивались.

Теперь возникает другой вопрос - пусть пользователь, не дождавшись завершения работы сервера, нажал Back, в результате activity скрылась. Пользователь продолжает работать с приложением. А в это время сервер закончил обработку запроса и отправил сообщение handler.

handler получает сообщение, пытается создать и отобразить alertDialog. Но диалог использует контекст той activity, которой уже нет - в результате получаем завершение работы приложения и stacktrace для дальнейшего изучения.

Чтобы избежать такой проблемы добавляем какой-нибудь признак в activity. Доопределяем onStop() так, чтобы при выполнении этого метода устанавливалось бы значение этого признака. После этого говорим handler - показывай AlertDialog только в том случае, если значение признака не установлено.

Разумеется, при таком решении пользователь лишается возможности узнать, чем же закончилось выполнение запроса. Для не критичных случаев - это нормально. Например, пользователь захотел посмотреть значения курсов валют, но, не дождавшись, передумал.

Если же происходит что-то, требующее уведомления пользователя, то в данном решении нужно посмотреть в сторону Toast или Notifications.

воскресенье, октября 09, 2011

Не удаётся установить MS SQL Server 2008R2

У меня стоял MS SQL Server 2008R2. Решил снести - снёс.
Решил поставить ещё раз. И вот тут возникла проблема - не встаёт.

Выглядит следующим образом:

я запускаю SQLEXPRWT_x64_RUS.exe, оно распаковывается.








Появляется окошко с доступными действиями.

Я из этого окошка выбираю "New Installation..."
Появляется вот такое окно:

























Прогресс-бар добирается почти до самого правого края - после чего это окошко пропадает и... и ничего больше не происходит. Совсем.

Пошёл читать логи установки (они находятся в C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Log), пошёл в гугла.. Конкретно для этой ситуации решения не нашёл, но нашёл вот такую рекомендацию:

1. В реестре удалить ветки
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer


2. Отправиться в  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstal и там удалить все подпункты, в которых упоминается MS SQL Server


3. Пойти в (или на?!)  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services, откуда удалить пункты, связанные с SQL Server.


4. Перезагрузиться и запустить инсталляцию ещё раз. 


И - помогло ведь. Удалил, перезагрузил, запустил - и пошла установка нормальным образом.