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

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


Информационный Канал Subscribe.Ru

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

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

Выпуск № 191
от 26.07.2005, 19:40

Администратор:Калашников О.А.
В рассылке:Подписчиков: 226, Экспертов: 35
В номере:Вопросов: 4, Ответов: 16


Вопрос № 23780: Привет всем, у меня такой вопрос , можно ли как нибуть записывать в Memo1 то, что ввёл в командную строку (cmd) Заранее спасибо. ...
Вопрос № 23792: Здравствуйте, уважаемые эксперты!!! Я уже однажды задавал этот вопрос, но так и не получил ответа. Просто мне очень нужно, без этого вся моя программа стоит и не могу двинуться с места. Вопрос со связыванием таблиц paradox: 1 табл.<b...
Вопрос № 23805: Здравствуйте уважаемые эксперты! Извините за глуповатый вопрос, но ответ нигде не могу найти. Я работаю в Delphi 6. Мне нужно, чтобы моя программа в процессе своей работы создавала файлы и вела туда запись, но в ответ получаю сообщение об оши...
Вопрос № 23837: Здравствуйте уважаемые эксперты!!! У меня к Вам несколько вопросов относительно БД: 1.Подскажите, как осуществить перенос базы данных на другой компьютер? Я имею в виду, что есть программа, содержащая БД (BDE, Paradox 7), как сделать так чтоб...

Вопрос № 23.780
Привет всем, у меня такой вопрос , можно ли как нибуть записывать в Memo1 то, что ввёл в командную строку (cmd)
Заранее спасибо.
Отправлен: 20.07.2005, 22:18
Вопрос задал: Станислав (статус: 1-ый класс)
Всего ответов отправлено: 4

Отвечает: Werewolf
Здравствуйте, Станислав!
Memo1.Text:=GetCommandLine;

функция GetCommandLine возвращает указатель на всю командную строку текущего процесса

если хотите отдельно каждый параметр то
memo1.Lines.Clear;
for i:=0 to ParamCount do
Memo1.Lines.Add(ParamStr(i));

если без адреса exe файла
измените в последнем куске
for i:=0 to... на for i:=1 to
Ответ отправил: Werewolf (статус: 3-ий класс)
Отправлен: 21.07.2005, 03:22

Отвечает: Gin

Здравствуйте, Станислав!

Да, конечно! Самый простой способ:

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Text := Edit1.Text;
end;

С Уважением, Gin
Ответ отправил: Gin (статус: Студент)
Отправлен: 21.07.2005, 06:26

Отвечает: Витомский Вадим Викторович
Здравствуйте, Станислав!
Если имеется в виду параметры командной строки, переданной в программу, можно попробовать

for i := 1 to ParamsCount do Memo1.Lines.Add(ParamStr(i));

(если я правильно помню, ParamsCount указывает кол-во параметров, а ParamStr(i) возвращает заданный параметр, причем ParamStr(0) возвращает полный путь к исполнимому файлу программы).
---------
Не все то Windows, что висит!
Ответ отправил: Витомский Вадим Викторович (статус: 2-ой класс)
Отправлен: 21.07.2005, 10:13

Отвечает: sir henry
Здравствуйте, Станислав!
Сформируйте эту самую строку и записывайте ее по очереди в мемо и в cmd. Или Вы что то другое имели в виду?
s:='rar a -r -y c:myarch c:progs*.*';
Memo1.Lines.Add(s);
ShellExecute(0, 'open', 'cmd.exe', PChar(s), NIL, SW_SHOW);
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 21.07.2005, 18:19


Вопрос № 23.792
Здравствуйте, уважаемые эксперты!!!
Я уже однажды задавал этот вопрос, но так и не получил ответа. Просто мне очень нужно, без этого вся моя программа стоит и не могу двинуться с места.
Вопрос со связыванием таблиц paradox:

1 табл.
Number *
FIO

2 табл.
ID *
Phone

В поле Number - 1 таблицы у каждого свой номер, при выборе записи из первой таблицы, во второй таблице должны отображаться только записи, имеющие поле ID = Number из первой таблицы. Также при удалении записи из первой таблицы, должны удаляться записи, имеющие такоеже поле ID из второй таблицы.

Я попробовал все это реализовать через фильтры, т.е. при выборе записи из 1 таблицы, во второй таблице записи фильтруются по полю ID. Все бы нормально, но проблема в том, что добавлять записи во вторую таблицу, нужно, чтобы в поле ID был такоеже значение, как в поле Number, выбранной записи из первой таблицы. Но при добавлении записи во вторую таблицу выскакивает ошибка Key Violation.

