Fix generate Insert SQL instruction. Copying result lines based on a template.

1. При некоторых настройках при генерации Insert инструкций, пустые строки заменялись на null.
   Этот коммит исправлет проблему.
2. Результаты запросов можно оформить произвольным образом используя шаблоны указанные в однострочных
   коментариях.
   Формат шаблона: --@gen:Имя шаблона в контестном меню результата:Тут текст шаблона - cols = @colname@,@colname2,a@\n
   Для добавлнения перевода строк в вывод можно использовать \n.
   Коментарии указывается в теле запроса (можно указать перед запросом).
   Можно указать строку из которой нужно сделать выбрать содержимое:
       @colname[-1]@ - содержимое колонки colname предыдущей строки(относительная адресация).
       @colname[0]@  - содержимое колонки colname 1 строки (или выделенного диапазона строк).
                       Адресация с начинается с 0. Это абсолютная адресация строк.
       @colname2,a@  - Указание что результат нужно будет выровнять.
                       Флаг "а" глобальный его можно указать у любой колонки.
       Флаги указываются в самом конце определения колонки после запятой. Пример: @col1[-1],a@

   Если перечень имен колонок запроса не совпадает со списком полей шаблона то шаблон не будет добавлен
   в контекстное меню Generate.
   Полученный текст копируется в буфер обмена.
   При генерации текста используются настройки "Вид кавычек" и "Что брать в кавычки".
   Шаблоны сохраняются перед выполнением SQL команды и после редактирования шаблона
   запрос нужно выполнить повторно.
This commit is contained in:
lsv 2026-01-14 17:17:08 +05:00
parent 087ad55c34
commit a8ddbc4999
8 changed files with 235 additions and 10 deletions

View file

@ -34,7 +34,6 @@ public:
}
int CopyTableToHtml(wxString htmlquery);
int Copy(int gensql);
virtual bool CheckRowPresent(int row)
{
return true;
@ -62,7 +61,7 @@ public:
wxString GetRowLabelValue(int row);
void SetRowGroup(int row);
GroupRows* grp;
int generatesql; // 0 -<EFBFBD><EFBFBD><EFBFBD>, 1 - insert , 2 - in_list
int generatesql; // 0 -copy, 1 - insert , 2 - in_list, 3 - where list
wxString sqlquerytext;
// Fast searh
wxString searchStr;

View file

@ -52,6 +52,8 @@ public:
wxString AutoColsPlot(int flags,frmQuery *parent);
wxString CheckSelColumnDate();
wxString CopySelColumnNameType(bool onlyname);
wxString GenerateTemplate(wxString &templ,int action);
void ClearFilter();
bool IsColText(int col);
bool hasRowNumber()
@ -95,6 +97,7 @@ public:
sqlResultTable();
wxString GetValue(int row, int col);
wxString GetValueFast(int row, int col);
wxString GetValueWithNull(int row, int col, bool *isnull);
wxString GetRowLabelValue( int row ) ;
int GetNumberRows();
int GetNumberCols();

View file

@ -127,6 +127,7 @@ private:
ctlAuiNotebook *outputPane;
wxString outputPaneInfo;
ctlSQLResult *sqlResult;
wxArrayString body_template,title_template; // @gen:title menu:body generator @column_name@ end
#define MAX_RESULT_COUNT 10
ctlSQLResult *ctlSQL[MAX_RESULT_COUNT];
ctlSQLBox *ctlSBox[MAX_RESULT_COUNT];
@ -220,6 +221,7 @@ private:
void OnCopy_InList(wxCommandEvent& event);
void OnCopy_WhereList(wxCommandEvent& event);
void OnCopy_TableToHtml(wxCommandEvent& ev);
void OnGenerateTemplate(wxCommandEvent& ev);
void OnClear_Filter(wxCommandEvent &event);
void OnCopy_NameTypeCols(wxCommandEvent& ev);
void OnCheck_Column_Date(wxCommandEvent& ev);
@ -288,6 +290,7 @@ private:
void OnAutoEditObject(wxCommandEvent &event);
void SetEOLModeDisplay(int mode);
void OnMacroInvoke(wxCommandEvent &event);
void OnGenerateInvoke(wxCommandEvent &event);
void OnMacroManage(wxCommandEvent &event);
void OnAutoReplaceManage(wxCommandEvent &event);
void LoadQueries();

View file

@ -166,8 +166,8 @@ enum
// This is a dummy menu item
MNU_DUMMY = QUERY_COMPLETE + 1000,
//Menu Test
MNU_GENERATESQL
//Menu Generate
MNU_GENERATESQL = MNU_DUMMY + 200
};
#endif