понедельник, 21 февраля 2011 г.

Изменение расположения файлов базы данных MySQL

   Для того чтобы изменить расположение файлов базы данных (БД) MySQL необходимо выполнить следующие шаги (В описании используется Windows Vista и MySQL Server v5.1.47 community):
  1. Остановим службу MySQL (данная служба может иметь еще № версии сервера, например MySQL 5). Для этого можно просмотреть ранее описанную статью, как остановить службу в Windows.
  2. Создадим папку где будут сохраняться базы данных. К примеру d:\ProgramData\MySQL\MySQL Server 5.1\data\
  3. Ищем файл my.ini он обычно может размещаться в папке куда установлен MySQL Server (у меня c:\Program Files\MySQL\MySQL Server 5.1\) или в папке Windows. Открываем его для редактирования любым редактором. (Заранее делая резервную копию данного файла) 
  4. Ищем сукцию [mysqld], а в ней параметр datadir. Данный параметр указывает на размещение папки из базами данных. У меня этот параметр содержит следующее значение: datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/". Изменяем его на: D:/ProgramData/MySQL/MySQL Server 5.1/data/ (следим за правильным указанием разделителей между папками, они в обратную сторону) и сохраняем изменения.
  5.  Копируем старые настройки и базы данных, которые были указаны в файле my.ini (C:\ProgramData\MySQL/MySQL Server 5.1\Data\ в новый каталог, который мы создали в пункте №2 (d:\ProgramData\MySQL\MySQL Server 5.1\data\)
  6. Запускаем службу MySQL. (Для этого можно просмотреть ранее описанную статью, как запустить службу в Windows
  7. Проверяем подключение к MySQL Server с помощью консоли или сторонних утилит. 

воскресенье, 20 февраля 2011 г.

Перезапуск, остановка, возобновление работы служб Windows

    Зачастую бывает необходимо перезапустить или остановить службу Windows для выполнения неких операций, которые блокирует служба. И так приступим. Для описания использовались: Windows XP, Vista, Seven
  1. Открыть Администрирование в  Панели управления. Для этого нажимаем Пуск-> Панель управления. Панель управления может быть в двух режимах просмотра, классическом и кратком. На Рис. 1. представлен краткий вид панели управления.

 
 Рис. 1 -Windows XP
 
Рис. 1 - WindowsVista, 7 
 а. Для Windows XP нужно выбрать пункт "Производительность и обслуживание" Рис.2а (Для Windows Vista, 7 нужно выбрать пункт "Система и безопасность" Рис. 2б).
 
 Рис. 2а
 
Рис. 2б 
б. Выбираем пункт "Администрирование". Рис. 3.

Рис. 3 Windows XP
 
Рис. 3 Windows Vista,7 
Также панель управления может быть представлена в классическом виде, тогда она будет выглядеть примерно так как показано на Рис.4. Выбираем "Администрирование"
Рис.4.Windows XP
 
 Рис.4.Windows Vista, 7 
  1. В Администрировании нужно выбрать пункт "Службы". Рис.5.
Рис.5. Windows XP
 
Рис.5.Windows Vista, 7  
 В результате откроется окно с перечнем служб. (Рис.6.)
Рис.6 Windows XP
 
Рис.6.Windows Vista, 7   
  1. Находим нужную службу в списке представленных служб. И тут у нас есть два пути. Первый - можно кликнуть правой кнопкой мыши на нужную службу, в результате чего появится контекстное меню с помощью которого можно выполнить некие действия с данной службой Например: запустить, остановить, приостановить, перезапустить... Если служба запущена - тогда пункты которые отвечают за запуск будут недоступны. Если службы остановлена - пункты которые отвечают за остановку будет недоступны. Второй путь - нажать правой кнопкой мыши на службе и выбрать пункт меню "Свойства" (или два раза кликнуть левой кнопкой мыши на нужную службу). В результате чего откроется окно "Свойства" службы. (Рис.7) 
 Рис. 7 Windows XP
 
Рис.7.Windows Vista, 7    
   В данном окне можно конкретнее настроить службу, к примеру выбрать тип запуска. Если выбрать тип "Авто"  - службы будет автоматически загружена при старте Windows. При выборе типа запуска "Вручную" - службу нужно будет запускать вручную. И режим "Отключено" - служба будет отключена.
Рис.8 Windows XP
 
Рис.8.Windows Vista, 7   
   Для управления текущей службой также есть клавиши быстрой установки состояния службы. А именно: Пуск (Запустить), Стоп(Остановить), Пауза, Продолжить.
   С помощью данного окна можно настроить и управлять службами которые запущены или будут запускаться  на компьютере при старте системы.

пятница, 18 февраля 2011 г.

Delphi Диалоговое окно "выбор директории"

   Возникла задача, в которой нужно вызвать диалоговое окно выбора папки. Если нужно сделать выбор файла можно просто разместить на форме не визуальный компонент OpenDialog написать код взаимодействия и все готово. Для диалогового окна выбора папки структура немного другая.
Сперва нужно добавить модуль FileCtrl, если конечно его еще нет в списке подключенных модулей. В данном модуле есть две функции SelectDirectory: 
function SelectDirectory ( const Caption : string; const StartDir : WideString; out ChosenDir : string ) : Boolean;
где:  Caption     - Текст заголовка окна;
        StartDir    - Рабочая директория, в которую мы переместимся при открытии диалогового окна выбора папки.
       ChosenDir - Выбранный каталог
Если пользователь, в диалоговом окне выбора  папки, нажал "ОК" - результат вернется True и выбранный каталог будет записан в переменную ChosenDir.
function SelectDirectory ( var CurrDir : string; DialogOptions : TSelectDirOpts ; HelpContext : Longint ) : Boolean;
где: CurrDir - Базовая рабочая директория, в которую мы переместимся при открытии диалогового окна выбора папки.
       DialogOptions - настройка диалогового окна выбора папки. Может принимать следующие параметры: sdAllowCreate, sdPerformCreate, sdPrompt. 

              sdAllowCreate - Диалоговое окно выбора папки будет содержать поле редактирования имени каталога, в которое можно вводить имя несуществующего каталога.Указанное имя будет записано в переменную Directory, но при этом сам каталог создан не будет.
              sdPerformCreate  - Параметр используется только совместно с величиной sdAllowCreate. Когда пользователь вводит несуществующий каталог, функция создает его.
              sdPrompt - Параметр используется только совместно с величиной sdAllowCreate. Если пользователь введет имя не существующего каталога, то будет выведено окно на подтверждение создания каталога. Если параметр Options содержит значение sdPerformCreate и пользователь нажимает кнопку OK в диалоговом окне выбора каталога, то указанный каталог создается. В противном случае, каталог создан не будет.
       HelpContext - указывает контекст системы помощи, который будет активирован при нажатии кнопки F1

Примеры использователя:
var SelectedDirName:string;
begin
...
   SelectDirectory('Выберите каталог','V:\',SelectedDirName);
....
end;
   Результат представлен на Рис.1. (В системе Windows Vista диалоговое окно выбора каталога будет выглядит следующим образом)
 Рис.1. 

понедельник, 14 февраля 2011 г.

Полное удаление MySQL (Проблемы при повторной установке MySQL)

   При установке MySQL - оказалось что когда то он уже устанавливался и при повторной установке спрашивает старый пароль, служба не хочет запускаться...
   Оказывается после удаления MySQL остаются файлы баз данных и еще некоторые файлы настройки. Поскольку я использую Windows XP - файлы баз данных и настроек размещены по умолчанию:
[Диск:]\Documet and Settings\All Users\Application Data\MySQL\MySQl Server [version]\Data
  После перемещения (удаления) папки [Диск:]\Documet and Settings\All Users\Application Data\MySQL\ - все установилось без проблем. Таким образом я устранил проблему при установке MySQL.

воскресенье, 13 февраля 2011 г.

Введение в Delphi XE Starter Edition

   Небольшой видеоролик, в котором Michael Rozlog рассказывает о некоторых особенностях Delphi XE Starter Edition

понедельник, 31 января 2011 г.

Delphi компонет StringGrid, событие onSelectCell

   Сегодня возник вопрос: Как узнать текущую выбранную строку в списке StringGrid. Это делается с помощью следующего кода:
StringGrid1.ARow 
   Теперь усложним задачу, у нас есть список StringGrid, в зависимости от выбранного элемента в StringGrid и соответственно значения в ячейке устанавливается соответствующий переключатель в RadioGroup. (Рис.1)
Рис.1 

 Решение: В компоненте StringGrid для события onSelectCell есть процедура обработки и установки переключателя в RadioGroup. Проблема в том что если кликать мышкой в списке StringGrid - все отлично работает и обрабатывается корректно. Если же перемещаться по списку с помощью курсора - событие onSelectCell наступает раньше, чем устанавливается значение в StringGrid1.ARow.
   Решение проблемы нашел на одном из зарубежных форумов. Для заметки привожу в своем блоге:
Устанавливаем свойство onRowSelect в false. Если вам нужно чтобы строка была выделенной - пишем на событие onDrawCell следующий код :
if gdFixed in State then Exit;
  if ARow=TStringGrid(Sender).Row then
  begin
    TStringGrid(Sender).canvas.Brush.color:=clBlue;
    TStringGrid(Sender).canvas.Font.Color:=clWhite;
    TStringGrid(Sender).canvas.TextRect(Rect,Rect.Left +2,Rect.Top+2,TStringGrid(Sender).Cells[ACol,ARow])
  end
  else
  begin
    TStringGrid(Sender).canvas.Brush.color:=TStringGrid(Sender).Color;
    TStringGrid(Sender).canvas.TextRect(Rect,Rect.Left +2,Rect.Top+2,TStringGrid(Sender).Cells[ACol,ARow])
end;
   Если нужно - можно изменить цвет отображения выделенной строки.
Теперь нам нужно дописать для компонента StringGrid на событие onSelectCell следующий код:
var
   SaveEvent:TSelectCellEvent;
begin
if ARow<>TStringGrid(Sender).Row then
begin
   SaveEvent:=TStringGrid(Sender).OnSelectCell;
   TStringGrid(Sender).OnSelectCell:=Nil;
   TStringGrid(Sender).Row:=ARow;
   CanSelect:=False;
   TStringGrid(Sender).Refresh;
   TStringGrid(Sender).OnSelectCell:=SaveEvent;
end;  

воскресенье, 30 января 2011 г.

Вирус Вконтакте Trojan-Downloader.HTML.Agent.si

   Проблема: Сегодня зашел Вконтакт и антивирус Касперского объявил мне что на сайте вирус, а именно:
http://vkontakte.ru/js/player.js?54 Opera Internet Browser Обнаружено: Trojan-Downloader.HTML.Agent.si.
Обнаружено: Trojan-Downloader.HTML.Agent.si Internet Explorer http://vkontakte.ru/js/player.js?53 
Анализируя описание - вирус скачивает всякую ерунду или другие вирусы с интернета.
Решение:
   На форумах пишут разное, от очистки кэша браузера до очистки папки Temp.
Но я скажу одно если при входе на сайт выскакивает сообщение что найден вирус - это значит что вирус на сервере, и если антивирус опознал его - значит он его блокировал. В данном случае решать трудно, поскольку антивирус начал выдавать сообщение только после обновления (ясно что добавлен какой то метод обработки вирусных скриптов или новые сигнатуры), старые версии ничего не показывали. Данное оповещение было при прослушивании музыки, с одной стороны все верно, я нажимаю кнопку чтобы прослушать музыка - песня загружается в кэш браузера, лишь только потом проигрывается в плеере. С другой стороны неясно что же они такого изменили в плеере или в обновлениях антивируса что антивирус начал распознавать код плеера как вирусный. Может все таки на сервер проник каким то боком вирус, в следствии чего мы и получили оповещение о вирусе, а может это просто ложная тревога. Так что остается только ждать, все решиться само собой, либо обновится антивирус и в обновление добавят исправления, либо обновят плеер в контакте.

вторник, 25 января 2011 г.

Delphi: Изменение цвета шрифта в StatusBar

   Сегодня возник вопрос по изменению цвета шрифта в StatusBar. Для решения данной проблемы нужно выполнить следующею последовательность действий:
  1. Переместить на форму StatusBar с закладки Win32
  2. Создать необходимое количество панелей (Кликаем правой кнопкой мыши на StatusBar-е и выбираем пункт меню Panels Editor...(Рис.1), после чего появится окно с помощью которого есть возможность управлять панелями, которые размещены на StatusBar (Рис.2)) 
Рис.1 

Рис. 2  
  1. Изменяем текст на панелях (Для этого выбираем в Panel Editor...(Рис. 2) из списка нужную панельку и изменяем свойство Text на нужный. Если нужно изменить цвет текста для панели - нужно установить свойство Style - psOwnerDraw (Рис. 3). Для примера я взял вторую панель с текстом  - "текст2") 
Рис. 3 
  1.  Переходим на StatusBar и в Object Inspector  создадим для него событие onDrawPanel.(Для создания события нужно кликнуть 2 раза напротив поля onDrawPanel)

Рис. 4
  1. Пишем код для события onDrawPanel:
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel;const Rect: TRect);
begin
  if Panel = StatusBar.Panels[1] then
  begin
    StatusBar.Canvas.Font.Color := clRed;
    StatusBar.Canvas.TextOut(Rect.Left, Rect.Top, 'тест 2')
  end
end;

Разберем код: Нумерация панелей начинается с "0", поскольку мы работаем с второй панелью - мы указываем StatusBar.Panels[1]. Если у нас нужная панель - изменяем цвет на красный (StatusBar.Canvas.Font.Color := clRed;) и выводим текст (StatusBar.Canvas.TextOut(Rect.Left, Rect.Top, 'тест 2'))
 В результате мы получим StatusBar, в котором текст написан на второй панели окрашен в красный цвет. Результат можно просмотреть на Рис.5
  Рис.5

пятница, 21 января 2011 г.

Оболочка неожиданно завершила работу, и программа "explorer.exe" была перезапущена

    На ноутбуке установлена Windows Vista с последними обновлениями. После загрузки начал постоянно перезагружаться explorer . В журнале событий была запись следующего характера:
Оболочка неожиданно завершила работу, и программа "explorer.exe" была перезапущена
- System
- Provider
[ Name] Microsoft-Windows-Winlogon
[ Guid] {DBE9B383-7CF3-4331-91CC-A3CB16A3B538}
[ EventSourceName] Winlogon
- EventID 1002
[ Qualifiers] 16384
Version 0
Level 4
Task 0
Opcode 0
Keywords 0x80000000000000
- TimeCreated
[ SystemTime] 2010-12-18T08:51:05.000Z
EventRecordID 137080
Correlation
- Execution
[ ProcessID] 0
[ ThreadID] 0
Channel Application
Computer Nout
Security
- EventData
explorer.exe

   Немного поискав на форумах решение данной проблемы, решения как такового небыло, был стандартный набор решений типа: проверка на вирусы, откат системы..... Некоторые писали что у них такое случалось при установке новых драйверов на видеокарту (NVIDIA), если это так и вы устанавливали новые драйвера - нужно удалить (переименовать) файл с именем что то типа nvidea.cpl (имя может быть немного другое) который находится в [Диск:]\Windows\System32 
   Так и сделал. На некоторое время проблема ушла, но через неделю снова тоже самое. Начал экспериментировать выяснилось то что при разворачивании любого окна на весь экран explorer перестает перезагружаться. Решил что что то с темами рабочего стола (Windows Aero). Так и есть после того как зашел в "Свойства системы - Дополнительно - Параметры (Быстродействие) - Визуальные эффекты" выбрал пункт обеспечить наилучшее быстродействие (Рис.1 - снимок с Windows XP но практически суть та же) и нажал "Применить". После того как значения вступили в силу я снова выбрал эффекты которые мне надо и нажал кнопку "Применить". Проблема исчезает на недели две.
Рис. 1 

Application Error:Exception EZSQLException in module xxxxx.exe at 000D785E. SQL Error: Can't connect to MySQL server on 'localhost' (10061).

   Сегодня возникла проблема на другом компьютере (не на том что я разрабатывал программу). При запуске программы она должна считать настройки с файла, и осуществить подключение к базе данных (БД). Использую (Delphi7+ZEOS компоненты+MySQL). Все тривиально просто, но есть одно НО. При запуске на другом компьютере возникает следующая ошибка приложения: Исключение неизвестное программное исключение (0x0eedfade) в приложении по адресу 0x7c812aeb. (Рис.1)
Рис.1. 
   При нажатии "Отмена" - запускается отладчик, при нажатии "ОК" - появляется более конкретная ошибка (Application Error): Exception EZSQLException in module xxxxx.exe at 000D785E. SQL Error: Can't connect to MySQL server on 'localhost' (10061). (Рис.2.)
Рис. 2.
  РЕШЕНИЕ: Все дело в том что при тестировании программы я задал настройки для подключения к БД (для компонента ZConnection) и забыл их убрать. Ясно что у меня все работало, потому что подключалось к БД, которая стояла у меня на машине, а вот при запуске на других компьютерах появлялась ошибка когда программа делала попытку подключиться к несуществующему серверу и соответственно БД.