Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 635
от 30.10.2006, 01:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 399, Экспертов: 67
В номере:Вопросов: 3, Ответов: 9


Вопрос № 59971: Доброго здоровья! Посоветуйте, как бы сделать самому (или может, есть что готовое) для создания автоапгрейда программы. Что б, запустил exe, а он сам все установил, путь и что куда - сидит в реестре, найти можно. Но вот всё остальное не ясно, чем и к...
Вопрос № 60030: помогите пожалуйста. есть таблица с полями: Name(фио спортсмена) Vid_sporta(вид спорта, которым он занимается) Klub(клуб, в котором он играет) Record(и его рекорд) при нажатии на кнопку - в гриде отображаются все спортмены, занима...
Вопрос № 60088: Вопрос о папках и файлах. Возьмем, например, такую программу, как WinRAR. Папка вожет быть преобразована ей в файл *.rar. При этом если просто задать compression method как store, то фактически новый файл и будет представлять собой последовательность...

Вопрос № 59.971
Доброго здоровья! Посоветуйте, как бы сделать самому (или может, есть что готовое) для создания автоапгрейда программы. Что б, запустил exe, а он сам все установил, путь и что куда - сидит в реестре, найти можно. Но вот всё остальное не ясно, чем и как паковать и что б был один setup.ехе не ясно, да и сценарии обновления тоже как грамотно реализовать не знаю. Можно конечно воспользоваться штатным InstallShield, но очень он тяжёл, 3.5 мБ добавляет - просто ужас. И как можно реализовать проверку доступности и загрузку обновления на HTTP сервере? Спасибо огромное откликнувшимся :-)
Отправлен: 24.10.2006, 02:09
Вопрос задал: SuperMaxx (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: AlexanderR
Здравствуйте!

Вместо InstallShield советую использовать Inno Setup. Очень гибкая настройка и бесплатный.


---------
Если ты хочешь понять я тебе помогу, но я не буду выполнять за тебя твою работу.
Ответ отправил: AlexanderR (статус: 1-ый класс)
Ответ отправлен: 24.10.2006, 02:51
Оценка за ответ: 5
Комментарий оценки:
Спасибо, Inno отличная программа.

Отвечает: Маренич Владимир
Здравствуйте, SuperMaxx!

http://www.innosetup.com/
там свежая версия (5.1.18)
у меня 4.1.1 делала ехешник 320кб + мои упакованные данные

А по поводу обновления можно использовать простой "тупой" способ:
положить по определенному адресу текстовый файлик (например, UPDATE.txt),
в нем писать версию выложенного обновления (например, 1.0.0.18).
Ехешник клиента читает этот файл, проверяет версию обновления со своей, при несовпадении качает уже UPDATE.exe и потом его запускает, а сам завершает свою работу (для того чтобы UPDATE.exe смог его заменить).
Ответ отправил: Маренич Владимир (статус: Студент)
Ответ отправлен: 24.10.2006, 12:49
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо, особенно за http://www.innosetup.com/ то что надо!

Отвечает: Sattar
Здравствуйте, 1!
var
F:TStream;
F1:TextFile;
S:string;

function ExtractFileNameFromURl(URL:string):string;
var
i:integer;
begin
for i:=Length(URL) downto 0 do
if URL[i]='/' then
begin
Result:=Copy(URL,i,Length(URL));
Exit;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
F:=TFileStream.Create(GetCurrentDir+' ew.txt',fmCreate);
IdHTTP1.Get('http://www.program.ua/upgrade/new.txt',F);
F.Free;
AssignFile(F1,'new.txt');
Reset(F1);
While Not(Eof(F1)) do
begin
Readln(F1,S);
F:=TFileStream.Create(GetCurrentDir+''+ExtractFileNameFromURl(S),fmCreate);
IdHTTP1.Get(S);
end;
end;
Ответ отправил: Sattar (статус: 2-ой класс)
Ответ отправлен: 24.10.2006, 22:20
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое за наглядный пример, очень помог!


Вопрос № 60.030
помогите пожалуйста. есть таблица с полями:
Name(фио спортсмена)
Vid_sporta(вид спорта, которым он занимается)
Klub(клуб, в котором он играет)
Record(и его рекорд)
при нажатии на кнопку - в гриде отображаются все спортмены, занимающиеся видом спорта, который выбран в комбобоксе; а текущей должна быть запись спортсмена с максимальным рекордом в этом виде спорта.
использовала Filter - все нормально с первой частью задачи, а вот как со второй(максимальный балл)?
Надеюсь, что смогла доступно объяснить...заранее спасибо
Отправлен: 24.10.2006, 13:44
Вопрос задала: Nastya (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 9)

Отвечает: Rusland
Здравствуйте, Nastya!
Filter здесь не поможет. Вместо компонета TTable используйте TQuery. Взамен Filter здесь указывается сам sql-запрос... например SELECT * FROM tbl WHERE Vid_sports='значение комбобокса' ORDER BY Record DESC;
---------
Если партия скажет есть контакт, будем есть контакт.
Ответ отправил: Rusland (статус: Специалист)
Ответ отправлен: 24.10.2006, 14:15

Отвечает: Маренич Владимир
Здравствуйте, Nastya!
К сожалению Вы не указали, какая СУБД используется и какие типы полей.
Также я бы на Вашем месте добавил какое-нибудь числовое поле с уникальным значением (типа код спортсмена) для более быстрой идентификации (поиску) нужной записи, т.к. поиск по фио занимает гораздо больше времени и теоретически могут быть спортсмены - однофамильцы с одинаковым именем и отчеством :)
В общем виде можно сделать так:
1. Вместо фильтра лучше использовать запрос:
Query1.SQL.Text:='SELECT * FROM Table WHERE Vid_sporta='''+ComboBox1.Text+''' ORDER BY Name';
Query1.Open;

2. Выполнить запрос:
Query2.SQL.Text:='SELECT MAX(Record) FROM Table WHERE Vid_sporta='''+ComboBox1.Text+'''';
Query2.Open;

3. Query1.Locate('Record', Query2.Fields[0].Value, []);
Query2.Close;

Если не знаете что такое запросы и как их использовать, то ничего другого не остается как перебирать весь набор данных в поисках максимального значения и потом перейти на эту самую запись:
MaxName := '';
MaxRec := 0;
Table1.First;
while not Table1.Eof do
if Table1.FieldByName('Record').AsInteger>MaxRec then
begin
MaxRec := Table1.FieldByName('Record').AsInteger;
MaxName := Table1.FieldByName('Name').AsString;
end;
Table1.Next;
end;
Table1.Locate('Name', MaxName, []);
Ответ отправил: Маренич Владимир (статус: Студент)
Ответ отправлен: 24.10.2006, 14:28

Отвечает: Gh0stik
Здравствуйте, 1!

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


procedure TForm1.Button3Click(Sender: TObject);
var mx:integer;
begin
tb_All.First;
mx:=Record.Value;
while not tb_All.Eof do
begin
if mx < Record.Value then mx:=Record.Value;
tb_All.Next;
end;
tb_All.Locate('Record',mx,[]);
end;


Обращаю Ваше внимание на то что tb_All - это название той таблицы(базы) которую Вам нужно обработать....

И маленький коментарий к предудущему ответу, так как нам не известно какое значение может принимать максимальный элемент (рекорд же может быть и отрицательным...), то соответственно считаем что максимальный - есть первый... (mx:=Record.Value;)

Удачи!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Практикант)
Ответ отправлен: 24.10.2006, 14:46

Отвечает: sir henry
Здравствуйте, Nastya!
Я Вам предложу способ про который эксперты, большие поклонники SELECT ... FROM, видимо уже успели забыть. Тем более, что SELECT Вы еще не проходили. :)
Это старинный классический способ. Нужно создать индекс по полю Record по убыванию и назначить его текущим. Тогда, после применения фильтра для выбора вида спорта, первой записью у Вас будет автоматически запись с самым большим рекордом.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 24.10.2006, 15:44


Вопрос № 60.088
Вопрос о папках и файлах. Возьмем, например, такую программу, как WinRAR. Папка вожет быть преобразована ей в файл *.rar. При этом если просто задать compression method как store, то фактически новый файл и будет представлять собой последовательность файлов, содержащихся в этой папке, размещение этих файлов в структуре каталогов и др. инф., очевидно, также сохраняется в этом файле.
Файл представляет собой по теории ленту байт, заканчивающуюся символом eof. Но что он (eof) представляет из себя?
Короче, вопрос в том, как выполнить такое преобразование.
Все это делается для создания небольшого архиватора.
Отправлен: 24.10.2006, 23:58
Вопрос задал: Blackie (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Andronik
Здравствуйте, 1!

Хм. Насколько я понял из вопроса, настолько и отвечу. EOF (End of File) - это обыкновенный непечатаемый символ ASCII (сужу по временам DOS, сейчас, может, и нет), служащий для операционной системы признаком окончания файла. Код его, если мне не изменяет память, 1A. В самом файле этот символ может присутствовать, а может и нет - в DOS этот символ печатался в таблицу FAT, но никак не в файл. Если этот символ присутствует в файле, то при чтении его в текстовом виде будут прочитаны только символы до EOF, а при чтении в бинарном виде файл будет зачитан по информации из ОС, независимо от находящихся в файле символов.

А что касается архиватора, то здесь все несколько проще. В начале (или конце, кому как удобнее) пишется таблица размещения файлов внутри архива, а используются ее данные, словно вы работаете с файловой системой. На словах это объяснить не очень просто, поэтому лучше взглянуть на реализацию одного из бесплатных архиваторов, например, 7zip (http://www.7-zip.org/download.html)
---------
Запрограммировать можно все... кроме собственного поведения
Ответ отправил: Andronik (статус: 1-ый класс)
Ответ отправлен: 25.10.2006, 01:00

Отвечает: sir henry
Здравствуйте, Blackie!
Если говорить в двух словах, то архив состоит из двух частей (условно):
1. Иерархический список файлов, типа как FAT. Это названия файлов и связанные с ними указатели, где тот или иной файл хранится в сжатом виде в области сжатых данных. Этот список не сжат и его можно разглядывать, как например в FARe или в ТС, зайдя в этот файл.
2. Область сжатых данных. Здесь, собственно, лежат файлы в сжатом виде, один за другим.
Эти две части формируются отдельно друг от друга и записываются последовательно друг за другом.
Можно сделать и маленько по другому, как в RARe. Там каждому блоку сжатого файла, предшествует его полное название (вместе с каталогом).
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 25.10.2006, 07:35
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное