Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi

Автор: reenoip
Дата сообщения: 04.04.2006 15:52
Други, выручайте.
Есть OpenDialog (нужен для выбора файла, без указания пути к которому хочу вообще запретить запуск приложения). "ПафМастЭкзист" и "ФайлМастЭкзист" не помогают

Как узнать мне, что юзер при выборе нажал "Отмена" в окне выбора файла (в самом ОупэнДайлог, т.е.)?
Автор: EZH
Дата сообщения: 04.04.2006 15:56
reenoip
Метод Execute возвращает булевское значение false если нажали отмену.
Автор: RostY
Дата сообщения: 04.04.2006 15:56
if OpenDialog.Ececute then
че-то делаем
else
юзер нажал "Отмена
Автор: nekr
Дата сообщения: 04.04.2006 16:02
Как можно вызвать PopupMenu не правой а левой кнопкой???
Или может сужествуют полные аналогии?
Автор: EAV
Дата сообщения: 04.04.2006 16:07
nekr
Обрабатывайет OnClick в нем вызывайте контекстное меню
Автор: whitewolfs
Дата сообщения: 05.04.2006 07:39
ShIvADeSt
Траблы продолжаются... Да действительно фильтрация у меня была неправильная, теперь исправил, все фильтрует на 100 процентов. Спасибо за исправление. Но! RecordCount зараза всеравно показывает не число отфильтрованных записей, а общее число записей в базе. В инете нашел вот что: "When the dataset has a filter or a range, RecordCount takes that filter or range into account. However, if the dataset is not a Paradox dataset, the value of RecordCount may be only an approximation when a filter is in effect".

Как я понимаю, все зависит от типа базы, поэтому RecordCount тут похоже не подойдет.
Млин, ну как же узнать число отфильтрованных строк??
Автор: ShIvADeSt
Дата сообщения: 05.04.2006 07:47
whitewolfs

Цитата:
Как я понимаю, все зависит от типа базы, поэтому RecordCount тут похоже не подойдет.
Млин, ну как же узнать число отфильтрованных строк??

не знаю, у меня разные базы были и везде нормально работало. ТОгда делай через SQL запрос, тогда будет точное отображение числа записей
Автор: RomanTim
Дата сообщения: 05.04.2006 07:51
whitewolfs
Судя по тому коду, что ты раньше писал

Цитата:

Код: while not Table1.eof do begin
...
Table2.Insert;
...
Table2.Post;
end;
Автор: RostY
Дата сообщения: 05.04.2006 08:42
кажется RecordCount, RecNo возвращает то что надо когда датасет IsSequenced. А если нет, то у меня были случаи когда рекордкаунт возвращал -1, хотя данные были. Сейчас для надежности делаю while not eof
Автор: whitewolfs
Дата сообщения: 05.04.2006 09:52
[q][/q]

неа, IsSequenced тоже не помогает. Я тоже делаю while not eof, но это медленно очень.
Автор: RostY
Дата сообщения: 05.04.2006 10:17
whitewolfs
запросом посчитай

select count(*) as cnt from table1
where ...

