1

(26 replies, posted in Russian)

По поводу заполнения обязательных полей - хорошо бы чтобы на форме обязательные для заполнения поля как-нибудь отмечались, ну типа звездочкой или еще как нибудь (цветом?)

2

(1 replies, posted in Russian)

Поделюсь опытом в связи с тем, что в версии 1.50 появился тип Деньги. У меня в программе поле цены имело тип REAL На самом деле тип Деньги, это тот же  REAL, только форматирован вывод на экран с двумя нулями после запятой под копейки. Если вы хотите заменить обычный REAL на тип Деньги, то нужно сделать так: сделать копию файла базы, потом в среде разработки заменить в настройках базы старый тип поля на тип Деньги. Все данные в этом поле в таблице БД будут очищены и станут NULL. Копируете сохраненную базу назад - и в программе получаете красивые значения денежных величин!

3

(27 replies, posted in Russian)

Предложение по части представления структуры БД - хорошо бы сделать на рисунке не только перемещение и запоминание положения таблиц на экране, но и положение полей в таблице. Часто множественного пересечения линий связи, да еще и под различными углами, можно было бы просто избежать, если опустить или поднять определенное поле в таблице на рисунке сжхемы

Пытаюсь в скрипте задать такой массив
const REG_PREFIX: array[1..4] of String = ('s', 'e', 'c', 'o' );
и получаю ошибку Если массив определить через var и потом в коде инициализировать, то это работает. Но не очень это красиво.

Здравствуйте! Есть такая простая задача: например есть 4 кнопки. При нажатии на каждую открывается одна и та же форма редактирования записи БД. Как на этой форме редактирования узнать, по какой кнопке она открыта?

6

(27 replies, posted in Russian)

Здравствуйте Дмитрий! Спасибо за оперативную разработку представления структуры БД. Пара предложений - хорошо бы чтобы была возможность печати ее на принтер. И еще если можно сделать, чтобы линии связи (возможно опционально)  были только вертикальные и горизонтальные, то есть без диагональных линий. Спасибо.

Мне кажется хорошо-бы сделать показ схемы (модели) базы данных со связями между полями таблиц. У меня уже порядка 40 таблиц, и иногда бывает сложно вспомнить все взаимосвязи. Или может подскажите готовую программу, которая могла-бы нарисовать модель базы по готовой базе?

Как задать маску для вывода  текстового поля телефонного номера по шаблону типа (916)567-1111 в отчете? При вводе на форме есть возможность указать маску ввода, но в таблице телефон запоминается просто как последовательность цифр.

Ошибся немного - есть еже таблица где определяется связь между работой и исполнителем, так как у работы может быть несколько исполнителей. И тогда получается что исполнитель будет родительской записью для записей из этой таблицы. То есть похоже проблема будет решаться установкой галочки в настройках таблиц, чтобы удалять дочернии записи из этой таблицы связей.

Возникла такая проблема - есть три таблицы: Заявки, Работы, Исполнители Они связаны между собой через foreign key таким образом, что в таблице Работы есть ссылка на id Заявки, а в таблице Исполнители есть ключ на id из таблицы работы. Предположим у заявки есть работа, которой назначен исполнитель. Если я попытаюсь удалить исполнителя из таблицы Исполнители, то возникает ошибка целостности базы. В среде разработки есть в настройках таблиц чекбокс удаления дочерних записей при удалении родительской, но тут наоборот удаляется вроде-как дочерняя запись. Может просто не определять поле в таблице Исполнители, которое ссылается на запись в таблице Работы как foreign key?

Есть датапикер, тип которого MonthYear Как в SQL запросе задать условие по полю типа Дата, чтобы были отобраны те записи, даты который попадают в диапазон, заданный пикером, то есть например январь 2015 года?

12

(10 replies, posted in Russian)

В примере, который я поместил в теме "Как сделать инкремент числового поля в записи?" как раз есть пример чтения из базы одного поля из таблицы.

Вот примерно так:

procedure frmRequest_OnShow (Sender: string; Action: string);
var
  sNumber: string;
begin
   if (Action = 'NewRecord') then
     begin
       sNumber:= VarToStr(SQLExecute('SELECT s_number FROM system WHERE id=1'));
       frmRequest.eNumber.Text := IntToStr(StrToInt(sNumber) + 1);
       frmRequest.cbStatus.ItemIndex := 1;
       frmRequest.cNewRecord.State := cbChecked;
     end
   else
     begin
       frmRequest.cNewRecord.State := cbUnchecked;
     end;
end;

Очевидно не работает, потому что тип поля в базе ДАТА, а нужно очевидно ДАТА/ВРЕМЯ Кстати, когда в редакторе базы поменял тип поля в таблице, все данные в этой колонке очистились. НО я перед этим копию сделал. Так что скорее всего просто добавлю еще колонку ВРЕМЯ и буду с ней отдельно работать.

Сделал именно так. Но время не сохраняется.
Еще такой вопрос - можно ли у пикера сделать так, чтобы не было чекбокса в начале? ТО есть например чекбокс установлен, но не видим и пользователь его не может изменить.

Спасибо! Попробовал связать два компонента Время и Дата - время не сохраняется в базе, дата сохраняется. Если вручную время в базе прописать, то пикер для времени его отображает.

Понадобилось кроме текущей даты сохранять и текущее время Как я понял в DateTimePicker есть режим показа/выбора даты и есть режим для времени. Дата в базе храниться вместе со временем как я понимаю. Нужно иметь возможность задавать дату и время отдельно (в отдельных соответствующих пикерах) и потом сохранять ее в одно поле записи. Как это можно сделать?

И попутно еще вопрос - Если на форме происходит создание записи в БД по кнопке в которой Action типа СОХРАНИТЬ ЗАПИСЬ, то в какой момент после сохранения можно вызвать метод скрипта, чтобы в эту запись (то есть ее id нужно получить) дописать еще некоторые данные, которые на основной форме невозможно в ней сохранить?

А можно добавить такую фичу - я работаю всегда над одним проектом, и хорошо-бы чтобы при запуске среды разработки сразу грузился этот проект (точнее последний открытый проект) И размер окна и позиция окна среды разработки тоже чтобы сохранялась между сеансами работы.

19

(10 replies, posted in Russian)

Спасибо, то что надо!

20

(10 replies, posted in Russian)

Да, это запрос по кнопке, но это не постой SQL запрос - это Отчет SQL. Попробовал - тут это не работает.

21

(10 replies, posted in Russian)

У меня такой вопрос - не могу найти в документации по SQLite - мне нужно в запросе select выдать в качестве одного из полей номер записи в результате, что-то типа rownum который есть в Оракле, но тут это не работает. Это можно как-то решить?

Имелось ввиду скрыть вкладку не TabDatabaseLoc а вторую, в которая Настройки называется.

А можно как-то отдельно отключить(скрыть) вкладку Настройки, на форме на которой выбирается путь к базе?

Да, я так и делаю, использую один обработчик в четырех местах по onChange, получая из Sender имя грида. Попутно такой вопрос возник - у меня на форме 4 грида в закладках находятся, в каждом делается запрос к одной и той-же таблице, только фильтр стоит по полю тип. Возможно с 4 гридами не самое рациональное решение, но так получилось из-за удобства интерфейса. Заметил следующее - когда открываю в каком-либо из этих гридов запись на редактирование, и потом при сохранении по OnChange грида раскрашиваю его ячейки, onChange срабатывает во всех 4-х гридах и происходит соответственно и их раскрашивание, хотя в самих гридах ничего не менялось. Это как-то решается? Сейчас там десятки записей, а будут сотни и тысячи, лишнее время на это будет тратиться.

Да, запуск из одного места по сети - это хороший выход. Но есть нюансы: при раздельном локальном запуске у каждого пользователя свой файл settings.ini в котором в частности находится настройка ширины колонок в гридах. Каждый настраивает, ку ему удобнее. Также у меня сейчас используется еще отдельный ini файл с некоторыми локальными настройками, которые читаются из скрипта при запуске программы. Например переход в определенную вкладку на главной форме сразу после запуска программы. Особенность работы в том, что у меня каждый пользователь работает со своим разделом программы. Можно конечно настройки и в базу перенести, но у меня пока нет логина для пользователей, так как это пока не нужно.