Подскажите пожалуйста, как можно решить эту проблему??? У меня Delphi 7.

Приложение:

Отправлен: 21.07.2005, 07:32
Вопрос задал: xXx (статус: 3-ий класс)
Всего ответов отправлено: 1

Отвечает: Tsechoev Bagaudin
Здравствуйте, xXx!
Лучше всего было бы работать через саму компоненту table, у нее есть такое свойство как MasterSource, выбери там DataSource для 1 таблицы и потом шелкни по свойству MasterFields. Появится редактор в котором, слевой стороны будут ключевое поле 2 таблицы, а с правой стороны поля 1 таблицы. Выдели в обоих частях имена полей, которые нужно увязать (в твоем случае ID - > Number), нажми "add" и закрой это окно. Теперь тебе не нужны фильтры. Key Violation означает, что ты пытаешься занести во вторую таблицу повторяющийся ID. Убери уникальность для поля ID, это единственное решение твое проблемы, сделай его или просто полем, или индекскным, но не ключевым. Paradox оправдывает свое название полностью, поэтому я работал с ним максимум первые 2 месяца, когда впервые сел за Delphi.
Удачи!
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 8-ой класс)
Отправлен: 21.07.2005, 14:45
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо за ответ!!! но теперь у меня другая проблема, теперь при добавлении записи он пишет Index is read only. Как это можно исправить?


Вопрос № 23.805
Здравствуйте уважаемые эксперты!
Извините за глуповатый вопрос, но ответ нигде не могу найти. Я работаю в Delphi 6.
Мне нужно, чтобы моя программа в процессе своей работы создавала файлы и вела туда запись, но в ответ получаю сообщение об ошибке, а файл создаеться только после сброса программы. Обработка исключений не помогает, возможно я не совсем верно ее реализовал. Подскажите, пожалуйста!

Приложение:

Отправлен: 21.07.2005, 10:13
Вопрос задал: Sourse (статус: Посетитель)
Всего ответов отправлено: 8

Отвечает: Rusland
Здравствуйте, Sourse!
У тебя не верный код. Ты не пишешь файл, а читаешь. FileCreate тебе здесь не нужен. Смотри приложение, там рабочий код. Удачи.

Приложение:

---------
Тише едешь, дальше будешь... от того места куда едешь