cnt:=fieldByName('CNT').AsInteger;
Автор: whitewolfs
Дата сообщения: 05.04.2006 10:26
[q][/q]
запросом это надо использовать TQuery, а нельзя. Для доступа к базе юзаю TDBF (чтоб без BDE было). А TQuery без BDE вроде не работает же?
Автор: RostY
Дата сообщения: 05.04.2006 11:04
А тебе обязательно ДБФ-формат ? Есть Absolute Database (_ttp://componentace.com) - замена БДЕ (правда, там свой формат баз)

With AbsoluteDatabase you can forget the Borland Database Engine (BDE) .
Absolute Database is the compact, high-speed, robust and easy-to-use database engine.
With Absolute Database you will not need special installation and configuration,
it compiles right into your EXE.
Make your application faster and smaller with Absolute Database!

Key Features:

·    No BDE; no DLLs
·    SQL'92 (DDL & DML) support
·    Single database file
·    Unmatched ease-of-use
·    100% compatibility with standard DB-aware controls
·    Strong encryption
·    BLOB compression
·    Full source code available
·    Royalty-free
Автор: vshersh
Дата сообщения: 05.04.2006 11:08
RostY
А ты ее юзал?
Автор: RostY
Дата сообщения: 05.04.2006 11:19
Немного юзал. Инсталировал, демошки попробовал. Перевел несколько програмок с БДЕ на него. Если большая база (> 200 000 записей, 16 мб размер базы), тормозит больше, чем БДЕ, если небольшая база то нормально.

очень понравилось, что есть возможность выборки "select from select"
Автор: evle
Дата сообщения: 05.04.2006 11:21
Понадобилось сделать логирование некоторых операций в программе. Сделал класс TLogger с соответствующими методами. Переменную объявил в дата-модуле, создаю объект в начале dpr, освобождаю последней строчкой:

Код:
begin
Log := TLogger.Create;
Log.FileName := 'c:\PGS.log';
Application.Initialize;
Application.OnException := Log.ExceptionCatcher;
Application.CreateForm(TDataModulePer, DataModulePer);
***
Application.Run;
Log.Save;
Log.Free;
end.
Автор: vshersh
Дата сообщения: 05.04.2006 11:38
RostY
Демки то и я смотрел. На первый взгляд понравилось... Но не знаю, стоит ли ее юзать в рабочих проектах. Думаю лучше сразу на FB или что-то подобное...
Тут недавно кто-то на нее жаловался, что, мол, постоянно рекавери делать хочет...
Не было таких проблем?
И еще насчет базу вопрос: сколько таблиц (в той кот. порядка 200мб) и насколько сильно тормозит все-таки?
Заранее спасибо за ответ.

evle
ДМ освобождается в DoneApplication, который вызывается в finalization юнита Forms.
finalization выполняется уже после выполнения последней строчки кода файла проекта.
Напиши прямо в твоем файле, где описан логгер

Код: initialization
Log := TLogger.Create;
Log.FileName := 'c:\PGS.log';

finalization
Log.Save;
Log.Free;
Автор: RostY
Дата сообщения: 05.04.2006 11:57
vshersh
Ты невнимательно прочитал: 200 000 записей, 16 мб
таблиц там всего две (телефонный справочник города
таблица 1: абоненты с адресами и телефонами
таблица 2: коды и названия улиц)

когда выбрал все (или много) данных, просто отсортированных не по тому полю, по которому изначально отсортирована база, то ооооочень медленно работало перемещение по записям. Может, помогла б индексация, но так и не попробовал. Оставил пока на БДЕ.

Добавлено:
не счет рекавера не скажу - в тех проектах у меня специфическая задача - загрузить из текстовых файлов в базу, сделать несколько селектов и выдать результат анализа. Данные в базе не храню.
Автор: ShIvADeSt
Дата сообщения: 06.04.2006 01:00
RostY
А почему бы не юзать Акцезовские базы, благо АДО стоит везде, БДЕ не требуется, и есть все средства чтобы юзать как SQL, так и обычный First, Next. Я в последнее время на нем многие вещи делаю, чтобы не ставить клиенту БДЕ, а так в инишке прописал путь к базе, прочитал из инишки, подключил и вперед.
Автор: Schatz
Дата сообщения: 06.04.2006 08:15
День добрый.

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



Нашел способ:
Получаю список работающих процессов, если среди них есть explorer.exe тогда не сворачиваю в трей.

Может есть другой способ?
Автор: nekr
Дата сообщения: 06.04.2006 08:40
как отобразить содержимов dll на форму?
Автор: RostY
Дата сообщения: 06.04.2006 09:24
ShIvADeSt
пробовал акцесовские. правда, не через АДО, а через KADAO компоненты и на 9х виндовсах что-то у меня не все работало
Автор: whitewolfs
Дата сообщения: 06.04.2006 09:34
а может кто нибудь знает, где можно почитать что то типа сравнительного тестирования по разным компонентам для работы с базами.
сам нашел только это: http://www.degisy.com/bdealternative.php
Автор: valerka78
Дата сообщения: 06.04.2006 12:28
Schatz

uses
ComObj, ShlObj, ActiveX;

function IsActiveDesktopEnable: Boolean;
const
CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
ActiveDesk: IActiveDesktop;
ComponentsOpt: TComponentsOpt;
hr: HRESULT;
dwReserved: DWORD;
begin
ZeroMemory(@ComponentsOpt, SizeOf(TComponentsOpt));
ComponentsOpt.dwSize := SizeOf(TComponentsOpt);
hr := CoCreateInstance(CLSID_ActiveDesktop, nil, CLSCTX_INPROC_SERVER,
CLSID_ActiveDesktop, ActiveDesk);
if SUCCEEDED(hr) then
begin
hr := ActiveDesk.GetDesktopItemOptions(ComponentsOpt, dwReserved);
end;
Result := ComponentsOpt.fActiveDesktop;
end;

(c)DelphiWorld
Автор: vserd
Дата сообщения: 06.04.2006 13:01
whitewolfs
ExcactRecordcount что показывает?
Автор: Schatz
Дата сообщения: 06.04.2006 13:03
valerka78
Большее спасибо

У меня еще вопрос про терминальный режим есть.
Есть у нас терминальные бездисковые станции, при входе в терминальном режиме мапится COM порт локальной машины, с которой был осуществлен вход. Следом за этим запускается программа которая читает данные с COM порта.
Так вот при попытке инициализировать COM порт программа выдает сообщение "Файл повреждени и не может быть открыт"(ошибка 1392)
С COM портами я работаю через
hPort:=CreateFile(PChar('\\.\COM'+ IntToStr(Num)),GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

Ошибка возникает в момент чтения
ReadFile(hPort,MyBuff,SizeOf(MyBuff),ByteReaded,Nil) // вот в этой строке.

Если запускать на локальных машинах, тогда все ОК, никаких ошибок нет.

Подскажите пожалуйста что делать, в какую сторону копать.

З.Ы. На бездисковой станции стартует линуксойдный клиент SHINSTATION - возможно именно он неправильно мамит порты.
Автор: Markell
Дата сообщения: 06.04.2006 16:08
Такой вопрос: у меня установлен доступ к БД через ADO и данные считываются в DBGrid в виде таблицы. A так же есть стринговая переменная. Как можно в эту переменную загнать значение любой ячейки этой таблицы, например [1,1]? Другими словами, нужен доступ к конкретной записи конкретного поля, чтобы потом ее обрабатывать...
Автор: RomanTim
Дата сообщения: 06.04.2006 17:50
nekr
Смотря что ты понимаешь под "содержимым dll"

Markell
Можно попробовать так (если считать, что строки и столбцы нумеруются с 0)

Код: DBGrid.DataSource.DataSet.RecNo := Row+1;
str := DBGrid.Columns[Col].Field.AsString;
Автор: reenoip
Дата сообщения: 06.04.2006 18:39
... Нужно сделать локализацию приложения на другой язык, который не поддерживается D6 в принципе. В качестве решения проблемы советуют перейти на D8.NET. Мне лично от технологии .NET ничего не нужно (приложение практически готово), но вот из-за проблемы с кодировками придётся, по ходу, портировать весь написанный и отлаженный материал на D8.NET.

Вопросы:
1. Стоит ли переходить на D8.NET, если на рынке уже есть D2006 (компоненты у меня, кажется, для всех перечисленных версий имеются, так что суть не в этом);
2. Как сильно отличаются (хотя бы по такому параметру, как, скажем, - "юзабилити") все названные версии друг от друга?
3. Какие косяки, помимо несовместимости VCL у меня могут быть при попытке портирования проекта?
4. Ваши личные предпочтения и опыт в выборе версии.

По сути, если проблемы будут только на уровне VCL, то это вполне, я думаю, решаемо.
Основное условие к выбору версии: у меня БД на ADO. Как поведёт себя приложение в среде, отличной от D6?
Автор: RomanTim
Дата сообщения: 06.04.2006 22:57
reenoip
Если переходить, то уж на Д2006 - тем более, что она поддерживает как .NET, так и Win32 и поддерживает в одной среде сразу Delphi, C++ и C#. К тому же более новые версии более толково поддерживают Windows в части работы с ее родными контролами и поддержкой стилей XP.

С переносом проектов с D7 на D2006 сложностей фактически не было (пришлось правда у некотрых "заброшенных" сторонних компонентов поправить .INC-файлы и написать DPK). С ADO все работает без проблем.

10-ка по сравнению с 7-й на мой взгляд удобнее для писания кода и отладки, хотя и ощутимо прожорливее по памяти.

Из минусов, с которыми столкнулся - в некоторых моментах глючит при разработке COM-сервера, при том что сам по себе редактор библиотеки типов все тот же корявый, что и бы; контроль версий поддерживает только на StarTeam - для ClearCase пришлось искать стороннюю добавку; периодически падает, хотя и не чаще, чем 7-ка

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Вероятность одинакового CRC32


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.