Дату лучше приводить к виду в котором она хранится в MYSQL.
Я пыталась.
Если компонент не учавствует в поиске его всегда можно проанализировать и в запросе CASE WHEN ваше компонент = -1 THEN 1 ELSE ваше компонент END
Над этим нужно подумать
My Visual Database → Posts by adiziktdy
Дату лучше приводить к виду в котором она хранится в MYSQL.
Я пыталась.
Если компонент не учавствует в поиске его всегда можно проанализировать и в запросе CASE WHEN ваше компонент = -1 THEN 1 ELSE ваше компонент END
Над этим нужно подумать
Давайте вернемся назад
А скажите какая нужда отправлять в мемо а оттуда в SQL запрос?
Потому что нужно было передавать изменяющееся условие в кнопку SQL-запроса. И не всегда DateTimePicker1 и/или ComboBox4 участвовал/-и в запросе. А так условие было гибким. Memo (Edit кстати я тоже пробовала - эффект был тем же. Ошибка) позволял отрабатывать разные условия вывода в таблицу. Говорю же, без даты всё отлично работает. А момент передачи даты в запрос из Memo сопровождается спецсимволами, которые MySQL не интерпретирует как корректные.
Ваше же предложение прописать всё в процедуре решило проблему.
Как выход из положения вы можете пойти путем через скрипт.
Спасибо большое! Получилось.
При смене даты процедура
procedure vedom_view_DateTimePicker1_OnChange (Sender: TObject);
begin
if vedom_view.ComboBox4.dbItemID <> - 1 then
uslovie:= ' id_year='+IntToStr(idYear)+ ' AND id_typeEk='+IntToStr(vedom_view.ComboBox4.dbItemID)+ ' AND DATE_FORMAT(`dEk`,"%d.%m.%Y"'+')="'+DateToStr(vedom_view.DateTimePicker1.Date)+'"'
else
uslovie:= ' `id_year`='+IntToStr(idYear)+ ' AND DATE_FORMAT(`dEk`,"%d.%m.%Y"'+')="'+DateToStr(vedom_view.DateTimePicker1.Date)+'"';
vedom_view.Memo1.Text:=uslovie;
vedom_view.Button19.Click;
end;
Далее по кнопке Button19 SQL-запрос
Ошибка
Показать запрос
Здравствуйте.
Поле Memo состоит из нескольких условий, которые передаются в запрос. Когда нет параметра даты, всё работает ОК. С датой - ошибка. Появляются непонятные символы слэш \
В чем может быть причина? Подскажите, пожалуйста.
vedom_view.Memo1.Text:= ' id_year='+IntToStr(idYear)+ ' AND DATE_FORMAT(dEk,"%d.%m.%Y")="'+DateToStr(vedom_view.DateTimePicker1.Date)+'"';
Cancel := True;
Спасибо!
Обычно именно такие мелкие ошибки доставляют кучу хлопот.
procedure statistika_Button15_OnClick (Sender: TObject; var Cancel: boolean);
var
name_ispitan: string;
begin
if statistika.ComboBox13.dbItemID = -1 then
begin
Cancel;
MessageBox('Выберите вид испытания для формирования списка','ОШИБКА',MB_ICONERROR);
name_ispitan:='НЕ ВЫБРАНО';
statistika.ComboBox13.SetFocus;
end
else begin
name_ispitan:=SQLExecute('SELECT nameRod FROM typeEk WHERE id='+IntToStr(statistika.ComboBox13.dbItemID));
Main1.frxReport.Clear;
Main1.frxReport.Variables.Clear;
Main1.frxReport.Variables['Components']:=Null;
Main1.frxReport.Variables['nazvanie']:=''''+name_ispitan+'''';
end;
end;
Здравствуйте. Что-то совсем непонятное делается... Не разберусь где прокол.
После нажатия кнопки Button15 анализирую условие, чтобы был сделан выбор по ComboBox13. Если нет, прерываю процедуру, если да, идёт формирование списка (отчет по SQL-скрипту).
А у меня всё равно цикл не прерывается, если statistika.ComboBox13.dbItemID = -1 и формируется пустой отчёт.
Подскажите, пожалуйста, "свежим" взглядом - что не так.
Отчет формирую скриптом:
procedure balans (Sender: TObject; var Cancel: boolean);
var
frxDBDataset1,frxDBDataset2: TfrxDBDataset;
ResultO, ResultZ: TDataSet;
strokaO,strokaZ, L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12: string;
sFile, sDest, pahtOtch,nameF: string;
begin
pathOtch:='D:\MySQL_Balans\_Otchet';
monthN:=SQLEXecute('SELECT month.nMonth FROM memory LEFT JOIN month ON memory.id_month=month.id');
god:=SQLEXecute('SELECT spr_year.year FROM memory LEFT JOIN spr_year ON memory.id_spr_year=spr_year.id');
//ShowMessage(monthN);
//ShowMessage(god);
Menu.frxReport.Variables.Clear;
Menu.frxReport.Variables['Components']:=Null;
Menu.frxReport.Variables['IdMes']:=mes;
Menu.frxReport.Variables['IdYear']:=year;
Menu.frxReport.Variables['MesText']:=''''+monthN+'''';
Menu.frxReport.Variables['YearText']:=''''+god+'''';
L1:='SELECT DISTINCT filiali.nfilial,klass.nKlass AS nKlass,balans.id_klass AS id_klass,balans.nSubs AS nSubs,balans.ODebNm AS ODebNm,balans.OKreNm AS OKreNm,balans.ObD AS ObD,balans.ObK AS ObK,';
L2:='balans.ODebKm AS ODebKm,balans.OKreKm AS OKreKm,balans.grup1 AS grup1,balans.grup2 AS grup2,balans.grup4 AS grup4,balans.grup5 AS grup5,balans.grup3 AS grup3,balans.npp AS npp,';
L3:='balans.klass_npp AS klass_npp,gruppa1_.uroven1 AS uroven1,gruppa2_.uroven2 AS uroven2,';
L4:='gruppa4_.uroven4 AS uroven4,gruppa5_.uroven5 AS uroven5,gruppa3_.uroven3 AS uroven3,gruppa6_.uroven6 AS uroven6, month.nMonth,spr_year.year FROM balans';
L5:=' LEFT OUTER JOIN klass ON balans.id_klass=klass.id LEFT OUTER JOIN sub_schet ON balans.nSubs = sub_schet.nSubs ';
L6:=' LEFT OUTER JOIN gruppa1_ ON gruppa1_.id=sub_schet.id_gruppa1_ LEFT OUTER JOIN gruppa2_ ON gruppa2_.id=sub_schet.id_gruppa2_ ';
L7:=' LEFT OUTER JOIN gruppa3_ ON gruppa3_.id=sub_schet.id_gruppa3_ LEFT OUTER JOIN gruppa4_ ON gruppa4_.id=sub_schet.id_gruppa4_ ';
L8:=' LEFT OUTER JOIN gruppa5_ ON gruppa5_.id=sub_schet.id_gruppa5_ LEFT OUTER JOIN gruppa6_ ON gruppa6_.id=sub_schet.id_gruppa6_ ';
L9:=' LEFT OUTER JOIN filiali ON filiali.id = sub_schet.id_filiali LEFT OUTER JOIN spr_year ON spr_year.id = balans.id_spr_year LEFT OUTER JOIN month ON month.id = balans.id_month ';
L10:=' WHERE sub_schet.isActual=1 and sub_schet.isDelete=0 and gruppa6_.uroven6=1 '; //основной баланс
L12:=' WHERE sub_schet.isActual=1 and sub_schet.isDelete=0 and sub_schet.id_gruppa6_ IS NULL '; //забаланс
L11:=' ORDER BY gruppa1_.uroven1 ASC, klass.npp ASC, sub_schet.npp ASC, gruppa2_.uroven2 ASC, gruppa4_.uroven4 ASC, gruppa5_.uroven5 ASC';
strokaO:=L1+L2+L3+L4+L5+L6+L7+L8+L9+L10+L11;
strokaZ:=L1+L2+L3+L4+L5+L6+L7+L8+L9+L12+L11;
SQLQuery(strokaO, ResultO);
SQLQuery(strokaZ, ResultZ);
frxDBDataset1 := TfrxDBDataset.Create(Menu);
frxDBDataset1.UserName := 'ResultO';
frxDBDataset1.CloseDataSource := True;
frxDBDataset1.OpenDataSource := True;
frxDBDataset1.DataSet := ResultO;
frxDBDataset2 := TfrxDBDataset.Create(Menu);
frxDBDataset2.UserName := 'ResulZ';
frxDBDataset2.CloseDataSource := True;
frxDBDataset2.OpenDataSource := True;
frxDBDataset2.DataSet := ResultZ;
Menu.frxReport.Clear;
Menu.frxReport.DataSets.Clear;
Menu.frxReport.DataSets.Add(frxDBDataset1);
Menu.frxReport.DataSets.Add(frxDBDataset2);
if mes<10 then
begin
sDest:=pathOtch+'\0'+IntToStr(mes)+'\';
end
else begin
sDest:=pathOtch+'\'+IntToStr(mes)+'\';
end;
if ForceDirectories(sDest) then
begin
Menu.frxReport.LoadFromFile('Report\balans4.fr3');
Menu.frxReport.PrepareReport;
// Menu.frxReport.DesignReport;
// Menu.frxReport.ShowReport;
if print_otch.CheckBox1.Checked = True then
begin
nameF:=sDest+'Баланс за '+monthN+' '+god+'.pdf';
ExportFilter(Menu.frxPDFExport1, nameF); //перенаправление вывода отчета в PDF
sFile:=Menu.frxPDFExport1.Filename;
end;
if print_otch.CheckBox2.Checked = True then
begin
nameF:=sDest+'Баланс за '+monthN+' '+god+'.doc';
ExportFilter(Menu.frxRTFExport1, nameF); //перенаправление вывода отчета в Word
sFile:=Menu.frxRTFExport1.Filename;
end;
if print_otch.CheckBox3.Checked = True then
begin
nameF:=sDest+'Баланс за '+monthN+' '+god+'.xls';
ExportFilter(Menu.frxXLSExport1, nameF); //перенаправление вывода отчета в XLS
end;
if print_otch.CheckBox4.Checked = True then vivod:='';
CopyFile(sFile, nameF);
// OpenFile(nameF);
ShowMessage('Файл "'+nameF);
DeleteFile(sFile);
end;
frxDBDataset1.DataSet.Close;
frxDBDataset2.DataSet.Close;
frxDBDataset1.Free;
frxDBDataset2.Free;
end;
В результате формируется необходимый файл и на экран выдается временный файл temp
Здравствуйте. Можно ли "подавить" вывод SQL-отчета на экран, если он выводится в файл в зависимости от типа по CheckBox (например, PDF/RTF/XLS)? С выводом в файл проблем нет.
Можно только через Edit над гридом.
Я делала так
to brian.zaballa
That's great! It's works, with a slight correction in the trigger condition:
CREATE DEFINER=`********`@`%` TRIGGER `pk_adi`.`edit_anketa_napravl_spec` AFTER UPDATE ON pk_adi.anketa FOR EACH ROW
BEGIN
Set @var_napravl_spec1 = Old.napravl_spec;
IF @var_napravl_spec1 IS NULL then Set @var_napravl_spec1 = 'пусто'; End If;
Set @var_napravl_spec2 = New.napravl_spec;
IF @var_napravl_spec2 IS NULL then Set @var_napravl_spec2 = 'пусто'; End If;
Set @fi= (SELECT CONCAT(fullname," ",name) FROM anketa WHERE id=Old.id);
set @idU = New.id_users1;
set @nKart = Old.n_abit;
IF (new.napravl_spec <=> old.napravl_spec)=0 then
INSERT INTO log_extend VALUES(NULL,@idU,SYSDATE(),CONCAT("изменение поля <<специальность документа об образовании>> в № карточки ",@nKart," ",@fi,". Было: ",@var_napravl_spec1,", стало: ",@var_napravl_spec2));
End if;
END;
Results:
16.12.2022 09:35:23 изменение поля <<специальность документа об образовании>> в № карточки 66666666 Полякова Елена. Было: TEST2, стало: TEST1
16.12.2022 09:35:55 изменение поля <<специальность документа об образовании>> в № карточки 66666666 Полякова Елена. Было: TEST1, стало: пусто
16.12.2022 09:36:46 изменение поля <<специальность документа об образовании>> в № карточки 66666666 Полякова Елена. Было: пусто, стало: TEST3
Thanks a lot!
Nice. It seems you got the solution then.
You can also try the condition <=>
Sorry, I don't speak Russian so I have to use G.Translate first.
Thank you very much. I also use Yandex Translator because I speak a little English. Tomorrow I will try your version and report the results.
Решение состоит в том, чтобы описать все случаи при сравнении Old и New значений
CREATE DEFINER=`******`@`%` TRIGGER `pk_adi`.`edit_anketa_napravl_spec` AFTER UPDATE ON pk_adi.anketa FOR EACH ROW
BEGIN
Set @var_napravl_spec1 = Old.napravl_spec;
IF @var_napravl_spec1 IS NULL then Set @var_napravl_spec1 = 'пусто'; End If;
Set @var_napravl_spec2 = New.napravl_spec;
IF @var_napravl_spec2 IS NULL then Set @var_napravl_spec2 = 'пусто'; End If;
Set @fi= (SELECT CONCAT(fullname," ",name) FROM anketa WHERE id=Old.id);
set @idU = New.id_users1;
set @nKart = Old.n_abit;
IF (old.napravl_spec != new.napravl_spec) then //когда поле изменяет свое значение, например, 11 на 22
INSERT INTO log_extend VALUES(NULL,@idU,SYSDATE(),CONCAT("изменение поля <<специальность документа об образовании>> в № карточки ",@nKart," ",@fi,". Было: ",@var_napravl_spec1,", стало: ",@var_napravl_spec2));
End if;
IF ((old.napravl_spec is null ) AND (new.napravl_spec is not null)) then //когда поле было пустым и принимает значение 11
INSERT INTO log_extend VALUES(NULL,@idU,SYSDATE(),CONCAT("изменение поля <<специальность документа об образовании>> в № карточки ",@nKart," ",@fi,". Было: ",@var_napravl_spec1,", стало: ",@var_napravl_spec2));
End if;
IF ((new.napravl_spec is null) AND (old.napravl_spec is not null)) then //когда у поля было значение 22 и стало пустым
INSERT INTO log_extend VALUES(NULL,@idU,SYSDATE(),CONCAT("изменение поля <<специальность документа об образовании>> в № карточки ",@nKart," ",@fi,". Было: ",@var_napravl_spec1,", стало: ",@var_napravl_spec2));
End if;
END;
Можно, конечно, объединить все условия в одну строку, но я оставила для наглядности.
На скрине результат отработки скрипта во всех случаях
Если поле просто меняется (корректируется), по всё ОК. Если поле было пустое и заполняется значением, то нет
CREATE DEFINER=`********`@`%` TRIGGER `pk_adi`.`edit_anketa_napravl_spec` AFTER UPDATE ON pk_adi.anketa FOR EACH ROW
BEGIN
Set @var_napravl_spec1 = Old.napravl_spec;
IF Old.napravl_spec IS NULL then Set @var_napravl_spec1 = 'пусто'; End If;
Set @var_napravl_spec2 = New.napravl_spec;
IF New.napravl_spec IS NULL then Set @var_napravl_spec2 = 'пусто'; End If;
Set @fi= (SELECT CONCAT(fullname," ",name) FROM anketa WHERE id=Old.id);
set @idU = New.id_users1;
set @nKart = New.n_abit;
SET @d_oper = (select Date_Format(now(),'%Y-%m-%d %H:%i:%S') FROM dual);
IF New.napravl_spec != Old.napravl_spec then
INSERT INTO log_extend VALUES(NULL,@idU,@d_oper,CONCAT("изменение поля <<специальность документа об образовании>> в № карточки ",@nKart," ",@fi,". Было: ",@var_napravl_spec1,", стало: ",@var_napravl_spec2));
End if;
END;
Не могу найти причину..
Это "особенность" работы FastReport в MVDB - dataset Report присутствует всегда, даже если данные передаются программно. Отсюда следствие - передаваемые датасеты не должны называться "Report"
Спасибо! Буду знать
Спасибо. Это многотабличный отчет, т.е. выборка идет из разных таблиц и результаты попадают в один отчет. Я так понимаю. У меня же выборка гораздо проще. Из одной таблицы - ekzamens. Каждой кнопке - своя ведомость (свой скрипт). И всё равно, чтобы нормально работало, UserName желательно давать разный (выяснено методом научного тыка).
Дать ему другое имя пользователя?
Изменила
ReportMM.UserName := 'Report';
на
ReportMM.UserName := 'Report1';
Откорректировала шаблон. И вуаля - ошибок нет
Приветствую.
Подскажите, в чём может быть проблема?
На одной форме кнопка типа "Отчет SQL". На событие OnAfterClick "повешена" процедура очистки памяти.
procedure ClearMemoryReport (Sender: TObject);
begin
Main1.frxReport.Clear;
Main1.frxReport.DataSets.Clear;
Main1.frxReport.Variables.Clear;
end;
Здесь нет ошибок.
Когда я перехожу на другую форму, там есть кнопка с выполнением отчета через скрипт:
procedure vedom_view_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
ReportMM: TfrxDBDataset;
ResultMM: TDataSet;
S1,S2,S3,SQitog: string;
predPr,pr1,pr2,pr3,predEn,en1,en2,en3,predFr,fr1,fr2,fr3,predNe,ne1,ne2,ne3: string;
begin
if ((vedom_view.CheckBox1.Checked = False) AND (vedom_view.CheckBox2.Checked = False) AND (vedom_view.CheckBox3.Checked = False) AND (vedom_view.CheckBox4.Checked = False)) OR (vedom_view.ComboBox1.dbItemID = -1) then
begin
MessageBox('Не выбран один из критериев отбора','',MB_ICONINFORMATION);
Cancel:=True;
end
else begin
predPr:=SQLEXecute('SELECT predPr FROM ekz_komiss');
pr1:=SQLEXecute('SELECT pr1 FROM ekz_komiss');
pr2:=SQLEXecute('SELECT pr2 FROM ekz_komiss');
pr3:=SQLEXecute('SELECT pr3 FROM ekz_komiss');
predEn:=SQLEXecute('SELECT predEn FROM ekz_komiss');
en1:=SQLEXecute('SELECT en1 FROM ekz_komiss');
en2:=SQLEXecute('SELECT en2 FROM ekz_komiss');
en3:=SQLEXecute('SELECT en3 FROM ekz_komiss');
predFr:=SQLEXecute('SELECT predFr FROM ekz_komiss');
fr1:=SQLEXecute('SELECT fr1 FROM ekz_komiss');
fr2:=SQLEXecute('SELECT fr2 FROM ekz_komiss');
fr3:=SQLEXecute('SELECT fr3 FROM ekz_komiss');
predNe:=SQLEXecute('SELECT predNe FROM ekz_komiss');
ne1:=SQLEXecute('SELECT ne1 FROM ekz_komiss');
ne2:=SQLEXecute('SELECT ne2 FROM ekz_komiss');
ne3:=SQLEXecute('SELECT ne3 FROM ekz_komiss');
S1:='SELECT ekzamens.n_abit, ekzamens.fullname, ekzamens.name, ekzamens.fath, ekzamens.id_type_ekzamen, ekzamens.gia, language.name_lang, ekzamens.inostr_ball,spec.short, sprspec.nSpec, ekzamens.id_language FROM ((pk_adi.spec spec INNER JOIN pk_adi.sprspec sprspec ON (spec.id_sprSpec = sprspec.id)) ';
S2:='LEFT OUTER JOIN pk_adi.ekzamens ekzamens ON (ekzamens.id_spec = spec.id)) LEFT OUTER JOIN pk_adi.language language ON (ekzamens.id_language = language.id) ';
S3:='WHERE '+vedom_view.Memo1.Text+' AND (ekzamens.gia=0 OR ekzamens.inostr_ball=0)';
SQitog:=S1+S2+S3;
SQLQuery(SQitog,ResultMM);
ReportMM:= TfrxDBDataset.Create(Main1);
ReportMM.UserName := 'Report';
ReportMM.CloseDataSource := True;
ReportMM.OpenDataSource := True;
ReportMM.DataSet := ResultMM;
Main1.frxReport.Clear;
Main1.frxReport.DataSets.Clear;
Main1.frxReport.DataSets.Add(ReportMM);
ReportMM.DataSet.Close;
Main1.frxReport.Variables.Clear;
Main1.frxReport.Variables['Components']:=Null;
Main1.frxReport.Variables['predPr']:=''''+predPr+'''';
Main1.frxReport.Variables['pr1']:=''''+pr1+'''';
Main1.frxReport.Variables['pr2']:=''''+pr2+'''';
Main1.frxReport.Variables['pr3']:=''''+pr3+'''';
Main1.frxReport.Variables['predEn']:=''''+predEn+'''';
Main1.frxReport.Variables['en1']:=''''+en1+'''';
Main1.frxReport.Variables['en2']:=''''+en2+'''';
Main1.frxReport.Variables['en3']:=''''+en3+'''';
Main1.frxReport.Variables['predFr']:=''''+predFr+'''';
Main1.frxReport.Variables['fr1']:=''''+fr1+'''';
Main1.frxReport.Variables['fr2']:=''''+fr2+'''';
Main1.frxReport.Variables['fr3']:=''''+fr3+'''';
Main1.frxReport.Variables['predNe']:=''''+predNe+'''';
Main1.frxReport.Variables['ne1']:=''''+ne1+'''';
Main1.frxReport.Variables['ne2']:=''''+ne2+'''';
Main1.frxReport.Variables['ne3']:=''''+ne3+'''';
showmessage(SQitog);
Main1.frxReport.LoadFromFile(ExtractFilePath(Application.ExeName)+'\Report\magVedEkz.fr3');
// Main1.frxReport.PrepareReport();
// Main1.frxReport.ShowReport;
// Main1.frxReport.DesignReport; //дизайнер открыть
ExportFilter(Main1.frxRTFExport1, ExtractFilePath(Application.ExeName)+'\Report\magVedEkz.fr3'); //перенаправление вывода отчета в
ResultMM.Free;
ReportMM.Free;
end;
end;
Вот эта процедура выполняется без ошибки только в первый раз. Когда зашёл в программу. Как я понимаю - память чиста. А после выполнения другого отчёта (на другой форме) идут ошибки.
Где-то нарушена последовательность команд?
Заранее спасибо за ответ.
Вот где у вас ошибки
вот так правильно
Form1.TableGrid1.dbSQL:= ... Form1.TableGrid1.dbListFieldsNames := ... dogovor.TableGrid1.dbSQLExecute;
И пихайте себе запрос в таблицу. Никто не запрещает.
P.S. И маленький вопрос. UNION это хорошо. Если у вас это конечная таблица для вывода и не предполагается редактирование
данных по этой таблице это одно.
Но если предполагается, то скажите, где вы получите номера записей (id) из разных таблиц для редактирования записей ???
Конечно возможен выход по номеру абитуриента получать id записи из одной или другой таблицы.Возможно лучше если бы таблица была одна с признаком восстановлен или постоянен. Устраняется много проблем.
Спасибо!
Таблица не для редактирования. Для сбора информации о введенных абитуриентах/студентах, подавших заявление о восстановлении на учёбу и передачи её в другую таблицу (договора об обучении).
Спасибо!
10 минут назад наткнулась на это в "Справке"
http://myvisualdatabase.com/help_ru/but … query.html
Вроде бы что-то вырисовывается.
procedure dogovor_OnShow (Sender: TObject; Action: string);
var
s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s20,s21,s22,s23,s24,s25,s26,s27,s28,s29, addTable: string;
begin
dogovor.PageControl1.ActivePageIndex:=0;
s1:='set @N = 0; ';
s2:='SELECT @N := @N + 1 AS number, (case when length(anketa.n_abit)=1 then CONCAT("00000",anketa.n_abit," ",anketa.fullname," ",anketa.name," ",anketa.fath) ';
s3:=' when length(anketa.n_abit)=2 then CONCAT("0000",anketa.n_abit," ",anketa.fullname," ",anketa.name," ",anketa.fath) ';
s4:=' when length(anketa.n_abit)=3 then CONCAT("000",anketa.n_abit," ",anketa.fullname," ",anketa.name," ",anketa.fath) ';
s5:=' when length(anketa.n_abit)=4 then CONCAT("00",anketa.n_abit," ",anketa.fullname," ",anketa.name," ",anketa.fath) ';
s6:=' when length(anketa.n_abit)=5 then CONCAT("0",anketa.n_abit," ",anketa.fullname," ",anketa.name," ",anketa.fath) ';
s7:=' else CONCAT(anketa.n_abit," ",anketa.fullname," ",anketa.name," ",anketa.fath) ';
s8:='end) as nom_fio, n_abit, fullname, name, fath , fakult.shortF, fo.name_fo, prioritet.nPrioritet, sprspec.nSpec, spec.short, spec2.short AS short_2, spec3.short AS short_3, dop.name_dop, anketa.vid_dop ';
s9:='FROM pk_adi.anketa anketa LEFT JOIN fakult ON anketa.id_fakult = fakult.id ';
s10:='LEFT JOIN fo ON anketa.id_fo = fo.id ';
s11:='LEFT JOIN prioritet ON anketa.id_prioritet = prioritet.id ';
s12:='LEFT JOIN sprspec ON sprspec.id = anketa.id_sprSpec ';
s13:='LEFT JOIN spec ON anketa.id_spec = spec.id ';
s14:='LEFT JOIN spec2 ON anketa.id_spec2 = spec2.id ';
s15:='LEFT JOIN spec3 ON anketa.id_spec3 = spec3.id ';
s16:='LEFT JOIN dop ON anketa.id_dop = dop.id ';
s17:='UNION ';
s18:='SELECT @N := @N + 1 AS number, (case when length(vosstanov.nDela)=1 then CONCAT("00000",vosstanov.nDela," ",vosstanov.fullname," ",vosstanov.name," ",vosstanov.fath) ';
s19:=' when length(vosstanov.nDela)=2 then CONCAT("0000",vosstanov.nDela," ",vosstanov.fullname," ",vosstanov.name," ",vosstanov.fath) ';
s20:=' when length(vosstanov.nDela)=3 then CONCAT("000",vosstanov.nDela," ",vosstanov.fullname," ",vosstanov.name," ",vosstanov.fath) ';
s21:=' when length(vosstanov.nDela)=4 then CONCAT("00",vosstanov.nDela," ",vosstanov.fullname," ",vosstanov.name," ",vosstanov.fath) ';
s22:=' when length(vosstanov.nDela)=5 then CONCAT("0",vosstanov.nDela," ",vosstanov.fullname," ",vosstanov.name," ",vosstanov.fath) ';
s23:=' else CONCAT(vosstanov.nDela," ",vosstanov.fullname," ",vosstanov.name," ",vosstanov.fath) ';
s24:='end) as nom_fio, nDela AS n_abit, fullname, name, fath, fakult.shortF, fo.name_fo, null AS nPrioritet, sprspec.nSpec, spec.short, NULL AS short_2, NULL AS short_3, dop.name_dop , vosstanov.name_dop ';
s25:='FROM pk_adi.vosstanov LEFT JOIN fakult ON fakult.id = vosstanov.id_fakult ';
s26:='LEFT JOIN fo ON vosstanov.id_fo = fo.id ';
s27:='LEFT JOIN sprspec ON sprspec.id = vosstanov.id_sprSpec ';
s28:='LEFT JOIN spec ON vosstanov.id_spec = spec.id ';
s29:='LEFT JOIN dop ON vosstanov.id_dop = dop.id ;';
addTable:=s1+s2+s3+s4+s5+s6+s7+s8+s9+s10+s11+s12+s13+s14+s15+s16+s17+s18+s19+s20+s21+s22+s23+s24+s25+s26+s27+s28+s29;
dogovor.TableGrid1.dbSQL(addTable);
dogovor.TableGrid1.dbGeneralTable := 'anketa';
dogovor.TableGrid1.dbListFieldsNames('#,nom_fio,n_abit,fullname,name,fath,shortF,name_fo,nPrioritet,nSpec,short,short_2,short_3,name_dop,vid_dop');
dogovor.TableGrid1.dbSQLExecute();
end;
Скрипт заполнения содержимым специально разбит на составляющие, чтобы визуально видеть разные таблицы, так как структура их отличается.
Ошибка 'Too many actual parameters' возникает на строке dogovor.TableGrid1.dbSQL(addTable);
Сам запрос отрабатывает на ура (см. вложение).
https://dropmefiles.com/MG2At
Помогите, пожалуйста, разобраться в чём ошибка..
П.С. база данных MySQL
My Visual Database → Posts by adiziktdy
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi