500+ FAQ по Delphi

Перейти на: Главную | Индексную | Предыдущую | Следующую страницу
Рассматриваемого в историческом аспекте на примере переводов с нидерландского языка на русский.

Возникла необходимость в обработке исключительных ситуаций в PL/SQL процедуре (Oracle7 WG Server Release 7.3.2.2.0). Почему у меня не получается?

SB> Пишу следующий блок:
BEGIN
INSERT INTO CUSTOM.CAMAIN20
SELECT * FROM CUSTOM.CAMAIN20TEMP
WHERE CC_07_01=curCC_07_01 AND CC_07_02=curCC_07_02 AND CC_07_03=curCC_07_03;
EXCEPTION
WHEN others THEN
BEGIN
DBMS_OUTPUT.PUT_LINE('ВВОД ДУБЛЯ В CUSTOM.CAMAIN20');
NULL;
END;
END;
SB> Думал, что при нарушении первичного ключа в таблице CUSTOM.CAMAIN20
SB> обработчик EXCEPTION WHEN others THEN ... ; пропустит строку и программа
SB> пойдет выполняться дальше.Программа же вылетает с сообщением :
Так - это сделать не получится. Hо можно сделать по другому.

Объявить выборку SELECT * FROM CUSTOM.CAMAIN20TEMP WHERE CC_07_01=curCC_07_01 AND CC_07_02=curCC_07_02 AND CC_07_03=curCC_07_03 курсором, а потом примерно так:

loop
fetch_cursor;
выход когда фетчить больше нечего;
begin
INSERT INTO CUSTOM.CAMAIN20 чего нафетчили;
EXCEPTION
WHEN others THEN
BEGIN
DBMS_OUTPUT.PUT_LINE('ВВОД ДУБЛЯ В CUSTOM.CAMAIN20');
END
end
end loop;

Dmitry Voronenkov
2:5005/56

Я так и не смог заставить выводить текст с помощью DBMS_OUTPUT.PUT_LINE в режиме отладки. Что не так?

Эта функция используется действительно только для отладки.Для того, чтобы результаты ее работы были видны из SQL Plus, необходимо в нем выдать команду:

set serveroutput on size 10000;

Почему не всегда верно обновляются IndexDefs по Update?

Ошибка в VCL.

А помогает добавление fUpdated:=false; в теле процедуры TIndexDefs.Update.

Или убиением владельца через Free, и пересозданием.

Edward Shigapov
2:5051/22.8

Как заставить работать BDE с русским текстом в кодировке ISO 8859-5?

Здесь будет описана методика превращения набора символов BDE 5.01, скажем, dBase 868, в набор символов ISO 8859-5.

Методика такая:

Открываем charset.cvb любым hex editor-ом;
Ищем строку "868";
Находится строка "BTCVD4868" - именно то, что надо;
Прокручиваемся вниз. Сначала будет много $FF, потом пойдет весь набор символов разделенный нолями: 00 00 01 00 02 00 03 00 и т. д.;
Это таблица перекодировки ANSI -> OEM для 868 кодовой страницы;
После 7E 00 7F 00 пропускаем 96 байт (2 байта на символ, буквы в ISO начинаются с $B0, $B0 - $80 = $30, $30 * 2 = $60, $60 = 96);
Запоминаем это смещение (у меня оно $ED72h);
Ищем строку "866". Находим "BTCVD2866";
Прокручиваемся вниз, пропускаем $FF, находим набор символов, как в п.4;
Находим последовательность 7E 00 7F 00;
Отмечаем дальнейшую последовательность от 10 04 11 04 12 04 до 3D 04 3E 04 3F 04;
Копируем ее на смещение из п.7;
Повторяем п.4;
Прокручиваемся дальше, за таблицу ANSI -> OEM, там опять будет много $FF, после них будет обратная таблица перекодировки OEM -> ANSI, такая же, как и в п.4;
Ищем последовательность 7E 00 7F 00, пропускаем после нее $150 байт (установлено методом научного тыка), начиная с этого смещения (у меня $F486) заносим байты B0 00 B1 00 B2 00 .... ED 00 EE 00 EF 00;
Все. Далее указываем dBase BUL 868 для langdriver-а BDE-шного алиаса.
При открытии таблицы с этого алиаса она будет перекодироваться OEM (то есть ISO) <-> ANSI.

Konstantin Popenko
2:5040/31.13

Hи у кого не завалялось функции на pl/sql, возвращающей представление числа прописью?

PRAGMA RESTRICT_REFERENCES (number2word,WNDS, WNPS, RNDS, RNPS);

/**********************************************/
/* функция сумма прописью в рублях и копейках */
/**********************************************/
FUNCTION number2word (source IN NUMBER) RETURN varchar2 is
result VARCHAR2(300);
BEGIN
-- k - копейки
result := ltrim(to_char( source,
'9,9,,9,,,,,,9,9,,9,,,,,9,9,,9,,,,9,9,,9,,,.99')) || 'k';
-- t - тысячи; m - милионы; M - миллиарды;
result := replace( result, ',,,,,,', 'eM');
result := replace( result, ',,,,,', 'em');
result := replace( result, ',,,,', 'et');
-- e - единицы; d - десятки; c - сотни;
result := replace( result, ',,,', 'e');
result := replace( result, ',,', 'd');
result := replace( result, ',', 'c');
--
result := replace( result, '0c0d0et', '');
result := replace( result, '0c0d0em', '');
result := replace( result, '0c0d0eM', '');
--
result := replace( result, '0c', '');
result := replace( result, '1c', 'сто ');
result := replace( result, '2c', 'двести ');
result := replace( result, '3c', 'триста ');
result := replace( result, '4c', 'четыреста ');
result := replace( result, '5c', 'пятьсот ');
result := replace( result, '6c', 'шестьсот ');
result := replace( result, '7c', 'семьсот ');
result := replace( result, '8c', 'восемьсот ');
result := replace( result, '9c', 'девятьсот ');
--
result := replace( result, '1d0e', 'десять ');
result := replace( result, '1d1e', 'одиннадцать ');
result := replace( result, '1d2e', 'двенадцать ');
result := replace( result, '1d3e', 'тринадцать ');
result := replace( result, '1d4e', 'четырнадцать ');
result := replace( result, '1d5e', 'пятнадцать ');
result := replace( result, '1d6e', 'шестнадцать ');
result := replace( result, '1d7e', 'семьнадцать ');
result := replace( result, '1d8e', 'восемнадцать ');
result := replace( result, '1d9e', 'девятнадцать ');
--
result := replace( result, '0d', '');
result := replace( result, '2d', 'двадцать ');
result := replace( result, '3d', 'тридцать ');
result := replace( result, '4d', 'сорок ');
result := replace( result, '5d', 'пятьдесят ');
result := replace( result, '6d', 'шестьдесят ');
result := replace( result, '7d', 'семьдесят ');
result := replace( result, '8d', 'восемьдесят ');
result := replace( result, '9d', 'девяносто ');
--
result := replace( result, '0e', '');
result := replace( result, '5e', 'пять ');
result := replace( result, '6e', 'шесть ');
result := replace( result, '7e', 'семь ');
result := replace( result, '8e', 'восемь ');
result := replace( result, '9e', 'девять ');
--
result := replace( result, '1e.', 'один рубль ');
result := replace( result, '2e.', 'два рубля ');
result := replace( result, '3e.', 'три рубля ');
result := replace( result, '4e.', 'четыре рубля ');
result := replace( result, '1et', 'одна тысяча ');
result := replace( result, '2et', 'две тысячи ');
result := replace( result, '3et', 'три тысячи ');
result := replace( result, '4et', 'четыре тысячи ');
result := replace( result, '1em', 'один миллион ');
result := replace( result, '2em', 'два миллиона ');
result := replace( result, '3em', 'три миллиона ');
result := replace( result, '4em', 'четыре миллиона ');
result := replace( result, '1eM', 'один милиард ');
result := replace( result, '2eM', 'два милиарда ');
result := replace( result, '3eM', 'три милиарда ');
result := replace( result, '4eM', 'четыре милиарда ');
--
result := replace( result, '11k', '11 копеек');
result := replace( result, '12k', '12 копеек');
result := replace( result, '13k', '13 копеек');
result := replace( result, '14k', '14 копеек');
result := replace( result, '1k', '1 копейка');
result := replace( result, '2k', '2 копейки');
result := replace( result, '3k', '3 копейки');
result := replace( result, '4k', '4 копейки');
--

if not (substr(result,1,1)='.') then
result := replace( result, '.', ' рублeй ');
else
result := replace( result, '.', 'ноль рублeй ');
end if;
result := replace( result, 't', 'тысяч ');
result := replace( result, 'm', 'миллионов ');
result := replace( result, 'M', 'милиардов ');
result := replace( result, 'k', ' копeeк');
--
RETURN(result);
END number2word;

Как грузить DBF-файлы с помощью SQL*Loader?

Можно использовать ctl-файл такого вида:

LOAD DATA
infile "COUNT_VD.DBF" " DB3 16 "
append
into table AIS_AUDIT.T21AU_GAL
TRAILING NULLCOLS
(
M_REG "19",
REGION POSITION(2:6) INTEGER EXTERNAL,
ENT_TYPE POSITION(7:7) INTEGER EXTERNAL,
KD POSITION(8:12) CHAR,
N_PLAT POSITION(13:16) INTEGER EXTERNAL
)
При загрузке файлов с кодировкой DOS(866) LOAD DATA лучше заменить на LOAD DATA characterset ru8pc866.

Размерности полей соответствуют размерностям в .DBF-файле.

Hо ctl-файл такого вида понимают только loader'ы под виндами. Если попробуешь использовать этот ctl-файл для Unix (проверено для Dynix), получишь на выходе ругань.

В Oracle 8.0.5 и более поздних редакциях такая конструкция больше не работает.

Решение для Oracle 8.0.5: ставить клиента от Oracle 7.3.4, ставить оракловские утилиты от Oracle 7.3.4. Клиент Oracle 7.3.4 с сервером Oracle 8.0.5 работает. Sqlldr73 - тоже.

На сайте http://oraclub.trecom.tomsk.su Вы найдёте также утилиту db3load, которая готовит CTL-болванки и скрипты для оракловской таблицы.

Владимир Белов (Vladimir Belov)

Как создать окно произвольной формы? Как перетаскивать окно за любое место, а не только за заголовок?

Воспользоваться компонентой mlRegionForm из набора MediaLib, sohoRegionForm из набора SohoLib.

Как поместить иконку своей программы возле часиков?

Воспользоваться компонентами RxTrayIcon из набора RxLib,
StTrayIcon из набора SysTools
LMDTrayIcon из набора LMDTools
или другими, в которых есть слово Tray.
(Я встречал порядка десятка в различных наборах или отдельно).

Как запустить внешнюю программу?

Воспользоваться компонентами xProcExec из набора xTools-Nails,
LMDStarter из набора LMDTools,
ExecuteProcess.

Как узнать, что программа уже запущена?

Воспользоваться функцией AlreadyRunning из набора sohoLib,
компонентом XJustOne.

Как просмотреть версию (и другие параметры) исполняемого файла?

Воспользоваться компонентами StVersionInfo из набора SysTools.
LMDStVersionInfo из набора LMDTools.
Воспользоваться классом TVersionInfo из набора RxLib.

Чем залить фон формы?

Воспользоваться компонентой sohoBackground из набора SohoLib.

Как вычислить CRC?

Воспользоваться компонентой xCRCCalc из набора xTools-Nails.

Как создать бегущую вверх строку (самоскролирующее Memo)?

Воспользоваться компонентой xCredit из набора xTools-Nails,
Titler из набора vgLib,
SecretPanel из набора RxLib,

Как зашифровать файл?

Воспользоваться компонентой xCrypt из набора xTools-Nails,
компонентой CopyCrypt,
набором Delphi Encryption Compedium,
библиотекой AMNSoft Crypt Library.

Как скопировать файл?

Воспользоваться компонентой xFileCopy из набора xTools-Nails.
Позволяет копировать определенный размер.
А чтобы процесс был визуальным, как в Windows?
Воспользоваться компонентой StFileOperation из набора SysTools.

