ITDim
    Все будет итышно, когда вы с нами :)

Delphi импорт из xls в таблицу БД



unit _t_mn_unt_;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls, ExtCtrls, comobj;

type
  TForm1 = class(TForm)
    _con_: TADOConnection;
    _clt_: TADODataSet;
    _buy_: TADODataSet;
    _ds_clt_: TDataSource;
    _ds_buy_: TDataSource;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    _opg_: TOpenDialog;
    Panel1: TPanel;
    Button1: TButton;
    _start_: TEdit;
    Label1: TLabel;
    _wrk_: TADOQuery;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


const
  xlCellTypeLastCell = $0000000B;
  appname = 'Read excel file';
  appbase = '_db_.mdb';
  Provider   = 'Provider=Microsoft.Jet.OLEDB.4.0;';
  PersistSI  = 'Persist Security Info=False';

type TClientRow = record
  _fio, _address, _birthplace : string;
  _birthdate : TDateTime;
end;

type TBuyRow = record
  _cl_id : integer;
  _product : string;
  _buydate : TDateTime;
end;

var
  Form1: TForm1;
  XLApp, Sheet, Range: OLEVariant;
  _tmp : TClientRow;
  _buy : TBuyRow;

implementation

{$R *.dfm}

function _get_sql(_type : integer) : string;
begin
  case _type of
// При работа с ADO у меня выдавало ошибку синтаксиса, пришлось 
// fio,address,birthdate,birthplace переделать в `fio`,`address`,`birthdate`,`birthplace` 
    0: Result :=  'INSERT INTO client(fio,address,birthdate,birthplace) VALUES' +
                  '(:fio,:address,:birthdate,:birthplace)';
    1: Result :=  'INSERT INTO buys(id_cl,predmet,buydate) VALUES' +
                  '(:id_cl,:predmet,:buydate)';
  end;
end;

function _ins_client_data( _val_ : TClientRow) : integer;
begin
  with _val_, Form1._wrk_ do
  begin
    SQL.Text := _get_sql(0);
    Parameters.ParamByName('fio').Value := _fio;
    Parameters.ParamByName('address').Value := _address;
    Parameters.ParamByName('birthdate').Value := _birthdate;
    Parameters.ParamByName('birthplace').Value := _birthplace;
    ExecSQL;
    SQL.Text := 'SELECT MAX(ID) AS MID FROM client';
    Open;
    Result := FieldByName('MID').AsInteger;
    Close;
  end;
end;

procedure _refresh_ds(_ds : TDataSet);
begin
  _ds.Close;
  _ds.Open;
end;

procedure _ins_buy_data(_val_ : TBuyRow);
begin
  with _val_, Form1._wrk_ do
  begin
    SQL.Text := _get_sql(1);
    Parameters.ParamByName('id_cl').Value := _cl_id;
    Parameters.ParamByName('predmet').Value := _product;
    Parameters.ParamByName('buydate').Value := _buydate;
    ExecSQL;
  end;
end;

function _get_value(x, y : integer) : string;
begin
  Result := VarToStr(XLApp.Cells.Item[x,y].Value);
end;

procedure _read_file(filename : string; start : integer);
var i, j, _cl : integer;
begin
  try
    XLApp := CreateOleObject('Excel.Application');
    XLApp.Visible := False;
    XLApp.Workbooks.Open(filename);
    Sheet := XLApp.Workbooks[ExtractFileName(filename)].WorkSheets[1];
    Range := Sheet.UsedRange;
    for i := start to Range.Rows.Count do
    begin
      try _tmp._birthdate :=  StrToDate(_get_value(i, 3)) except end;
      _tmp._fio := _get_value(i, 1);
      _tmp._address := _get_value(i, 2);
      _tmp._birthplace := _get_value(i, 4);
      _cl := _ins_client_data(_tmp);
      j := 5;
      while j < Range.Columns.Count do
      begin
        _buy._cl_id := _cl;
        _buy._product := _get_value(i, j);
        try _buy._buydate :=  StrToDate(_get_value(i, j + 1)) except end;
        _ins_buy_data(_buy);
        j := j + 2;
      end;
    end;
  finally
    if not VarIsEmpty(XLApp) then
    begin
      XLApp.Quit;
      XLAPP := Unassigned;
      Sheet := Unassigned;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  _opg_.Execute();
  _read_file(_opg_.FileName, StrToInt(_start_.Text));
  _refresh_ds(_clt_);
  _refresh_ds(_buy_);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := appname;
  _con_.Connected := false;
  _con_.ConnectionString := Provider + 'Data Source=' + appbase + ';' + PersistSI;
  _con_.Connected := true;
  _clt_.Open;
  _buy_.Open;
end;

end.

P.S. Содрано, но проверенно работает + переделать под свои нужды не сложно, что я и сделал

Языковые раскладки в Delphi:

Языковые раскладки в Delphi:
 ('00000419', 0); //RU
('00000409', 0); //Lat
('00000422', 0); //Ukr

D-link DSR-1000 fail






Решил я как-то купить это чудо, не люблю d-link, но в тот момент ничего 2 wan найти не удалось. Убитых 6 часов на настройку ничего не дали, в режиме 2 ванов работать никак не хотел, я конечно же перепрошился на последнюю версию, о чем в дальнейшем пожалел, с последней прошивки стандартным методом (через веб интерфейс) перепрошится на любую другую уже никак.

Самое интересное, что шестую прошивку должны были вообще снять, так как она в целом вообще неудачная (это я вычитал тогда еще на их форуме), там работает от силы 10%. Но настраивал я его месяца 3 назад, и  вот решил проверить вышла ли 7 версия, и вы не поверите, ее там еще нету и 6 не снята. Вот так думаю полежит еще пол годика маршрутизатор D-Link DSR-1000в шкафу и мб прийдет его время, а может еще до распродают их, потом снимут с производства и закроют проект)…

 


Преобразование даты в mysql

SELECT DATE_FORMAT("2011-11-08",'%d.%m.%Y');

Принтер в терминальном режиме

На компьютере, работающем под управлением любой версии Windows за исключением Windows Server 2003, при подключении к другому компьютеру под управлением Windows с помощью средства «Удаленное подключение к рабочему столу» или клиента служб терминалов версии 4.0 или 5.0 не выполняется перенаправление локальных принтеров. В результате при подключении к удаленному рабочему столу или во время сеанса служб терминалов не удается использовать локальные принтеры.
Например, если к порту DOT4 компьютера под управлением Windows XP подключено многофункциональное печатающее устройство, то при удаленном подключении к рабочему столу компьютеров под управлением Windows 2000 или Windows Server 2003 перенаправление данного устройства выполняться не будет. Данная проблема возникает, если имя порта принтера не начинается с символов COM, LPT или USB. По умолчанию перенаправление подобных портов выполняется только в Windows Server 2003. По умолчанию перенаправление многофункциональных печатающих устройств, подключенных к локальному компьютеру, выполняется только в Windows Server 2003, поскольку эти устройства используют порты DOT4.

Решение 1
Установить на сервер и на клиента одинаковые версии драйверов принтера.

Решение 2
Обновить на рабочей станции терминального клиента, с терминального сервера из папки C:\WINDOWS\system32\clients\tsclient

Решение 3
Если клиентский компьютер работает под управлением операционной системы, отличающейся от Windows Server 2003, то для устранения данной проблемы надо добавить в раздел реестра
HKEY_CURRENT_USER - Software - Microsoft - Terminal Server Client - Default - AddIns - RDPDR
параметр FilterQueueType типа DWORD и присвойте ему значение FFFFFFFF. Этот параметр предписывает операционной системе выполнять перенаправление для всех портов (включая порты DOT4).

Для добавления указанного параметра выполните следующие действия, а затем закройте редактор реестра. 
1. В меню Пуск выберите пункт Выполнить, введите команду regedit и нажмите кнопку ОК. 
2. Найдите и выделите следующий раздел реестра:
HKEY_CURRENT_USER - Software - Microsoft - Terminal Server Client - Default - AddIns - RDPDR 
3. В меню Правка последовательно выберите команды Создать и Параметр DWORD. 
4. Введите имя FilterQueueType и нажмите клавишу ВВОД. 
5. В меню Правка выберите команду Изменить. 
6. Введите значение FFFFFFFF и нажмите кнопку ОК. 
В результате будет разрешено выполнять перенаправление для всех портов.

