Skip to forum content
My Visual Database
A Simple Solution for Creating Databases
You are not logged in. Please login or register.
Active topics Unanswered topics
Search options (Page 1 of 7)
Спасибо.
Первую кнопку сделал через ShowRecord
procedure Form1_Button4_OnClick (Sender: TObject; var Cancel: boolean);
begin
form1.TableGrid1.dbUpdate;
frm_main.ShowRecord('main',form1.tablegrid1.dbitemid);
end;
Вторую кнопку спрятал (стандартные настройки кнопки для открытия записи на редактирование в новой форме).
В Итоге получил что было нужно.
При выборе записи в таблице и нажатии на кнопку - редактирование в одной форме.
При двойном клике по записи в таблице - открытие другой формы на редактирование записи.
Ошибки нет.
Еще раз спасибо.
Добрый день.
Спасибо.
Убрал обработчики.
Теперь 2 кнопки для редактирования записи в разных формах.
При двойном нажатии мышью - открываются для одной записи 2 разные формы???
Здравствуйте.
На главной форме Form1 есть TableGrid.
Соответственно для его заполнения есть действие
procedure Form1_OnShow (Sender: string; Action: string);
begin
Form1.TableGrid1.dbUpdate;
end;
Так же у TableGrid есть два действия
procedure Form1_TableGrid1_OnClick (Sender: TObject);
begin
idZapis := Form1.TableGrid1.dbItemID;
end;
procedure Form1_TableGrid1_OnDoubleClick (Sender: TObject);
begin
Form1.Button5.Click;
end;
Действие Button5 - Показать запись для TableGrid в новой форме.
Теперь вопрос: при переходе (закрытии всех открытых форм) на главную форму Form1 выскакивает ошибка: "Не выбрана запись для редактирования". Это нормальное поведение главной формы. Т.е., как я понимаю, при обновлении таблицы происходит действие procedure Form1_TableGrid1_OnDoubleClick (Sender: TObject);???
pavlenko.vladimir.v wrote:Попробуйте так
procedure frm_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
i,n:integer =0;
begin
for i:=1 to 3 do
begin
if (TdbCheckBox(frm.FindComponent('CheckBox'+IntToStr(i))).sqlValue) then inc(n);
.....
Владимир. Спасибо.
Буду изучать Ваш код. Пока не хватает знаний понять принцип его работы. Позже обязательно вернусь и разберусь.
Сейчас сделал, как ранее предложил Константин. Под 12 CheckBox сов код увеличился в 3 раза. Предполагаю, что ваш вариант с циклом останется прежнего размера, в независимости от количества CheckBox сов.
k245 wrote:P.S. Судя по количеству строк, есть проблема в реализации решения изначальной бизнес-задачи. Но о ней вы ничего не сказали, поэтому получили ещё большее количество строк...
Константин.
Спасибо. Действие кода понял полностью. Все заработало. Переработал Ваш скрипт под большее количество строк (12 CheckBox ов). Как Вы и предположили, код увеличился раза в 3.
Изначально ошибочно предположил, что могло сработать что-то типа : frm_vvod.Edit7.Text := (ifnull(no1+','))+(ifnull(no2+','))+(ifnull(no3));...
Добрый день.
Есть заполнение поля Edit текстовыми значениями
procedure frm_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
n1: String;
n2: String;
n3: String;
begin
If frm.CheckBox1.sqlValue then
n1 := SQLExecute ('Select kodn FROM departament where (id = 1)'); // значение А1
If frm.CheckBox2.sqlValue then
n2 := SQLExecute ('Select kodn FROM departament where (id = 2)'); // значение А2
If frm.CheckBox3.sqlValue then
n3 := SQLExecute ('Select kodn FROM departament where (id = 3)'); // значение А3
begin
frm.close
end;
frm_vvod.Edit7.Text := n1+','+n2+','+n3;
end;
При отсутствие установки какого либо CheckBoxa (а следовательно записи переменной) получаем ответ с пропуском переменной и имеем лишнюю запятую. Например при отсутствии CheckBoxa n2
Подскажите пожалуйста как правильно написать подстановку текстового значения frm_vvod.Edit7.Text := no1+','+no2+','+no3; чтобы получить в поле Edit при отсутствии CheckBoxa n2 значение
Окончание аренды домена 29 октября 2022. Осталось 4 месяца.
Константин - k245.
Учитывая тот факт, что Вы являетесь "продолжателем проекта",
думаю, что вам необходимо задуматься о поднятии аналогичного форума с максимально возможным переносом в него информации из текущего. Активным пользователям текущего форума, нужно будет плавно перейти в новый. Тогда текущий проект будет жить и дальше.
Все равно не понятна задача.
Посмотрите данный вариант.
procedure frm_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
if ((frm.ComboBox1.dbItemID = 1) and (frm.edit1.Text <> '10')) then
begin
ShowMessage('Не правильно заполнено поле Edit');
frm.edit1.SetFocus;
Cancel := True;
exit;
end;
end;
Здравствуйте.
Как выяснилось понимал не правильно)
Ваш скрипт работает. Спасибо.
Рабочий вариант с диапазоном дат, который мне был нужен.
procedure FrmOth_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
FrmOth.Button1.dbSQL := ' SELECT login.login, login.FIO, '+
' (SELECT COUNT(*) FROM main WHERE main.id_login = login.id AND (main.data >= {DateTimePicker5} AND main.data <= {DateTimePicker6})) '+
' FROM login '+
' WHERE (login.aktiv = (2)) ';
end;
Добрый день. Спасибо что ответили.
Моя цель выбрать уникальные записи ФИО из таблицы login (login.FIO) с условием login.aktiv = 2 и в вычисляемом столбце t1 посчитать кол-во записей в таблице main.
Если я правильно понимаю, то выбрать из таблицы login не получится.
Поэтому пытаюсь через группировку по id_login.main.
Ответа не последовало. Хотелось бы уточнить. Выборка правильно написана и не хватает ресурсов у сервера?
Или не правильный подход и так делать нельзя?
procedure FrmOth_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
FrmOth.Button1.dbSQL := ' SELECT login.FIO, '+
' (SELECT COUNT(*) FROM main t1 WHERE t1.id_login = main.id_login) '+
' FROM main LEFT OUTER JOIN login ON login.id=main.id_login '+
' WHERE (login.aktiv = 2) '+
' group BY id_login ';
end;
Здравствуйте.
Есть 2 таблицы
1- login; 2-main
Задача выбрать количество записей с группировкой из таблицы main И ОТСЕЧЬ НЕ ДЕЙСТВУЮЩИЕ ЗАПИСИ в связанной таблице login условие WHERE (login.aktiv = 2) .
Рабочий скрипт:
procedure FrmOth_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
FrmOth.Button1.dbSQL := ' SELECT login.FIO, '+
' (SELECT COUNT(*) FROM main t1 WHERE t1.id_login = main.id_login) '+
' FROM main LEFT OUTER JOIN login ON login.id=main.id_login '+
' group BY id_login ';
end;
Если добавляю условие WHERE (login.aktiv = 2) запрос зависает.
procedure FrmOth_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
FrmOth.Button1.dbSQL := ' SELECT login.FIO, '+
' (SELECT COUNT(*) FROM main t1 WHERE t1.id_login = main.id_login) '+
' FROM main LEFT OUTER JOIN login ON login.id=main.id_login '+
' WHERE (login.aktiv = 2) '+
' group BY id_login ';
end;
рабочий вариант
' SELECT sch.id_print, '+
' (SELECT max(sch) from sch t1 where (t1.id_print = sch.id_print) and (t1.id_priznzam = 1)), '+
' (SELECT min(sch) from sch t2 where (t2.id_print = sch.id_print) and (t2.id_priznzam = 1)), '+
' (SELECT ((SELECT max(sch) from sch t1 where (t1.id_print = sch.id_print) and (t1.id_priznzam = 1)) - (SELECT min(sch) from sch t2 where (t2.id_print = sch.id_print) and (t2.id_priznzam = 1))) as t3) '+
' from sch '+
' group BY id_print ';
k245 wrote:Вот только не понятно, что вам даст Group_by...
Спасибо проверю.
Если не ставлю группировку по id_print, выводятся все строки какие есть у данного id_print, только заполняются max (например 200) и min (например 100) значениями
id_print t1 (max) t2(min)
11 200 100
11 200 100
11 200 100
11 200 100
Если ставлю группировку по id_print, выводится по одной строке
id_print t1 (max) t2(min)
11 200 100
Новый вопрос: Как сделать что б в случае пустого combobox на нем всплывало сообщение о том что он обязателен для заполнение, такое же как всплывает над пустым TextBox, обязательным для заполнения. Сейчас при пустом просто вылетает ошибка
Посмотрите
begin
if frm.ComboBox1.dbItemID = -1 then
begin
ShowMessage('Обязательное поле');
frm.ComboBox1.SetFocus;
frm.ComboBox1.DroppedDown := True;
Cancel := True;
end;
Здравствуйте.
Есть кнопка при нажатии на которую выбираются значения в столбцы t1 (Max) и t2 (Min)
frmOth1.Button16.dbSQL := ' SELECT sch.id_print, '+
' (SELECT max(sch) from sch t1 where (t1.id_print = sch.id_print)), '+
' (SELECT min(sch) from sch t2 where (t2.id_print = sch.id_print)) '+
' from sch '+
' group BY id_print ';
Можно ли в данном скрипте провести математические вычисления t3=t1-t2?
Если да, то как это проще сделать?
Спасибо. Понял.
SQLExecute('INSERT INTO test(ee,dateTime)VALUES('''+Form1.DateTimePicker1.sqlDate+''')');
Задал вопрос от безысходности...
Не объявляю переменную. Без var
SQLExecute ('INSERT INTO main (data_1,data_2) VALUES ("'+ FormatDateTime('DD.MM.yyyy', frm_vvod.DateTimePicker1.Date) + '", "'+ FormatDateTime('DD.MM.yyyy', frm_vvod.DateTimePicker2.Date) + '")')
Все тоже самое.
Не трогаю DateTimePicker, чтобы получить пустое поле NULL. Все равно ставится дата - текущая дата.
Добрый день.
Столкнулся с проблемой, а именно не получается записать в таблицу NULL из компонента DateTimePicker при неустановленном Chekbox. Параметр ShowCheckbox = True.
procedure frm_vvod_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
sDate1 : string = FormatDateTime('dd.mm.yyyy',frm_vvod.DateTimePicker1.Date);
sDate2 : string = FormatDateTime('dd.mm.yyyy',frm_vvod.DateTimePicker2.Date);
begin
SQLExecute ('INSERT INTO main (data_1, data_2) VALUES ("'+sDate1+'","'+sDate2+'")');
end;
1)Работаем с DateTimePicker - выбираем из календаря дату. Ставится дата та, которую выбрал. Правильное действие;
2)Не трогаем DateTimePicker - нужно пустое поле NULL. Все равно ставится дата - текущая дата. Не правильное действие - нужно пустое поле NULL.
Поля data_1 и data_2 bvt.имеют текстовый формат
Здравствуйте.
Если в столбце date (frm_stat.tablegrid1.cells[11,]) в поле находится NULL, то процедура не работает - подсвечиваются строки до поля NULL, дальше выполнение скрипта прерывается с ошибкой "" is not valid date Script position ....
Есть способ пропустить поля со значением NULL?
соорудил костыль (выборку where inv is not null), можно как ни будь без него?
procedure Frm_Stat_Button6_OnClick (Sender: TObject; var Cancel: boolean);
begin
Frm_Stat.Button6.dbSQL := ' SELECT * '+
' from svod '+
' where inv is not null ';
end;
procedure Frm_Stat_Button6_OnAfterClick (Sender: TObject);
var vrow, vcolumn: integer;
begin
for vrow := 0 to frm_stat.tablegrid1.RowCount- 1 do
begin
if strtodate(frm_stat.tablegrid1.cells[11,vrow]) < now -30 then
for vcolumn := 0 to frm_stat.tablegrid1.columns.Count -1 do
begin
frm_stat.tablegrid1.cell[vcolumn,vrow].TextColor := clblue;
end;
end;
Petr wrote:добрый день господа!
подскажите как правильно прописать в скрипте условие сравнения текущей даты с заданной?
что то типа: if Date > 27-04-2021 then
спасибо.
if t1.Date > "2021-04-27"
Наверное правильнее не в скрипте указывать конкретную дату, а на форме выбирать из календаря.
procedure form1_Button1_OnClick (Sender: TObject);
begin
if t1.Date > {DateTimePicker1} then ...
Ребята.
Константин.
Огромное спасибо.
То что нужно.
Не представляете сколько различных вариантов я перепробовал...
"Как собака. Понимаю, а написать не могу..."
немножко не то.
Если мы делаем select
select
res.id_print as id
, print.model as name
, res.date as date
, res.res as Res
From res
LEFT OUTER JOIN print ON res.id_print=print.id
WHERE res.id_Priznak = 1
GROUP BY print.model
в поля будут вставлены первые значения из таблицы для значений WHERE res.id_Priznak = 1 с группировкой GROUP BY print.model
МОЯ ЦЕЛЬ:
нужно в таблице выбрать последние строки создать подзапрос, что то типа
MAX(id) FROM res WHERE id_priznak =1
для каждого id_print
Вполне возможно группировка и не нужна???
ЧТО ТО ВРОДЕ ЭТОГО
select
res.id_print as id
, print.model as name
, res.date as date
, res.res as Res
From res
LEFT OUTER JOIN print ON res.id_print=print.id
WHERE (select id FROM res WHERE id_priznak =1)
????? и должно быть условие что id = MAX(ID) FROM res WHERE id_priznak =1 для каждого id_print
Ощущение что нужно создавать временные таблицы
Создал свой неправильный проект.
Нужно вытащить последние записи замены картриджей для всех принтеров
konstantin wrote:Мне нужен вывод с 2-4 знаками после запятой.
Привет. Точно видел обсуждение данного вопроса на форуме когда искал ограничение длины числа MySQL.
Posts found: 1 to 25 of 160