Как в приложении отлавливать нажатия на какую-то кнопку?

Воспользоваться компонентой xSecurityKey из набора xTools-Nails.

Как в перевести число из одной системы счисления в другую?

Воспользоваться компонентой xNumberConvert из набора xTools-Nails.
Единственный хороший компонент из этого набора. Позволяет переводить
числа из любой системы, в том числе можно задать свою собственную.

Как задать параметры печати?

Воспользоваться компонентой xPrintOut из набора xTools-Nails.

Как работать с регистром?

Воспользоваться компонентой xRegistry из набора xTools-Nails.

Как запомнить параметры формы(Размер,Положение,Цвет)?

Воспользоваться компонентой xRemember из набора xTools-Nails,
компонентой FormStorage из набора rxLib,
компонентой sohoFormStorage из набора sohoLib,

Как написать число прописью?

Воспользоваться компонентой MoneyString из набора vgLib,
функцией Real2Name из набора sohoLib,

Как отредактировать меню в run-time?

Воспользоваться компонентой sohoMenuCaptionEditor из набора sohoLib.

Как вычислить какой день недели был в данный день?

Воспользоваться компонентой xDateCalc из набора xTools-Nails.

Как вычислить разность между двумя датами?

Воспользоваться компонентой xTimeCalc из набора xTools-Nails
или функцией DateDiff из набора RxLib.
Может вычислить сколько месяцев, дней, часов, минут, секунд
прошло между определенными участками времени.

Как отсортировать строки в TStrings?

Воспользоваться компонентой xStrList из набора xTools-Nails.
С возможностью сортировки, реакции на дубликаты.

Как написать свой ScreenSaver?

Воспользоваться компонентой xScreenSaver из набора xTools-Nails.
Воспользоваться компонентой mmScreenSaver из набора Multimedia Tools.
Воспользоваться компонентой LMDScreenSaver из набора LMDTools.

Как написать ComboBox для изменения временных зон как в Windows 9х?

Воспользоваться компонентой xTimeZone из набора xTools-Nails.

Как проиграть звуковой файл?

Wave - компоненты
MediaPlayer - со странички System,
mlWavePlayer из набора MediaLib,
hgWavePlayer из набора HighGear,
LMDWaveComp из набора LMD Tools,
sohoSound из набора sohoLib,
Mpeg - компоненты
AudioPlayer из набора MediaLib,

Как сделать, чтобы можно было переходить между компонентами по кнопочке

Enter, а не Tab?
Воспользоваться компонентой sohoEnterTab из набора SohoLib.

Как изменять размеры визуальных компонент в run-time?

Воспользоваться компонентой sohoFormEditor из набора SohoLib.

Хочу красивый Label.

Хотеть не вредно, воспользуйтесь компонентами
sohoLabel из набора SohoLib,
rxLabel из набора RxLib,
и чтобы можно было поворачивать под разными углами
воспользуйтесь компонентой sohoVertLabel из набора SohoLib,

Как сравнить две строки?

Воспользоваться функцией WildStringCompare из набора sohoLib.

Как сделать красивую панель?

Воспользоваться компонентами mlMediaPanel из набора MediaLib,
hgPanel из набора HighGear,
LMDPanel из набора LMDTools,
sohoPanel из набора SohoLib,
sohoScrollPanel из набора SohoLib,

Как изменить цвет, фон кнопки, а также цвет надписи ?

Воспользоваться компонентами mlMediaButton,mlBitmapButton,
mlBlurButton,mlSphereButton,mlGrashGuardButton
mlRegionSpeedButton из набора MediaLib,
hgBitBtn из набора HighGear,
sohoTextButton, sohoTransButton,
sohoBitBtn из набора SohoLib,

Как сделать закладки не только сверху, но и справа или слева?

Воспользуйтесь компонентами sohoVertTabSet из набора SohoLib,

Как показать картинку формата отличного от bmp?

Воспользоваться компонентами из набора ImageLib Suite,
hgImage из набора HighGear,
ActiveX LigthLib,
библиотекой NViewLib,

Как настроить параметры вывода даты, времени или денег?

Воспользоваться компонентами CurrencyStorage и
DateTimeStorage из набора VGLib.