"Такое поведение является особенностью данного продукта." говорит www.microsoft.com

Смена кодировки всех таблиц в бд (запрос)


Вот столкнулся с проблемой, манипуляций одной из программ с базой. Во время обновления программа начала выдавать ошибки вставки в базу данных, что не может привести в соотвествие таблицы с разными кодировками в едином запросе.

Ну решение очевидно, надо просто изменить у всех таблиц кодировку сравнения.
Но таблиц больше 100 из тисячи нужно было изменить, и вручную такое делать как-то не солидно, да и пипец как долго :).
Вощем нашел быстрый способ: взять имена всех таблиц из базы данных и составить sql запросы на изменение кодировки.
Затем скопировать их и выполнить как обычные запросы. Довольно неплохое решение.

Ограничение :) - Только mysql версии больше 5 поддерживает следующий запрос.

SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') as sqlcode
FROM `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` = 'db_name'
ORDER BY 1

db_name замените на имя своей базы данных (схемы), а utf8 на нужную вам кодировку.

Установка настройка Postfix

Postfix
Postfix обладает всей мощью Sendmail, будучи полностью с ним совместимым, но при этом он гораздо проще в конфигурации. Кроме того, это мой любимый MTA, так что я не мог обойтись без описания его настройки. Итак (все действия производятся от имени root),

# apt-get install postfix

Скопируем главный настроечный файл postfix в нужное место (почему-то в Kubuntu он не устанавливается по-умолчанию)

# cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf

В конец этого файла добавим несколько строк, чтобы настроить доставку почты через gmail.

relayhost = smtp.gmail.com:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/gmail_passwd
smtp_sasl_security_options = noanonymous

Теперь создадим указанный нами файл авторизации

# touch /etc/postfix/gmail_passwd

и добавим в него наши логин и пароль на gmail (my.name заменяем на логин, а password - на пароль).

smtp.gmail.com:587 my.name@gmail.com:password

Преобразуем этот файл в нужный формат (BDB) и для пущей безопасности защитим его от доступа простых смертных.

# postmap /etc/postfix/gmail_passwd
# chown root:postfix /etc/postfix/gmail_passwd*
# chmod 0640 /etc/postfix/gmail_passwd*

Перезапускаем Postfix для применения изменений.

# /etc/init.d/postfix restart

взято с: http://debback.blogspot.com/2008/04/mta-mutt-smtp.html

Шумоизоляция сервера

Torrent забивает весь шлюз

Ноутбук работает через wifi и когда хочу скачать что-либо по торренту, в интернете полазить невозможно, даже если скорость загрузки 50кб.
Сделал следующее:

отключил UPnP status, и теперь работу торрента вообще не ощущаю, качаю фильмы и параллельно работаю)

CHECK_NRPE: Error - Could not complete SSL handshake.

В моем случае решение было простым, на клиенте в конфиге nrpe строку
allowed_hosts=127.0.0.1, 192.168.х.х 
второй айпи должен быть после запятой без пробела

Вывод Времени ядра в Диспетчере задач


При входе на сервер я всегда использую Диспетчер задач (Task Manager) для просмотра текущей активности. Я проверяю сетевую активность, процент потребленного времени ЦП и оперативной памяти, а также запущенные процессы.


Кроме того, я обязательно включаю в Диспетчере задач отображение времени ядра. Для этого нужно открыть вкладку «Быстродействие» (Performance) и выбрать опцию «Вывод времени ядра» (Show kernel times) в меню «Вид» (View). После этого на графике появляется красная кривая, которая отображает активность приложений, работающих в режиме ядра.

Преобразование даты в mysql


SELECT DATE_FORMAT("2011-11-08",'%d.%m.%Y');

Коды активации Windows XP:


Иногда нужны, но бывает сложно найти:

