Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Delphi+Firebird самый удобный-простой метод работы


Автор: delphicoding 5.7.2011, 19:09
Добрый день!

С Delphi вообще не знаком. Программировал ранее на языке программирования с куда более "логически очевидным кодом" и в другой области прикладного программирования и графики. Так получилось, что попросили помочь - отредактировать старый проект Delphi + Firebird. Пытаюсь освоить... по началу всё как-то тупо и непривычно, утомляет всякая имхо неудобная фигня и лишние строки, непонятные приставки итд. Например, нужно добавить показ в таблице ещё одной колонки данных - пол дня вожусь хз как это сделать - колонку добавил, объявил в начале исходника, данные колонке из БД назначил, программа компилируется но колонка пустует... открываю файл БД там ещё тонна кода - ну таблицы понятно, тригеры понятно, но полно ещё каких-то процедур, доменов, индексов... Конечно, всё это нужно изучать, но всё же возможно вы сможете как-то помочь вначале...

1. Прошу профи посоветовать - как под Delphi 2009 + Firebird (+FIBplus +DevExpress +JVCL) наиболее легко и удобно с точки зрения логики и простоты понимания и отслеживания цепей процессов организовать работу с Firebird? Например, год назад вдруг потребовался MySQL - разобрался в нём за час! - научился создавать БД, таблицы, строки, определять типы данных, записывать данные, очищать, удалять, итд. Но в данном проекте видимо используется слишком большое кол-во шагов: создание переменной, определение типа переменной, создание процедуры для переменной, создание в интерфейсе компонент и назначение переменных, отсыл к общему блоку в Delphi работы с СУБД, взаимодействие с неким процедурами СУБД, получение, разбиение, итд. Можно ли упростить цепочку? Мне было бы намного проще: а) работать с визуальными копонентами автоматически объединяемыми в блоки (например, как в html создаётся блок с кнопкой Enter, а все поля заполняются и отправляются автоматически без необходимости каждое поле объявлять, обозначать, процедуры для него писать, без необходимости объединять все эти запросы, итд); б) работать с БД напрямую вручную - мне проще перечислить текстом 50 таблиц, чем разделять код программы на 10 различных типов кода (объявление, назначение, процедуры, функции, потом тоже самое опять в СУБД, итп), кроме того код не содержит почти никаих комментариев - тк непривычно и всё это вместе выглядит как каша! :(
Вот ещё пример, объект с выпадающим списком называется TJvDBLookupCombo и в нём есть возможность напрямую указать данные из БД, а вот в колонках DevExpress так и не нашёл как указать напрямую нужные из БД таблицы-данные?? :(

2. Можно ли как-то автоматически перевести весь проект на более удобный-простой метод общения с БД?

3. Возможно также есть возможность в настройках скрыть весь код автоматически генерируемый Delphi при работе с графическим интерфейсом (формами), чтобы отображался только код написанный вручную? Чтобы просто не мешал на первых порах...

4. Посоветуйте книги по Delphi + DevExpress + FIBplus + Firebird...

Заранее спасибо за подробные полезные ответы!

Автор: superVad 6.7.2011, 19:25
Что бы добавить колонку в грид - надо сначала добавить нужное поле в запрос в датасете, а потом добавить колонку в грид (обычно надо 2 раза клацнуть на него сначала, но я с DevExpress не работал) и настроить ее на это поле.

Там из автоматически сгенерированного только описание контролов вначале - не вижу смысла их прятать.

По DevExpress попробуйте в этом блоге посмотреть - http://delphi2010.ru/?tag=devexpress

Книги по базам, фибам, ФБ попробуйте тут на сайте в разделе - Базы данных и репортинг.

Автор: delphicoding 6.7.2011, 21:14
Спасибо, попробую!

Автор: Akella 7.7.2011, 08:54
Цитата(delphicoding @  5.7.2011,  19:09 Найти цитируемый пост)
 Программировал ранее на языке программирования с куда более "логически очевидным кодом" и в другой области прикладного программирования и графики. Так получилось, что попросили помочь - отредактировать старый проект Delphi + Firebird. Пытаюсь освоить... по началу всё как-то тупо и непривычно, утомляет всякая имхо неудобная фигня и лишние строки, непонятные приставки итд.


намёк на тему для холивара  smile ?

Добавлено через 1 минуту и 19 секунд
Цитата(delphicoding @  5.7.2011,  19:09 Найти цитируемый пост)
Например, нужно добавить показ в таблице ещё одной колонки данных - пол дня вожусь хз как это сделать - колонку добавил, объявил в начале исходника, данные колонке из БД назначил, программа компилируется но колонка пустует... открываю файл БД там ещё тонна кода - ну таблицы понятно, тригеры понятно, но полно ещё каких-то процедур, доменов, индексов... Конечно, всё это нужно изучать, но всё же возможно вы сможете как-то помочь вначале...


В таких случая нанимается программист, который знает Delphi и Firebird ;)

Добавлено через 3 минуты и 34 секунды
Сколько это будет стоить? Ну примерно 10-30 долларов за час работы. В зависимости от квалификации программиста.

Не-не, я не намекаю, что я хочу взяться за проект. Просто уверен, что так будет быстрее, чем ты сначала изучишь: Delphi, SQL, Firebird, саму среду программирования Delphi, да ещё и IBExpert ;)

Добавлено через 4 минуты и 6 секунд
Цитата(delphicoding @  5.7.2011,  19:09 Найти цитируемый пост)
+FIBplus +DevExpress +JVCL

оооооо, да тебе работы хватит  smile

Добавлено через 5 минут и 21 секунду
Цитата(delphicoding @  5.7.2011,  19:09 Найти цитируемый пост)
4. Посоветуйте книги по Delphi + DevExpress + FIBplus + Firebird...

таких книг нет

Добавлено через 10 минут и 36 секунд
Документации на русском по DevExpress нет. Есть только на английском на офсайте в виде справочный файлов и маловато + скудноватые примеры.
По FibPlus есть документация по компонентам и по свойствам компонент, а также примеры. Всё на русском и английском.
По Firebird есть книга "Firebird: руководство разработчика баз данных" от Хелен Борри на русском. Но если разобрался в мускуле, то и в FB подавно разберёшься, SQL ведь - это стандарт smile
Книгу по дельфи??? Их столько.... Почитай Марко Кэнту.

Добавлено через 11 минут и 52 секунды
Задавайте вопрос на нашем форуме, вот разделы:
http://forum.vingrad.ru/forum/Interbase-database.html
http://forum.vingrad.ru/forum/delphi-db-database-reporting.html
http://forum.vingrad.ru/forum/delphi-general.html
http://forum.vingrad.ru/forum/forum-331.html

Добавлено через 12 минут и 2 секунды
http://forum.vingrad.ru/forum-440.html

Добавлено через 13 минут и 34 секунды
Цитата(delphicoding @  5.7.2011,  19:09 Найти цитируемый пост)
. Но в данном проекте видимо используется слишком большое кол-во шагов: создание переменной, определение типа переменной, создание процедуры для переменной, создание в интерфейсе компонент и назначение переменных, отсыл к общему блоку в Delphi работы с СУБД, взаимодействие с неким процедурами СУБД, получение, разбиение, итд. 

Вообще-то можно довольно быстро написать приложение на дельфи с базой Firebird без ввода кода smile, просто мышкой, ну или с минимальными затратами.

Автор: delphicoding 8.7.2011, 00:31
После нескольких дней ковыряния проекта, среда Delphi не особо радуют... :(

-1 Прежде всего кривые хрен знает откуда взятые названия терминов... например Unit - шозанах?! Оказывается это Code. А, что Form не может быть по-английски Unit??   это самый просто пример, таких примеров "странных названий" полно. Сильно мешает.

-2 Слабая стандартизация компонент, вот несколько блоков кода одного проекта с совершенно разным синтаксисом, хрен разберёшь что где как делать: 

   With spReport do begin (без "do" никак?)
    close;

    SQLs.SelectSQL.Text:='SELECT * FROM '+ProcName+'(:DATE_FROM, :DATE_TO, :source_id, :temp_ID, :USER_ID)'; (тут появилось двоеточие)

    Params[0].Value:=pDateFrom; (почему параметры они тупо по циферкам не понял)
    Params[1].Value:=pDateTo;

    freport.Variables['Директор']:=''''+gDirector+''''; (оппа появились кавычки в огромном колве и даже плюсики, а переменная уже в квадратных скобках, оппа)
    
-3 удацкая конструкция взаимодействия с данными БД - нельзя просто написать хоть в коде, хоть в Value графического объекта значение вида "FBSQL.db.table.column" например "FBSQL.basa.COMPANY.DIRECTOR" или даже ещё проще "FBSQL.DIRECTOR", нет, нужно всё друг другу переназначить по 10 раз и завести новые переменные с абсолютно аналогичными названием типа:

  gDirector:=GetParams('DIRECTOR','');
  edDirector.Properties.Value:=gDirector;
  SetParams('DIRECTOR',gDirector);
  gDirector:=GetParams('DIRECTOR','');

-4 собственно о процедурах - нахрена их объявлять по два раза?! в начале и при запуске процедуры? какой смысл?!

type
    procedure ShowReport(ProcName, ReportName, ReportType:string);

procedure ShowReport(ProcName, ReportName, ReportType:string);
begin
   ...
   end;
end;

-5 наверно Delphi делали чтобы было легче программировать, например в пред пункте (ProcName, ReportName, ReportType:string) можно указать тип переменной не для каждой, а сразу для группы - типа удобнее же и быстрее! но в реальности это менее наглядно и приходится выискивать какого же собсвтенно типа одна из десятка переменных?! где же объявлялка там затерялась?!

-6 видимо разработчик оригинала проекта работал не очень аккуратно и поэтому постоянно скачут пробелы и отступы - редактор Delphi абсолютно не умеет форматировать текст самостоятельно, убирать лишние пробелы или наоборот поддерживать заданные интервалы между активными символами. 

-7 очень не хватает инспектора связей способного выстроить графическую цепочку движения данных по проекту - например забиваешь gDirector и видишь где данные появляются, как проходят и где сохраняются или отправляются например в отчёт - очень этого не хватает при освоении чужих проектов!

-8 объекты на графической форме не только нельзя расположить точно по абсолютным значениям пикселей, а только относительно предыдущего объекта, но и нельзя создавать сетки привязки объектов по координатам - в результате сложные формы с кол-вом графических объектов более 30-50 задолбаться можно выравнивать, и нет блокировки от случайного движения мышкой - через раз выбирая объект слегка его дёрнешь куда-нить в сторону в итоге все разъезжаются...

-9 куча левых приставок вида spDirector, exDirector, TDirector, TfDirector итд... офигеть можно, зачем всё это?! Есть некие данные в БД назовём просто "FBSQL.DIRECTOR" также пускай будет переменная хранящая и передающая значение из БД "var.Director" если переменная назначена графическому объекту - пускай у него будет имя и свойства вида "obj.EditFiledDirector.Width" итп. Всё прекрасно видно, понятно и работать легко и ничего не перепутается! Тут же в Delphi бардак полный у всех однотипные имена и хрен поймёшь сразу что где и чем отличается от соседнего?! слишком много для одних данных разных переменных и объектов. Опять же не хватает параметра для всех переменных вида local/global - создал один раз переменную global и обращайся к ней напрямую из любого места проекта, а тут постоянно приходится указывать откуда эта переменная родом, где была заявлена - лишний код и груз.

-10 зачем нужен begin-end в каждой процедуре?! нельзя просто скобочками или типа того?!

procedure TfLocalReport.btPrintClick(Sender: TObject);
begin
 fDesign:=false;
 PrintReport;
end;

намного компактнее и проще для визуальной проверки было бы:

procedure TfLocalReport.btPrintClick(Sender: TObject) {
 fDesign:=false;
 PrintReport }



В общем пока вижу только, что в Delphi довольно легко сделать лёгкий проект, но разобраться в сложном проекте - охренеть. :(

Если можете чтото подсказать по повышению удобства работы в Delphi - было бы здорово!


PS Не ругайтесь - целый день ковырялся пытался исправить ошибку разработчика вытащить одно поле из БД которое он забыл вывести в отчёт - исправил несколько ошибок, оптимизировал код блока отчётов в почти два раза! всё что было работает... но нужное новое поле так в отчёте и не появляется.... мля... бесит! :wall:

Автор: Данкинг 8.7.2011, 01:19
Цитата(delphicoding @  8.7.2011,  01:31 Найти цитируемый пост)
например Unit - шозанах?!

Перевести требуется, что ли? smile В общем, это код для процедур/функций той или иной формы.
Цитата(delphicoding @  8.7.2011,  01:31 Найти цитируемый пост)
Оказывается это Code.

А code - шозанах? smile 
Цитата(delphicoding @  8.7.2011,  01:31 Найти цитируемый пост)
А, что Form не может быть по-английски Unit??   это самый просто пример, таких примеров "странных названий" полно. Сильно мешает.

Не знаю, никогда не мешало, даже в голову не приходило ни о каких странностях. Кстати, в Билдере то же самое.
Цитата(delphicoding @  8.7.2011,  01:31 Найти цитируемый пост)
With spReport do begin (без "do" никак?)

"do" вообще-то во многих языках встречается. И begin тут непосредственно с do никак не связано, т.е. без него бы как раз фигня и вышла.
Цитата(delphicoding @  8.7.2011,  01:31 Найти цитируемый пост)
(почему параметры они тупо по циферкам не понял)

Первый, второй, третий, а тут-то что не так? smile Не нравятся циферки - используй ParamByName.
Цитата(delphicoding @  8.7.2011,  01:31 Найти цитируемый пост)
, а переменная уже в квадратных скобках, оппа)

Снова-таки, в Билдере ещё хуже. smile 
Цитата(delphicoding @  8.7.2011,  01:31 Найти цитируемый пост)
зачем нужен begin-end в каждой процедуре?! нельзя просто скобочками или типа того?!

А если бы были скобочки, ты к чему бы тогда придрался? smile 
Цитата(delphicoding @  8.7.2011,  01:31 Найти цитируемый пост)
намного компактнее и проще для визуальной проверки было бы:

Опять Билдер вспомним.

Автор: Akella 8.7.2011, 08:59
Цитата(delphicoding @  8.7.2011,  00:31 Найти цитируемый пост)
 With spReport do begin (без "do" никак?)

Ты чё сюда пришёл? Высказать недовольство относительно Delphi?
Марш сюда: http://forum.vingrad.ru/forum/holy-wars.html  smile 

Если есть вопросы конкретные вопросы, создавай нормально тему, задай по-человечески вопрос. А нет? До свидания! smile 

Автор: delphicoding 8.7.2011, 09:04
Так конкретные!

Может по другим пунктам знаете как решить неудобство, например: п.6, п.7, п.8 (как заблокировать элементы формы от случайного сдвига, ведь для движений объектов не работает Ctrl+Z  )?

п.2 - не понимаю почему такой разный синтаксис в каждом блоке  smile 

Автор: Akella 8.7.2011, 09:07
Цитата(delphicoding @  8.7.2011,  00:31 Найти цитируемый пост)
 With spReport do begin (без "do" никак?)

можно без begin, но без do никак

Код

with form1 do
  show;

Автор: delphicoding 8.7.2011, 09:22
Так конкретные!

Может по другим пунктам знаете как решить неудобство, например: п.6, п.7, п.8 (как заблокировать элементы формы от случайного сдвига, ведь для движений объектов не работает Ctrl+Z  )?

п.2 - не понимаю почему такой разный синтаксис в каждом блоке  smile 

Автор: Akella 8.7.2011, 09:24
Цитата(delphicoding @  8.7.2011,  00:31 Найти цитируемый пост)
    Params[0].Value:=pDateFrom; (почему параметры они тупо по циферкам не понял)
    Params[1].Value:=pDateTo;


тупо надо почитать документацию из которой узнаешь, как можно обращаться к параметра по имени, а не по "циферкам" Или клавиша F1 выламана? Мож в гугле забанили за частый поиск?

Добавлено @ 09:26
Цитата(delphicoding @  8.7.2011,  00:31 Найти цитируемый пост)
-5 наверно Delphi делали чтобы было легче программировать, например в пред пункте (ProcName, ReportName, ReportType:string) можно указать тип переменной не для каждой, а сразу для группы - типа удобнее же и быстрее! но в реальности это менее наглядно и приходится выискивать какого же собсвтенно типа одна из десятка переменных?! где же объявлялка там затерялась?!


пиши тип для каждой, кто мешает, в чем проблема?  smile

Добавлено @ 09:27
Цитата(delphicoding @  8.7.2011,  09:22 Найти цитируемый пост)
как заблокировать элементы формы от случайного сдвига

просто так - никак
может быть ты найдёшь какую-нибудь утилиту, эксперта для дельфи, но по-другому никак

Автор: Данкинг 8.7.2011, 09:27
Цитата(delphicoding @  8.7.2011,  10:22 Найти цитируемый пост)
 не понимаю почему такой разный синтаксис в каждом блоке

Да единый синтаксис там. Если ты будешь Паскаль с Дельфи 2010 будешь сравнивать - там, конечно, синтаксисы разнятся. smile 

Автор: Akella 8.7.2011, 09:28
Цитата(delphicoding @  8.7.2011,  00:31 Найти цитируемый пост)
-6 видимо разработчик оригинала проекта работал не очень аккуратно и поэтому постоянно скачут пробелы и отступы - редактор Delphi абсолютно не умеет форматировать текст самостоятельно, убирать лишние пробелы или наоборот поддерживать заданные интервалы между активными символами. 


и это очень хорошо!!!!! и удобно!

ну а ты можешь себе поставить отдельно какой-нибудь delphi Code Formatter, хотя в JEDI весть есть же

Добавлено через 2 минуты и 1 секунду
Цитата(delphicoding @  8.7.2011,  00:31 Найти цитируемый пост)
-8 объекты на графической форме не только нельзя расположить точно по абсолютным значениям пикселей, а только относительно предыдущего объекта, но и нельзя создавать сетки привязки объектов по координатам -



НУ И БРЕД  smile  smile  smile  smile  smile  smile вот так бред, всё там можно! RTFM smile 
1. Используй перетаскивание с помощью Shift/Ctrl/Alt, можно перемещать мышкой или стрелками клавиатуры.

Добавлено через 2 минуты и 35 секунд
Цитата(delphicoding @  8.7.2011,  00:31 Найти цитируемый пост)
-9 куча левых приставок вида spDirector, exDirector, TDirector, TfDirector итд... офигеть можно, зачем всё это?! 


чтобы тебя запутать бедного

Добавлено через 3 минуты и 33 секунды
Цитата(delphicoding @  8.7.2011,  00:31 Найти цитируемый пост)
Есть некие данные в БД назовём просто "FBSQL.DIRECTOR" также пускай будет переменная хранящая и передающая значение из БД "var.Director" если переменная назначена графическому объекту - пускай у него будет имя и свойства вида "obj.EditFiledDirector.Width" итп. Всё прекрасно видно, понятно и работать легко и ничего не перепутается!


Ну дык тебе и карты в руки  smile  smile  smile  smile

Добавлено через 5 минут и 1 секунду
Ейбогу, граждане.... я бы после этого товарища проект не стал бы дописывать. Такое впечатление, что автор темы ранее писал на каком-то неизведанном языке собственного производства aka Brainfuck  smile

Добавлено через 13 минут и 18 секунд
Цитата(delphicoding @  8.7.2011,  00:31 Найти цитируемый пост)
-4 собственно о процедурах - нахрена их объявлять по два раза?! в начале и при запуске процедуры? какой смысл?!

type
    procedure ShowReport(ProcName, ReportName, ReportType:string);

procedure ShowReport(ProcName, ReportName, ReportType:string);
begin
   ...
   end;
end;



Так надо. Как минимум для того, чтобы определить область видимости.

Автор: Akella 8.7.2011, 09:45
Цитата(delphicoding @  8.7.2011,  00:31 Найти цитируемый пост)
-6 видимо разработчик оригинала проекта работал не очень аккуратно и поэтому постоянно скачут пробелы и отступы - редактор Delphi абсолютно не умеет форматировать текст самостоятельно, убирать лишние пробелы или наоборот поддерживать заданные интервалы между активными символами. 


да, по-твоему правильно было бы так:
Код

Function GetPriceForZayavka(spinFilterCliPrice:TcxSpinEdit;lbCliPriceWPercent:TcxLabel;Price:Extended):extended;
Var
ii: extended;
begin
if spinFilterCliPrice.Value<=0 then
begin
lbCliPriceWPercent.Caption:=constWrongPercent;
result:=-1;
exit;
end;
ii:=Price*(spinFilterCliPrice.Value/100);
result:=Price+ii;
lbCliPriceWPercent.Caption:='max: '+FloatToStr(result);
end;


И то правда, нафиг нам эти пробелы, с ними больше мороки

Добавлено через 9 минут и 4 секунды
Цитата(delphicoding @  8.7.2011,  00:31 Найти цитируемый пост)
намного компактнее и проще для визуальной проверки было бы:

procedure TfLocalReport.btPrintClick(Sender: TObject) {
 fDesign:=false;
 PrintReport }



Пиши на сях, там от скобочек тебе в глазах рябить не будет  smile

Добавлено через 9 минут и 52 секунды
Нужно будет тему отправить в Песочиницу или в холивары. Только нужно её ещё чуть-чуть подразвить  smile

Добавлено через 10 минут и 59 секунд
Цитата(delphicoding @  8.7.2011,  00:31 Найти цитируемый пост)
В общем пока вижу только, что в Delphi довольно легко сделать лёгкий проект, но разобраться в сложном проекте - охренеть. :(

В любом достаточно сложном проекте можно охренеть даже профессионалу, не говоря о тебе ;)

Автор: Akella 8.7.2011, 10:02
Цитата(delphicoding @  8.7.2011,  00:31 Найти цитируемый пост)
исправил несколько ошибок, оптимизировал код блока отчётов в почти два раза! 

Вместо Begin/End скобочки поставил  smile ?!

Автор: delphicoding 8.7.2011, 10:49
Модератор: Сообщение скрыто.

Автор: Данкинг 8.7.2011, 11:02
Цитата(delphicoding @  8.7.2011,  11:49 Найти цитируемый пост)
Всё что ты написал - ниачёмные школьные смешки... 

Гы.

Автор: Akella 8.7.2011, 13:26
smile

Добавлено через 2 минуты и 36 секунд
так уж и быть, за оскорбление банить тебя не буду, настроение ты мне поднял своими сообщениями  smile 

Автор: bems 8.7.2011, 13:34
Модератор: один топик - один вопрос. Троллинг не приветствуется. Школьные вопросы задают в разделе для новичков. Тема закрыта.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)