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 3 of 7)
Здравствуйте.
Не могу понять в чем дело. Программа ругается именно на синтаксис...
Action Sql запрос Button2
select distinct b.vhod_data, c.sprav_zapros, a.data, a.numer
from sprav a
join zapros b on a.id_zapros=b.id
join sprav_zapros c on a.id_sprav_zapros=c.id
where b.id = '+ intToStr(idzapr)
Ругается на '+ intToStr(idzapr)
idzapr: integer; глобальная
на форме по другой кнопке Button1 запись проходит (переменная в памяти) рабочий скрипт
SQLExecute('INSERT INTO sprav (id_zapros) VALUES (''' +IntToStr(idzapr)+''')');
Понял. Учту.
Попутный вопрос.
Можно ли при сохранении в таблицу zapros (нажатие Button3) очистить какое ни будь обязательное поле на форме Form_Main (допустим Edit1). Хочу сделать защиту (от дурака) на двойное сохранение записи.
получается что этот скрипт не сработал
if Form_Main.dbAction = 'NewRecord' then Form_Main.Tag := 1 else Form_Main.Tag := 0;
как у Вас открывается форма
через открыть форму или новая запись?
Через "Показать форму"...
Спасибо.
Похоже на баг в программе...
Работают все варианты включая и Ваш после того как закомментировал строки:
// begin
// if Form_Main.Tag = 1 then
мне нужно записать в переменную id.zapros (id записи из таблицы Zapros, которая сохраняется при нажатии кнопки сохранить Button3).
procedure Form_Main_Button3_OnClick (Sender: TObject; var Cancel: boolean);
begin
if Form_Main.dbAction = 'NewRecord' then Form_Main.Tag := 1 else Form_Main.Tag := 0;
end;
procedure Form_Main_Button3_OnAfterClick (Sender: TObject);
var
zaprNewID: string;
begin
if Form_Main.Tag = 1 then
begin
zaprNewID := SQLExecute('SELECT( id????) from zapros where id=' + IntToStr(Form_Main.Button3.dbGeneralTableId));
end;
end;
Добрый день.
Button3 сохраняет в таблицу zapros запись. Пробовал в различных вариантах. Один раз даже захватил id записи, но предварительно была ошибка - программа ругалась на id.
procedure Form_Main_Button3_OnClick (Sender: TObject; var Cancel: boolean);
begin
if Form_Main.dbAction = 'NewRecord' then Form_Main.Tag := 1 else Form_Main.Tag := 0;
end;
procedure Form_Main_Button3_OnAfterClick (Sender: TObject);
var
// zaprNewID: string;
zaprNewID:integer;
begin
if Form_Main.Tag = 1 then
begin
// zaprNewID := SQLExecute('SELECT id.zapros =' + IntToStr(Form_Main.Button3.dbGeneralTableId));
// zaprNewID := SQLExecute('SELECT count(id) FROM Zapros WHERE (id= ''' + IntToStr(Form_Main.Button3.dbGeneralTableID) + ''')');
zaprNewID := Form_Main.Button3.dbGeneralTableId;
ShowMessage (zaprNewID);
end;
end;
sibprogsistem спасибо.
До Вашего ответа подобрал рабочий код
procedure Form_Main_ComboBox5_OnChange (Sender: TObject);
begin
if Form_Main.ComboBox5.dbItemID <> 5 then form_Main.Edit6.Visible := False
else if Form_Main.ComboBox5.dbItemID = 5 then form_Main.Edit6.Visible := True;
if Form_Main.ComboBox5.dbItemID <> 5 then form_Main.Label20.Visible := False
else if Form_Main.ComboBox5.dbItemID = 5 then form_Main.Label20.Visible := True;
end;
Какой из вариантов правильнее использовать? для программы есть ли разница?
Подскажите как спрятать по условию два объекта.
Работает:
procedure Form_Main_ComboBox5_OnChange (Sender: TObject);
begin
if Form_Main.ComboBox5.dbItemID <> 5 then form_Main.Edit6.Visible := False
else if Form_Main.ComboBox5.dbItemID = 5 then form_Main.Edit6.Visible := True
end;
Нужно что-то подобное:
procedure Form_Main_ComboBox5_OnChange (Sender: TObject);
begin
if Form_Main.ComboBox5.dbItemID <> 5 then form_Main.Edit6.Visible := False and form_Main.Label20.Visible := False
else if Form_Main.ComboBox5.dbItemID = 5 then form_Main.Edit6.Visible := True and form_Main.Label20.Visible := True
end;
Здравствуйте.
Наткнулся на следующее:
После перевода поля в тип поля BIGINT длинные значения в таблицу записываются,
не вытаскивается в TableGrid длинное значение - 0101040001777, но без проблем заполняется короткое - 01040001777.
Здравствуйте.
Возможно ли в PageControl скрыть TabSheet?
if (not isAdmin) then FrmOrg.PageControl1.TabSheet3.Visible:=False;
Спасибо.
Нашел ошибку.
frmOth1.Button11.dbSQL := ' SELECT mod_print.name, '+
' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 2 AND t1.id_departament= '+ IntToStr(idDepartament) +'), '+
' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 3 AND t1.id_departament= '+ IntToStr(idDepartament) +'), '+
' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 4 AND t1.id_departament= '+ IntToStr(idDepartament) +') '+
' FROM res LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print '+
' group BY id_mod_print ORDER by id_Priznzam '+
Добрый день.
procedure FrmOth1_Button11_OnClick (Sender: TObject; var Cancel: boolean);
begin
if (not isAdmin) and (not isAdminFKU) and (idDepartament<>0)then
frmOth1.Button11.dbSQL := ' SELECT mod_print.name, '+
' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 2 where t1.id_departament= '+ IntToStr(idDepartament) +'), '+
' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 3 where t1.id_departament= '+ IntToStr(idDepartament) +'), '+
' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 4 where t1.id_departament= '+ IntToStr(idDepartament) +') '+
' FROM res LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print '+
' group BY id_mod_print ORDER by id_Priznzam '+
ELSE
frmOth1.Button11.dbSQL := ' SELECT mod_print.name, '+
' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 2), '+
' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 3), '+
' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 4) '+
' FROM res LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print '+
' group BY id_mod_print ORDER by id_Priznzam ';
end;
вторая часть скрипта после ELSE отрабатывает.
Первая часть дает ошибку синтаксиса
frmOth1.Button11.dbSQL := ' SELECT mod_print.name, '+
' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 2 where t1.id_departament= '+ IntToStr(idDepartament) +'), '+
' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 3 where t1.id_departament= '+ IntToStr(idDepartament) +'), '+
' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 4 where t1.id_departament= '+ IntToStr(idDepartament) +') '+
' FROM res LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print '+
' group BY id_mod_print ORDER by id_Priznzam '+
Спасибо Дмитрий.
Но это не совсем то, что хотелось бы увидеть.
Сейчас заполняется одно поле (count *)по условию OR ...
А хотелось бы, если возможно в Гриде получить 3 столбца: id,количество1,количество2 где:
количество1 =
SELECT mod_print.name, count(*)
FROM res
LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print
WHERE id_Priznzam = 1
group by id_mod_print
а количество1 =
SELECT mod_print.name, count(*)
FROM res
LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print
WHERE id_Priznzam = 2
group by id_mod_print
В случае если у принтера mod_print.name есть запись для id_Priznzam = 1 но нет записи для id_Priznzam = 2, то в столбце количество2 ставится '0' и наоборот
Как в примере
id |количество1|количество2
HP1200 | 7 | 0
HP1100 | 0 | 2
Canon800 | 4 | 8
Здравствуйте.
Можно ли вывести в один Грид два SQL запроса.
Чтобы при нажатии кнопки formOth_printDisplay.Button9
Выводились столбцы: Name,Priznzam_1,Priznzam_2
Или правильнее делать через вычисляемые поля?
Если запросы для вывода в Грид можно объединить, то очень хотелось бы увидеть как это делается.
Сейчас есть отдельные SQL запросы.
1. Название столбцов: Name,Priznzam_1
formOth_printDisplay.Button7.dbSQL := ' SELECT mod_print.name, count(*) '+
' FROM res '+
' LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print '+
' WHERE (id_Priznzam = 1) '+
' group by id_mod_print';
2. Название столбцов: Name,Priznzam_2
formOth_printDisplay.Button8.dbSQL := ' SELECT mod_print.name, count(*) '+
' FROM res '+
' LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print '+
' WHERE (id_Priznzam = 2) '+
' group by id_mod_print';
Здравствуйте.
Вылетает при выполнении скрипта
procedure formOth_printDisplay_Button7_OnClick (Sender: TObject; Action: string);
begin
formOth_printDisplay.Button7.dbSQL := ' SELECT id_mod_print, count(*) '+
' FROM res '+
' LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print '+
' group by id_mod_print ';
formOth_printDisplay.Button7.Click;
end;
В тоже время SQL запрос в этой кнопке отрабатывает
SELECT id_mod_print, count(*)
FROM res
LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print
group by id_mod_print
+ IntToStr()+ - Тут Вы переводите из числового в строковое
+ StrToInt()+ Тут Вы переводите из строкового в числовое
Integer - целые числа
String - строковая переменная
Спасибо. Вкурил в чем проблема.
Вопрос закрыт. Правильное написание
if (id_priznzam = '1') then SQLExecute ('INSERT INTO res (res_max, id_mod_print) VALUES(' + IntToStr(pok_max)+', ''' +idmodprint+ ''')')
Как правильно написать оператор StrToInt ?
if (id_priznzam = '1') then SQLExecute ('INSERT INTO res (res_max, id_mod_print) VALUES(' + IntToStr(pok_max)+', ' + StrToInt(idmodprint)+')')
Здравствуйте.
Подскажите как правильно написать
procedure Form1_Button11_OnClick (Sender: TObject; var Cancel: boolean);
begin
formOth.Button6.dbSQL := ' if (not isAdmin) '+
' then '+
' SELECT id_mod_print, mod_print.name, count(*) '+
' FROM print '+
' LEFT OUTER JOIN mod_print ON mod_print.id=print.id_mod_print '+
' WHERE id_departament='+IntToStr(idDepartament) +
' group by id_mod_print '+
' ELSE '+
' SELECT id_mod_print, mod_print.name, count(*) '+
' FROM print '+
' LEFT OUTER JOIN mod_print ON mod_print.id=print.id_mod_print '+
' group by id_mod_print ';
formOth.Button6.Click;
end;
По отдельности SELECTы работают, как только добавляю IF, THEN, ELSE - ошибка синтаксиса
Здравствуйте.
Так как приходится постоянно входить в ПО для проверки правильности работы нововведений.
На форме frm.Login после ввода пароля в поле frm.Login.edPassword приходится мышкой кликать на кнопку frm.Login.Button1 ("Войти").
Если честно, уже начал дергаться глаз от этого, вроде бы безобидного действия....
Может быть у кого ни будь есть процедура, которая только после заполнения поля паролем при нажатии на ENTER клавиатуры запускало действие кнопки frm.Login.Button1 ("Войти").
Пробовал
procedure frmLogin_edPassword_OnEnter (Sender: TObject);
begin
frmLogin.Button1.Click
end;
но это не то. как только курсор попадает в поле frm.Login.edPassword сразу же и один раз отрабатывает frmLogin.Button1.Click с уведомление, что не правильно введен пароль...
sibprogsistem wrote:Вроди так
if (not isAdmin) then FrmSch.TableGrid1.dbFilter:='(id_rab= "1") AND (id_departament= "'+IntToStr(idDepartament)+'")';
Спасибо работает.
sibprogsistem wrote:если фильтр указываете скриптом , то фильтр указанный в настройках грида не работает (его перекрывает скрипт)
Спасибо.
Тогда как можно выйти из положения?
Должно быть что-то типа
if (not isAdmin) then FrmSch.TableGrid1.dbFilter := ((print.id_rab = '1') and 'id_departament='+IntToStr(idDepartament));
Сам понимаю что страный скрипт и скорее всего нужно делать по другому...
В FrmSch.TableGrid1 есть столбец print.id_rab
Здравствуйте.
Выявилась проблема. Заключается в следующем:
Если заходит Администратор, то фильтр TableGrid1
чудесно отрабатывает.
Если заходит пользователь с правами своего департамента
if (not isAdmin) then FrmSch.TableGrid1.dbFilter := 'id_departament='+IntToStr(idDepartament);
то тот же фильтр на TableGrid1 не работает
Спасибо работатет. Только к idprint надо добавить условие b.id_rab =1
' where b.id = '+ IntToStr(idprint) +' and (b.id_rab =1) ';
Для того, чтобы убрать "не нужные" принтера в Grid-ах стандартной фильтрации достаточно.
Но не знаю, как убрать из Grida принтера id_rab<>1, заполненного Join-ом
idPrint := formOth_printDisplay.TableGrid1.dbItemID;
FrmOth.Button3.dbSQL := 'select distinct с.name, b.kab, a.sch, a.data, '+
' from sch a '+
' join print b on a.id_print=b.id '+
' join mod_print с on b.id_mod_print=d.id '+
' where b.id = '+ IntToStr(idprint) +
' order by a.data DESC';
FrmOth.Button3.Click;
Posts found: 51 to 75 of 160