82VJ3-PB4JR-QPDXV-77VRC-8WRFX
DCJM2-4FJQ8-FH46R-WMPDF-4MJ64
YXPGY-FQHT2-7MHPD-FJ3R3-8PPKB
GXYXB-M46X6-BCVJ3-3RR7K-F6TTM
M8W23-CM7TD-DJWV4-KTTB2-99B7K
8GKGV-B6FKM-2JVM3-KJ842-TP7QY
DPQFT-GYD77-X72G7-KFCP6-K9P4T
HY2DM-YFFDH-M7P8R-XGG4J-63W3Y
WHBV2-GQC8P-3CC4G-GYWPK-G7PRT
G6QBR-P3DDJ-7MDJ7-7X8FT-F2CH6
MWB32-G7RB6-4QWH3-GP2V2-BJB83
VJKTC-33Q7W-VMXPR-2JDTK-867CQ

tcpdump linux

1. Ловим весь входящий трафик из локальной сети на сервер. Здесь все просто.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt dst host 192.168.2.254
Если вы запускаете его в SSH сессии, то подготовьтесь - польется очень много и очень быстро...
2. Ловим весь входящий трафик, исключая трафик генерируемый нашей SSH-сессией.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'dst host 192.168.2.254 and not ( src host 192.168.2.100 and dst port 22 )'
Вот теперь в потоке пакетов можно разобраться.
3. Нужна информация об DNS-общении между сервером и каким-нибудь узлом сети.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'host 192.168.2.13 and ip proto \udp'
Здесь, кстати будет бегать не только DNS-трафик. А вообще весь, который идет по UDP. Исправить это можно следующим:
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'host 192.168.2.13 and port 53'
4. Отлавливаем исключительно icmp пакеты.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'ip proto \icmp'

VPN pptp linux проблема одновременных подключений

Проблема подключений к серверу через VPN pptp больше одного решается добавлением следущих модулей в ядро:

modprobe ip_gre
modprobe ip_nat_pptp
modprobe ip_conntrack_pptp



Немного о модулях ядра linux:


Загрузить модуль:

modprobe <название модуля>

Выгрузить модуль:
modprobe -r <название модуля>

Список всех модулей:
modprobe -l

Список загруженных модулей:
lsmod

Получить краткую информацию о конкретном модуле:
modinfo <название модуля>


Также список модулей можно получить командой find, если в критериях задать поиск в /lib/modules/версия ядра/ файлов с шаблоном *.ko

Как очистить кэш squid

смотрим в squid.conf находим строчку cache_dir переходим на нужный каталог и удаляем его, перед этим останавливаем сервер squid /etc/init.d/squid stop
создаем заново кэш

squid -z

стартуем сквид

CHECK_NRPE: Error - Could not complete SSL handshake.

в моем случае решение было простым, на клиенте в конфиге nrpe строку
allowed_hosts=127.0.0.1, 192.168.х.х 
второй айпи должен быть после запятой без пробела

DIR-615 настройка VPN

Кто-то спрашивал и мало ли, вдруг кому-то понадобится.

1. Качаем последнюю прошивку: ftp://ftp.dlink.ru/pub/Router/DIR/615
2. Подключаем выход WAN к вашей сети, а компьютер - к одному из входов.
3. На компьютере ставим настройки сетевого соединения в автоопределение (в Ubuntu - режим роуминга, в Windows надо просто отметить опции автоматического назначения IP и DNS).
4. Включаем устройство.
5. С компьютера заходим через браузер на http://192.168.0.1 .
6. Логинимся (пустой пароль).
7. Загружаем новую прошивку (файл bin) через Tools -> Firmware -> Choose File, затем Upload.
8. Первый же шаг: нужно изменить IP-адрес устройства. Для этого заходим в Setup -> Network Settings и ставим Router IP Address в другое значение - я поставил 172.19.0.1, чтобы не конфликтовало с сетью (192.168.*.*), ни с VPN (172.16.*.*). Соответственно исправляем и DHCP IP Address Range: я поставил 172.19.0.100 - 172.19.0.199.
8. Перезагружаем устройство и заходим на него по новому адресу.
9. Выбираем Setup -> Internet -> Manual Internet Connection Setup. В списке My Internet Connection is: выбираем Russia PPTP (Dual Access).

Дальше вводим параметры:
PPTP IP Address: ваш IP (127.16.0.1)
PPTP Subnet Mask: 255.255.255.0
PPTP Gateway IP Address: 127.16.0.1 (ваш шлюз)
PPTP Server IP or Name: %nameserver% [пример vpn.server.org]
Username : логин VPN
Password : пароль VPN
Verify Password : то же
Primary DNS Server: 192.168.254.251 [Указать свой!]

Затем нажимаем кнопку Clone Your PC's Mac Address, затем вверху Save Settings.
10. Перезагружаемся. Интернет должен работать.

если мы хотим ходить в локальную сеть через VPN. Нужно сделать аналог route add.
11. В Advanced -> Routing прописываем следующее:

Name: любое
Destination IP: 172.16.0.1
Netmask: 255.255.0.0
Gateway: 172.16.0.1 (ваш шлюз)
Interface: WAN(Physical port)

Отмечаем галочку слева и нажимаем Save Settings.
12. Перезагружаемся.

Всё. Добавлю ещё, что теперь не надо будет запускать VPN с компьютера, поскольку это будет делать устройство.

Взято с: http://www.cinemaxx.biz/archive/index.php/t-799.html

Нахождение черных дыр DeadGWDetectDefault


Нахождение черных дыр DeadGWDetectDefault

Если этот параметр поставить в (1), то перед началом соединения будет происходить проверка на мертвые маршрутизаторы по пути до сервера. Этот параметр сильно тормозит протокол за счет лишних затрат на поиск.

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

DeadGWDetectDefault = dword:0

Не требовать ввод имени и пароля при заходе в Windows

Пуск - Выполнить
control userpasswords2
Ок

И снимаем галочку



Невидимый пользователь при заходе в Windows

Заходим в реестр HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Windows NT\CurrentVersion\
Winlogon\SpecialAccounts\UserList\ надо создать DWORD ключ с именем,
совпадающим с именем пользователя, и значением 0


Инвентаризация

Бесплатная программа инвентаризации:
http://exe.ho.ua/index.php/2011-09-21-09-29-58

Список вредоносных сайтов для squid

На 30.08.2012 список заблокированных сайтов в squid:

http://exe.ho.ua/index.php/2011-09-21-09-19-16/squid

Skype жрет трафик

Как известно, Skype использует p2p сеть для обмена данными. Если у Вас достаточно мощный компьютер, то Skype может решить сделать Вас Супернодом и, как следствие, скайп-трафик других участников сети будет идти через Вас.
Начиная с версии 3.0 программы, появилась возможность отключить такую «фичу», что бы чужой трафик скайпа не шёл через Вас.
Для этого необходимо залезть в реестр и создать там ветку:

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Skype]
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Skype\Phone]
"DisableSupernode"=dword:00000001
взято с http://habrahabr.ru/blogs/skype/72361/

zip, ftp через .bat файл

@Echo
D:
cd D:\MS SQL 2005\MSSQL.1\MSSQL\Backup
rar.exe a -o+ -r D:\имяфайла%DATE:~0,2%%DATE:~3,2%%DATE:~-2%.rar *.*
ftp -s:D:\ftp.txt
del D:\имяфайла%DATE:~0,2%%DATE:~3,2%%DATE:~-2%.rar
CD D:\MS SQL 2005\MSSQL.1\MSSQL\Backup\
del *.bak
exit

файл фтп:
open ip
логин
пароль
cd /Admin/backupBD/
send D:\имяфайла*.rar 
bye

чтобы работал rar - параметры среды-переменная path добавить местоположение winrar

Если отсутсвует звук на передней панели

возможно проблема в настройках, чтобы это проверить нужно зайти в диспетчер Realtek HD, найти там звуковые выходи и входы и в настройка "аналоговый" поставить галочку на "отключить определение гнезд передней панели". после этого звук должен появится