Давненько я не писал ничего в блоге, все дела , дела.
Вот решил накатать коротенькую статью по работе с субд Oracle. В некоторых отраслях тока его и используют, поэтому приходится не отставать от жизни.
Куда же без картинки.
В общем нам понадобится.
Lazarus - качать тут
Zeos - качать тут
Oracle Express Edition 11g - качать тут
Oracle Client - качать тут (да . там на сайте зарегистрироваться надо что бы скачать)
Скажу сразу клиент ставить надо не весь, там можно выбрать установку только клиентской части. 300 мегабайт примерно. Не пробовал с минимальной версией работать. Как попробую , дополню статью.
Oracle Express Edition я ставил под виртуальную машиной , поскольку захламлять основную систему не комильфо, там и так есть кому ресурсы занимать. Поскольку эта версия Express то там по умолчанию 1 база данных, XE, это нам пригодится.
Теперь про Oracle Client, его надо ставить под версию разрядности вашей программы, если у вас программа 32 бита ,то и клиент надо ставить тоже 32 бита. Иначе не будет подключения. У меня Lazarus стоит версии 32 бита, поэтому я не буду заморачиваться с настройкой под 64 бита.
Ну уж как Lazarus ставить и Zeos я писать не буду, уже писал тут и тут.
В общем все я поставил , создал через DBforge for Oracle, таблицу для экспериментов, в общем там уже есть тестовые таблицы,но они заполнены на английском, а мне нужна была кириллица.
Поэтому я создал такую таблицу.
CREATE TABLE LAZARUS.RUS_USERS ( ID NUMBER(10, 0), FIRST_NAME VARCHAR2(50 CHAR), SECOND_NAME VARCHAR2(50 CHAR), BIRTHDAY TIMESTAMP(6), CONSTRAINT PK_RUS_USERS_ID PRIMARY KEY (ID) USING INDEX TABLESPACE USERS STORAGE (INITIAL 64 K MAXEXTENTS UNLIMITED)
И вбил в нее несколько русских имен.
Я пробовал подключится и получить данные через компоненты с вкладки SQLdb, но там вышла заморочка с кодировками, решать которую у меня времени не было. Поэтому только Zeos, только хардкор.
Теперь собственно к программе.
На форму я добавил
DataSource2: TDataSource;
DBGrid2: TDBGrid;
ZConnection1: TZConnection;
ZQuery1: TZQuery;
а так же две кнопки и dbgrid.
В коде обработки событий написал.
procedure TForm1.Button3Click(Sender: TObject); begin ZConnection1.User := 'Lazarus'; ZConnection1.Database := '192.168.0.104:1521/XE'; // именно этот метод сработал, когда указывал все по отдельности не работало ZConnection1.Password := 'test'; ZConnection1.Protocol := 'oracle-9i'; ZConnection1.ClientCodepage := 'AL32UTF8'; // ZConnection1.Connect; if ZConnection1.Connected then form1.Caption := 'Подключение установлено' else form1.Caption := 'Подключение не установлено'; end;
procedure TForm1.Button4Click(Sender: TObject); begin ZQuery1.SQL.Text := 'SELECT * FROM RUS_USERS'; ZQuery1.Open; end;
Кодировку необходимо выставлять такую же как на сервере, на сервере её можно узнать запросом.
select * from nls_database_parameters where parameter like '%CHARACTERSET'
При нажатие все отобразилось как надо. Вот собственно и все на этом.
Если найду время напишу про работу с Oracle из Lazarus.
Дополнение. В общем нет необходимости тягать с сервера весь клиент целиком, можно скачать Client Light, и засунуть все библиотеки в папку с программой либо в System32.