Ответ отправил: Rusland (статус: 7-ой класс)
Отправлен: 21.07.2005, 10:40
Оценка за ответ: 4
Комментарий оценки:
Так получаеться, только при условии, что файл существует. Иначе возникает ошибка вводавывода 32, команда ReWrite не помогает:(

Отвечает: Gin

Здравствуйте, Sourse!

В приложении пример сохранения записи в файле в папке где установлена программа.

С Уважениеам, Gin.

Приложение:

Ответ отправил: Gin (статус: Студент)
Отправлен: 21.07.2005, 11:16
Оценка за ответ: 3
Комментарий оценки:
Ответ не по теме.

Отвечает: X
Здравствуйте, Sourse!
Функция filecreate не только создаёт файл, но и открывает его.
То есть перед Reset его надо закрыть.
Рабочий код в приложении.

А не лучше ли воспользоваться Rewrite?

Приложение:

Ответ отправил: X (статус: 7-ой класс)
Отправлен: 21.07.2005, 13:18
Оценка за ответ: 4
Комментарий оценки:
Не вышло. Возникает ошибка("I/O error 32"), как и раньше:(

Отвечает: Tsechoev Bagaudin
Здравствуйте, Sourse!
Rusland ответил в принципе верно, только есть небольшое дополнение. Если открываешь файл с добавлением записей, делай через Append(Переменная_Файла), а чтобы сохранить записи без закрытия файла flash(Переменная_Файла)
Одним словом:
var
F: TextFile;
begin
IF FileExists(FileName) then
AssignFile(F,"Путь и Имя файла");
Append(F); // для добавления, работает только для типа TextFile
// Rewrite(F); // для перезаписи файла
end;
во время записи
writeln(F,"строка");
flash(F); // сохраняем в файл

Удачи!
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 8-ой класс)
Отправлен: 21.07.2005, 15:11

Отвечает: Master135
Здравствуйте, Sourse!
Я конечно очень извиняюсь, но кто ж совместно использует 2 разных подхода к файлам одновременно. filecreate используется с какими-то заморочками сейчас не скажу- но вот полностью рабочий код программы:

Приложение:

Ответ отправил: Master135 (статус: 6-ой класс)
Отправлен: 21.07.2005, 15:38

Отвечает: Master135
Здравствуйте, Sourse!
Я конечно очень извиняюсь, но кто ж совместно использует 2 разных подхода к файлам одновременно. filecreate используется с какими-то заморочками сейчас не скажу- но вот полностью рабочий код программы:

Приложение:

Ответ отправил: Master135 (статус: 6-ой класс)
Отправлен: 21.07.2005, 15:38
Оценка за ответ: 4
Комментарий оценки:
if not fileexists(form1.Edit1.Text) then begin
assignfile(f,form1.Edit1.Text);
rewrite(f);
closefile(f);
end;
assignfile(f,form1.Edit1.Text);
append(f);//тут возникает ошибка "I/O error 32", та же ситуация:(

Отвечает: sir henry
Здравствуйте, Sourse!
Явно неправильно. :)
Вы пытаетесь применить сразу два разных подхода к работе с файлами.
1. Если для создания файла используется функция FileCreate().
{Создание файла}
const
mess = 'Какое либо сообщение.';
var
hndl: integer; {Дескриптор (хэндл) файла}
Begin
if not fileexists(Edit1.Text) then
hndl:=filecreate(Edit1.Text);
{Запись чего либо в файл}
FileWrite(hndl, mess, SizeOf(mess));
{Закрыть файл}
FileClose(hndl);
End;
2. Классический подход:
const
mess = 'Какое либо сообщение.';
var
f: TextFile; {Файловая переменная}
Begin
AssignFile(f, 'имя_файла.txt');
Rewrite(f): {Открытие файла для записи}
WriteLn(f, mess); {Запись в файл}
CloseFile(f); {Закрыть файл}
End;
3. Есть и третий путь - через создание файлового потока (TFileStream). Он похож на первый случай.
const
mess = 'Какое либо сообщение.';
var
f: TFileStream;
Begin
{Создание файла}
f:=TFileStream.Create('Имя_файла.txt', fmCreate);
{Запись в файл}
f.Write(mess, SizeOf(mess));
{Закрытие файла}
f.Free;
End;
Это самый минимум из того о чем Вы спрашивали. Функций по работе с файлами довольно много.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 21.07.2005, 18:11
Оценка за ответ: 4
Комментарий оценки:
К сожалению, снова выскакивает сообщение об ошибке вводавывода 32. Все получаеться только при условии, что файл уже создан. А чтобы в процессе работы проги был создан файл и вести туда запись, не выходит. Я отправлю на форум RUSFAQ , более подробное описание проблемы, с инструкцией. Возможно так будет понятнее.

Отвечает: VBA
Здравствуйте, Sourse!

If Not FileExist(Edit1.Text) Then
Begin
AssignFile(F,Edit1.Text);
Reset(F);
Write(F,'String');
CloseFile(F);
End;

---------
Неправ вечно юзер, ибо прав всегда Админ!
Ответ отправил: VBA (статус: 5-ый класс)
Отправлен: 22.07.2005, 13:00
Оценка за ответ: 5
Комментарий оценки:
Спасибо!


Вопрос № 23.837
Здравствуйте уважаемые эксперты!!!
У меня к Вам несколько вопросов относительно БД:
1.Подскажите, как осуществить перенос базы данных на другой компьютер? Я имею в виду, что есть программа, содержащая БД (BDE, Paradox 7), как сделать так чтобы она работала на любом компе сразу после инсталляции? Я так понимаю, что надо установить движок БД и воссоздать алиас БД, но как это реализовать я не знаю!!!
2.Нужны ли для работы с MySQL 4 компоненты не входящие в стандартный набор компонентов Delphi 7? Если да, то где их можно скачать?
3.Где можно скачать толковый FAQ или учебник по работе с MySQL 4?
4.Какую технологию (ADO, InterBase, IBX, BDE, dbExpress) лучше использовать для программ похожих на ту, что изложена в первом вопросе?
5.Какие еще есть бесплатные БД кроме MySQL?
Отправлен: 21.07.2005, 19:35
Вопрос задал: Силантьев Евгений Александрович (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: Tsechoev Bagaudin
Здравствуйте, Силантьев Евгений Александрович!
Начнем с последнего вопроса, лучше всего ADO, это единственное (кроме офиса) что я уважаю в майкрасофте.
Теперь ответ на 1 вопрос: Мне жаль что ты не написал о своем проекте раннее, и я не смог тебя от говорить от этого беспредела как BDE, но я могу дать тебе возможность скачать инсталятор, и сделать setup нормальный.
Вопрос 2:
Да нужны, если ты не хочешь работать через dll, посмотри на www.mysql.com и на www.torry.net
Вопрос 3:
Качать ничего ненадо, сайт www.mysql.ru
Удачи!
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 8-ой класс)
Отправлен: 21.07.2005, 20:47
Оценка за ответ: 5
Комментарий оценки:
Спасибо за достаточно полный ответ! :)
1. Программа не горит поэтому могу её и переделать! За инсталлер буде очень благодарен! Если можно то брось пожалуйста на мыло joy_dp@ua.fm
4. Я сам BDE недолюбливаю, но не забывай что ADO гораздо помедленней будет! А программа пишется для железяк типа: 400 МГц, 128 Мбайт ОЗУ!

