понеділок, 10 липня 2017 р.

Список COM-портов в Delphi

Появилась задачка определять к какому COM-порту подключен кассовый аппарат. Стал искать как получить список доступных портов в системе. В итоге нагуглил вот такой способ через реестр:
uses Registry;
procedure getCOM_ports();
var
reg: TRegistry;
st: Tstrings;
begin
reg := TRegistry.Create(KEY_READ);
try
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('hardware\devicemap\serialcomm', False);
st := TstringList.Create;
try
reg.GetValueNames(st);
for i := 0 to st.Count - 1 do
begin
ShowMessage(reg.Readstring(st.strings[i]));
end;
finally
st.Free;
end;
reg.CloseKey;
finally
reg.Free;
end;
end;
view raw COM-ports hosted with ❤ by GitHub

середа, 5 липня 2017 р.

Code Assistant в PL/SQL Developer не работает

Восстановившись после petya.a я столкнулся с некоторыми проблемами, одной из которых была неработоспособность функции подсказки названия объектов БД в PL/SQL Developer. Функционал этот называется Code Assistant и включается в настройках:
Но что бы я ни делал, при вводе 3 первых символов названия таблицы/процедуры/пакета/т.д. подсказка не выдавалась. Также ничего не происходило  и при нажатии на F6 (клавиша по-умолчанию для вызова Code Assistant). Точнее какие-то подсказки выдавались, например, если написать SEL, то появится подсказка SELECT и т.д., но объекты моей схемы я не видел.
Поиски по интернету привели меня к тому, что Code Assistant берет данные с запроса, который находится в файле CANames.sql в папке PLSQL Developer. Открыв файл я увидел иероглифы и все сразу стало на свои места: вирус petya.a шифрует файлы *.sql. В итоге, я взял файл с компьютера, где все работало , перезапустил PL/SQL Developer и Code Assistant заработал.

Вот что должно находится в файле:
/*
The name + type results of these queries will be used by the Code Assistant
if the "Describe Context" option is enabled. After typing 3 or more characters
the Code Assistant will show a list of matching names.
Separate multiple queries with semi-colons and use the :schema bind variable
to restrict names to the currently connected user.
In case of an error the query results will be omitted. No error message will
be displayed.
Place this file in the PL/SQL Developer installation directory for all users,
or in the "%APPDATA%\PLSQL Developer" directory for a specific user.
*/
select object_name, object_type
from sys.all_objects o
where o.owner = :schema
and o.object_type in ('TABLE', 'VIEW', 'PACKAGE','TYPE', 'PROCEDURE', 'FUNCTION', 'SEQUENCE')
;
select s.synonym_name as object_name, o.object_type
from all_synonyms s, sys.all_objects o
where s.owner in ('PUBLIC', :schema)
and o.owner = s.table_owner
and o.object_name = s.table_name
and o.object_type in ('TABLE', 'VIEW', 'PACKAGE','TYPE', 'PROCEDURE', 'FUNCTION', 'SEQUENCE')
;
select db_link as object_name, 'DATABASE LINK' as object_type
from sys.all_db_links o
where o.owner = :schema
or o.owner = 'PUBLIC'
;
view raw CANames hosted with ❤ by GitHub