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

И еще замечание и вопрос по сообщениям.
Заметил, что если текст сообщения заканчивается на "я", дальше все смотрится как код (вложение).

И можно ли переименовать само окно? У меня задача сделать окошко подтверждения удаления записи. Действием я запись удалить не могу, т.к. фактически у меня просто удаляются значения из некоторых полей, а подтверждения хочется.

Знания - сила! Очередное спасибо и с новым вопросом:
Не удается с помощью MessageDlg продолжить или отменить. Две кнопки не дружатся. Пробовал так:

MessageDlg('бла-бла-бла',mtConfirmation,mbOKCancel,0);

и

MessageDlg('бла-бла-бла',mtConfirmation,[mbOK, mbCancel],0);

не хотит. И если я просто в чем-то накосорезил подскажите, правильны ли дальнейшие действия вида:

if buttonSelected = mrOK

Так работает, спасибо!
Традиционно, еще вопрос. ))
Пытаюсь выкрасить в таблице строки, дата в которых ближе, чем 30 дней от нынешней. У меня сравнивается только число, а не дата и выкрашиваются, соответственно, даты, число в которых меньше. Я так полагаю, это происходит из-за того, что в гриде все данные - строка, не смотря на формат поля в таблице? Если так, то каким способом мнеб даты сравнить? Можно логику, не код, чтоб время не тратить.

procedure frmFind_TableGrid1_OnChange (Sender: string);
var
    i,iI,cR,cC: integer;
begin
    cR := frmFind.TableGrid1.RowCount -1;
    cC := frmFind.TableGrid1.Columns.Count -1;
    for i := 0 to cR do
        begin
            if frmFind.TableGrid1.Cells[6,i] < FormatDateTime('ddddd', Now+30) then
                begin
                    for iI := 0 to cC do frmFind.TableGrid1.Cell[iI,i].Color := clYellow
                end;
        end;
end;

Спасибо за подробные ответы!
Еще вопрос по фильтру в таблице возник. Не удается вывести строки, в которых определенное поле пустое.
Фильтр вида

request.user_r <> ''

правильно выводит только строки с непустыми значениями, а вот аналогично для пустых 

request.user_r = ''

  не удается.
И в запросе тоже не удается выбрать строки с пустыми значениями. Я полагаю, как-то так должно быть?

SQLExecute('SELECT count(id) FROM request WHERE user_r = ''') > 0

Еще вопрос.
В форме, при сохранении выполняется простой математ. расчет (на клик). И хотелось бы при определенных условиях (в частности, результат < 0) не сохранять запись. Сейчас у меня получается только вывести сообщение о том, что так делать нельзя )), но запись сохраняется. Есть какой-то способ не сохранять запись? Если только способом сохранения записи скриптом, то нельзя ли пример запроса с одним, двумя полями на добавление записи с данными из текстбокса, комбобокса?

iacovlogica wrote:

Правильно будет в запрос передавать sqlValue

Спасибо! Не внимательно мануал смотрел.

iacovlogica wrote:

Но если вам скучно то можно написать и так :

Спасибо, мне не достаточно скучно. ))

То ли лыжи не едут, то ли я... как известно.

Пытаюсь кнопкой проверить существует ли запись, и если существует присвоить текстовому полю значение. Все удается только в случае, когда значение цифровое и обязательно начинается не с нуля. Если с нуля, нуль игнорируется, если буквы присутствуют - ошибка в запросе возникает. Не подскажете от куда у меня руки растут? ))

Полностью работу нет - там еще черт ногу сломит. ))
Но логика такая: при авторизации мы запоминаем группу пользователя:

if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True;

Далее в procedure Form1_OnShow - не показываем ему что-то, если он не принадлежит какой-то группе, например:

if isAdmin = False then Form1.Button1.Visible := False;

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

А просто не выводить кнопки вызова форм и пункты меню для определенных групп не достаточно? Я этим ограничился.

DriveSoft wrote:

Извиняюсь за задержку с ответом, был в отпуске, вопрос все еще актуален для вас?

Здравствуйте!
Ничего страшного. Спасибо,  разобрался.

http://myvisualdatabase.com/forum/viewtopic.php?id=1373

И буду очень признателен за информацию о том, где почитать как правильно передавать переменные разных типов в запрос SQLite. Запутался совсем в ошибках. По примерам не догоняю, к сожалению.

А переменную в фильтр впихать никак? )

До калькулятора пока мозгов не хватает. Тренируюсь на кошках.  Захотел выкрасить ячейки в гриде, где запись моложе одного часа. Ошибок нет, результата нет (выкрашивает все). Не приходилось такое делать?

procedure frmFind_TableGrid1_OnChange (Sender: string);
var
    i,c: integer;
begin
    c := frmFind.TableGrid1.RowCount -1;

    for i := 0 to c do
    begin
        if SQLExecute('SELECT * FROM events WHERE date_ins < datetime("now","-1 hour")') then frmFind.TableGrid1.Cell[2,i].Color := clYellow
    end;
end;

Делал по аналогии с чисткой логов. Там корректно работает как так:

SQLExecute('DELETE FROM logs WHERE date < date("now","-60 day")');

так и эдак:

SQLExecute('DELETE FROM logs WHERE date < datetime("now","-1 hour")');
DriveSoft wrote:

какую СУБД вы используете?

Lite.
Спасибо! Вроде, все как надо. Буду учиться стряпать калькулятор.

Спасибо!
Получается, при фильтре events.date >= date('now') записи с датой предыдущей не будут отображаться даже когда я захочу через поиск их найти. Во всяком случае, у меня не получается.
А варианта с датой вчерашней нет?

С логом получилось. Только вот битый час не могу понять как чистить таблицу и хранить только последние 60 дней. Планировал при закрытие удалять все записи старше 60 дней запросом. Т.е. в
procedure frmFind_OnClose
добавить
SQLExecute('DELETE FROM logs WHERE date = ???-60');
В сети тем много, но рабочего варианта я не подобрал. ) Или вообще так делать нельзя?

Еще немного побился и с этим вариантом ошибка больше не вываливается, но работать-то будет? )

DELETE FROM logs WHERE date = CURRENT_DATE-60

Здравствуйте!
Знакомлюсь с программой понемногу. Вопросов уйма. Делаю пока в большинстве своем копипастом из выложенных здесь работ с мизерными изменениями. Буду благодарен за помощь, и, в идеале, не доделкой/переделкой за меня, а с комментариями, хотя бы кратенькими как и что. Или примерами заготовок/работ для "домашней работы".

Общие вопросы возникшие:
С какой целью чек "таблица является словарем"? Что меняется?
Зачем в сортировке в гриде ORDER BY если и так столбец выбрать можно. Как-то "шире" выбирать позволяет?
Поддержка целостности при связах означает, что при удаление, допустим, пользователя, удаляться все записи с "его присутствием"?
Можно ли в DateTimePicker убрать секунды?

Конкретно по моему барану:
Буду благодарен за анализ скрипта. Может я лишнего чего накопипастил. Ошибки-то не прыгают, но все же.

Переделывал несколько раз, почему-то в форме авторизации по Enter перестал входить. Кликать мышой надо или через Tab. Где испортил?

Не для админа скрыть нужно две кнопки. Сейчас сделал, уверен, неправильно двумя строками:

if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else frmFind.btDir.Visible:=False;
if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else frmFind.btJour.Visible:=False;

ведь можно как-то "и" сказать? ) Мои попытки увенчались ошибкой.

Не смог сам разобраться, можно ли в фильтре автозаполнения грида сказать "от сегодняшней даты"? По логике должно быть как-то "events.date >= ?", нет?

Существует ли возможность ведения журнала действий пользователей: пользователь, дата, время, действие (вход, выход, добавил запись, редактировал, удалил)? В идеале, чтоб только последине 60 дней хранились записи. Чтоб сильно база не росла. Если существует, может какая-то готовая работа есть для "поковырять самостоятельно"?

Хотелось бы выполнять проверку на совпадения по саунам/времени, соответственно с оповещением о накладке. Может тоже работа какая есть с примером?

И самое для меня сложное. В конечном итоге хочется сделать калькулятор стоимости. Но, слишком много вводных, даже не знаю как таблицу организовать. Цена зависит от: сауны, времени (9-18, 18-22, 22-9), дня (буд./вых.), кол-во человек (до 6 - ставка, свыше за каджого человека по ... с 9 до 18 и по ... с 18 до 9), скидки. При создании записи мы получаем: часы, сауна, кол-во человек, буд./вых., скидка. С чего начать ковырять?