Отвечает: sir henry
Здравствуйте, Силантьев Евгений Александрович!
1. Можно устанавливать BDE с дистрибутива Дельфи, можно скачать его отдельным пакетом с сайта www.borland.com. Алиас можно создать програмно (см. приложение).
2. А про какие компоненты Вы говорите? :)
3. Конечно же на сайте www.mysql.ru.
4. InterBase, IBX, dbExpress - это технологии для работы с серверами баз данных, так что для работы с Парадоксом Вы их смело можете исключить. Остается либо ADO, либо BDE. У BDE, помимо ее неоспоримых достоинств, есть один существенный недостаток - ее надо устанавливать дополнительно (а это еще как минимум 9 МБ). А вот ADO с 99% вероятностью уже стоит на любом компе (если это конечно комп с виндовозом). В остальном и ADO и BDE практически равноценны - и там и там есть свои глюки. :)
Сейчас рекомендуется имено ADO, т.к. BDE уже давно перестало развиваться и не может работать с некоторыми типами БД (например с ACCESS 2000).
5. PostgreSQL (http://www.postgresql.org/). Это довольно сложный и изощренный сервер БД с набором самых разнообразных типов данных. Разработан изначально под Юникс, но есть и версия для Виндоус. Работает быстро, но дистрибутив велик.
FireBird (http://www.ibase.ru/firebird.htm). Это маленький и быстрый сервер БД. Его главное преимущество перед остальными - совместимость с InterBase, для которого в Дельфи есть полный набор компонентов.
MaxDB (http://dev.mysql.com/downloads/maxdb/7.6.00.html). Это очень навороченый клон MySQL. Остальные параметры похожи, но он рекомендован (в отличие от MySQL) для применения в промышленных приложениях БД.
Кроме того, на http://sourceforge.net/index.php можно нарыть множество компонентов для прямого доступа к файловым типам БД (типа .dbf, .db, .mdb).
Все зависит от типа приложения, которое Вы хотите создать. Для обработки больших объемов данных нужен именно сервер БД, который мог бы значительную часть вычислений, связанную с выборкой данных и бизнес-логикой, взять на себя. Тогда для клиента остается лишь задача отображения данных и не нужен ему ни Пентиум 3, ни, тем более, Пентиум 4. :)
Для приложения типа "записная книжка" проще всего использовать файловую БД и компоненты для прямого доступа к файлам БД. При этом у клиента не нужно устанавливать какие-либо дополнительные компоненты.

Приложение:

Ответ отправил: sir henry (статус: Профессор)
Отправлен: 22.07.2005, 06:03
Оценка за ответ: 5
Комментарий оценки:
Спасиб! Очень полно и вразумительно!!!

Отвечает: Витомский Вадим Викторович
Здравствуйте, Силантьев Евгений Александрович!
1. Не обязательно полностью устанавливать BDE - достаточно в папку с программой скопировать только необходимые DLL.
2. Компоненты нужны - для поиска попробуй Google.
3. См. ответ на вопрос 2.
4. Лучше использовать dbExpress - не требует дополнительных драйверов.
5. FireBird - http://www.fingerbird.de/main.htm набор компонентов - http://www.ibobjects.com/TechInfo.html

---------
Не все то Windows, что висит!
Ответ отправил: Витомский Вадим Викторович (статус: 2-ой класс)
Отправлен: 22.07.2005, 11:24
Оценка за ответ: 4
Комментарий оценки:
1. А какие именно dll-ки нужны? И как с ними работать?
4.Да драйвера не нужны, но dbExpress использует однонаправленный курсор, а это значит надо забыть о DBGrid, QReport и многом другом! Или я не прав???


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

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

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

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

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


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


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное