sparrow wrote:

Дату лучше приводить к виду в котором она хранится в MYSQL.

Я пыталась.

Если компонент не учавствует в поиске его всегда можно проанализировать и в запросе CASE WHEN ваше компонент = -1 THEN 1 ELSE ваше компонент END

Над этим нужно подумать smile

sparrow wrote:

Давайте вернемся назад
А скажите какая нужда отправлять в мемо а оттуда в SQL запрос?

Потому что нужно было передавать изменяющееся условие в кнопку SQL-запроса. И не всегда DateTimePicker1 и/или  ComboBox4 участвовал/-и в запросе. А так условие было гибким. Memo (Edit кстати я тоже пробовала - эффект был тем же. Ошибка) позволял отрабатывать разные условия вывода в таблицу. Говорю же, без даты всё отлично работает. А момент передачи даты в запрос из Memo сопровождается спецсимволами, которые MySQL не интерпретирует как корректные.

Ваше же предложение прописать всё в процедуре решило проблему.

sparrow wrote:

Как выход из положения вы можете пойти путем через скрипт.

Спасибо большое! Получилось.

При смене даты процедура

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-запрос
https://i.postimg.cc/SstcP9MG/Image2.jpg

Ошибка
https://i.postimg.cc/jSQPbmf2/Image5.jpg

Показать запрос
https://i.postimg.cc/1tTNBZkC/Image6.jpg

Здравствуйте.
Поле Memo состоит из нескольких условий, которые передаются в запрос. Когда нет параметра даты, всё работает ОК. С датой - ошибка. Появляются непонятные символы слэш \

В чем может быть причина? Подскажите, пожалуйста.

vedom_view.Memo1.Text:= ' id_year='+IntToStr(idYear)+ ' AND DATE_FORMAT(dEk,"%d.%m.%Y")="'+DateToStr(vedom_view.DateTimePicker1.Date)+'"';
sparrow wrote:

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 sad и формируется пустой отчёт.
Подскажите, пожалуйста, "свежим" взглядом - что не так.

8

(4 replies, posted in Reports)

Большое спасибо!

9

(4 replies, posted in Reports)

Отчет формирую скриптом:

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

10

(4 replies, posted in Reports)

Здравствуйте. Можно ли "подавить" вывод SQL-отчета на экран, если он выводится в файл в зависимости от типа по CheckBox (например, PDF/RTF/XLS)? С выводом в файл проблем нет.

11

(9 replies, posted in Russian)

Структура формы

https://b.radikal.host/2022/12/28/Image2.jpg

12

(9 replies, posted in Russian)

Можно только через Edit над гридом.

Я делала так
https://b.radikal.host/2022/12/28/Image1.jpg

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! cool

brian.zaballa wrote:

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;

Можно, конечно, объединить  все условия в одну строку, но я оставила для наглядности.
На скрине результат отработки скрипта во всех случаях

https://b.radikal.host/2022/12/15/Image1512-1.jpg

Если поле просто меняется (корректируется), по всё ОК. Если поле было пустое и заполняется значением, то нет sad

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;

Не могу найти причину..

k245 wrote:

Это "особенность" работы FastReport в MVDB - dataset Report присутствует всегда, даже если данные передаются программно. Отсюда следствие - передаваемые датасеты не должны называться "Report"  smile

Спасибо! Буду знать smile

Спасибо. Это многотабличный отчет, т.е. выборка идет из разных таблиц и результаты попадают в один отчет. Я так понимаю. У меня же выборка гораздо проще. Из одной таблицы - ekzamens. Каждой кнопке  - своя ведомость (свой скрипт). И всё равно, чтобы нормально работало, UserName желательно давать разный (выяснено методом научного тыка).

adiziktdy wrote:

Дать ему другое имя пользователя?

Изменила

   ReportMM.UserName        := 'Report';

на

    ReportMM.UserName        := 'Report1';

Откорректировала шаблон. И вуаля - ошибок нет yikes

У меня в памяти оба отчета почему-то sad

Когда ручками выбираю второй, то всё ОК

https://a.radikal.host/2022/12/08/Image4_.jpg
https://a.radikal.host/2022/12/08/Image5_.jpg

Дать ему другое имя пользователя? Странно... У меня все отчёты идут под именем Report и всё работает. Да ещё шаблон придётся править ((((

pavlenko.vladimir.v wrote:

Попробуйте присвоить им пустые значения

Не помогло.
Скрин 1 - выборка по SQL

Скрин 2 - Data Fastreport остались из предыдущего запроса

Скрин 3 - ошибки (нет соответствующих полей)


https://a.radikal.host/2022/12/08/Image3.md.jpg
https://a.radikal.host/2022/12/08/Image2.jpg
https://a.radikal.host/2022/12/08/Image1.md.jpg

Приветствую.

Подскажите, в чём может быть проблема?
На одной форме кнопка типа "Отчет 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;

Вот эта процедура выполняется без ошибки только в первый раз. Когда зашёл в программу. Как я понимаю - память чиста. А после выполнения другого отчёта (на другой форме) идут ошибки.
Где-то нарушена последовательность команд?

Заранее спасибо за ответ.

sparrow wrote:

Вот где у вас ошибки


вот так правильно


Form1.TableGrid1.dbSQL:= ...
Form1.TableGrid1.dbListFieldsNames := ...
dogovor.TableGrid1.dbSQLExecute;

И пихайте себе запрос в таблицу. Никто не запрещает.


P.S. И маленький вопрос. UNION это хорошо. Если у вас это конечная таблица для вывода и не предполагается редактирование
данных по этой таблице это одно.
Но если предполагается, то скажите, где вы получите номера записей (id) из разных таблиц для редактирования записей ???
Конечно возможен выход по номеру абитуриента получать id записи из одной или другой таблицы.


Возможно лучше если бы таблица была одна с признаком восстановлен или постоянен. Устраняется много проблем.

Спасибо!

Таблица не для редактирования. Для сбора информации о введенных абитуриентах/студентах, подавших заявление о восстановлении на учёбу и передачи её в другую таблицу (договора об обучении).

Спасибо!

10 минут назад наткнулась на это в "Справке" smile

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