Как сделать заголовок окна в Windows 95 как в Windows 98?

Воспользоваться компонентами RxGradientCaption из набора RxLib.

Как поместить свою иконку на Desktop?

Воспользоваться компонентой StShortcut из набора SysTools.

Как программно нажать клавиши "ScrollLock","NumLock","CapsLock","Insert"?

Воспользоваться компонентой hgKeyState из набора HighGear.

Как работать с COM-портом?

Воспользоваться набором компонент Async Pro.
Воспользоваться компонентой hgComm из набора HighGear.

Как сделать фон формы равномерно переходящим из одного фвета в другой?

Воспользоваться компонентой hgFormGradient из набора HighGear.
Воспользоваться компонентой esGradient из набора Essentials.

Как сделать чтобы размеры компонент изменялись при изменении

размера формы или разрешении экрана?
Воспользоваться компонентами hgResizer и hgFormRes из набора HighGear.

Как сделать чтобы форма сворачивалась и раскрывалась с анимацией?

Воспользоваться компонентой hgFormExplode из набора HighGear.

Как сделать чтобы в TEdit вводились только числа?

Воспользоваться компонентой CurrencyEdit из набора RXLib.
sohoEdit из набора SohoLib(на самом деле намного
круче).

Как мне работать с архивами?

Воспользоваться набором компонент TZipTV.

Как написать спектроанализатор?

Воспользоваться компонентами из набора Multimedia Tools.

Как защитить свою программу?

Воспользоваться компонентами из набора OnGuard(хороший набор для
изготовления шароварной программы),
компонентой Security95,
компонентой CyberBolt,
специализированные программы ASProtect, VBox,
аппаратные ключи HASP и др.
(Хотя это, как мне кажется и бесполезно.)

Как определить подключен ли компьютер к интернету через dialup соединение?

Пинговать www.microsoft.com или mail.ru
или IsConnected

Можно ли на Delphi написать VBX ?

Можно. Ведь по сути дела VBX - это .dll, написанная по определенным правилам.
Однако скорее всего вам потребуется дополнительно соответствующий SDK от
компании Microsoft. Существует даже статья, где обсуждаются все аспекты такой
работы.

Если я хочу рассылать EXE файл, созданные в Delphi, какие еще файлы нужно посылать с ним?

Hикакие. Все компилируется в .EXE файл. Конечно, если вы разработали другие
файлы (HLP, данные и т.д. ), или если вы используете VBX файлы, тогда вы
должны распространять и их заодно. Если вы используете файлы VBX, то в
поставку нужно также включать BIVBX11.DLL. Если приложение использует функции
BDE, вы также должны включать Borland DataBase Engine.

Что такоe FreeIBComponents?

FreeIBComponents (далee - FIBC) - это набоp компонeнт для достyпа к
Interbase из Delphi минyя BDE. FIBC пpeдставляeт собой надстpойкy над
Interbase API и являeтся очeнь пpостым, мощным и гибким сpeдством pазpаботки
клиeнтских пpиложeний для Interbase. Совместим со стандаpтными db-aware
компонентами, входящими в состав Delphi. Поставляются с исходными тeкстами.
Автоp - Gregory Deatz (gdeatz@hlmdd.com).

Kакая вepсия FIBC - послeдняя?

Последняя версия на момeнт составлeния FAQ - от 07 Jun 1999 г.
Официально FIBC вышeл из стадии бeта-тeстиpования.

Гдe можно взять новyю вepсию FIBC?

Hовыe вepсии FIBC выкладываются по адpeсy:
http://www.interbase.com/download ,
http://ib.demo.ru

ультразвуковой толщиномер цена

Материалы находятся на сайте http://cracklab.narod.ru/faq/


Создатель этого HTML файла не претендует на авторство вопросов/ответов представленных в нём, не отвечает за их содержание и достоверность, а также за последствия использования программных кодов , полученных из этого HTML файла. Также не принимаются претензии относительно не размещённой информации об авторе каждого конкретного FAQ'а. Любые другие вопросы присылайте на bad_guy@cracklab.ru (обращаться к Bad_guy'ю).
Hosted by uCoz