Topic: Не сохранить текст вида ООО "ОГОНЬ"

Дмитрий подскажите пожалуйста, в чём проблема. Пытаюсь сохранить клиента с наименованием в скобках, типа "Вася", не даёт. Без скобок всё нормально?!

Post's attachments

Attachment icon скар.png 188.29 kb, 285 downloads since 2017-09-11 

надо идти вперёд....

Re: Не сохранить текст вида ООО "ОГОНЬ"

Приложите пожалуйста проект, так к сожалению не ясна причина.

Dmitry.

Re: Не сохранить текст вида ООО "ОГОНЬ"

DriveSoft wrote:

Приложите пожалуйста проект, так к сожалению не ясна причина.

Отправил вам на почту. Спасибо.

надо идти вперёд....

Re: Не сохранить текст вида ООО "ОГОНЬ"

поправьте данные участки скрипта

//Клиенты
 procedure frmAddClient_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
    if CheckDublicate('NewRecord', 'client', 'name', frmAddClient.edName.sqlValue, frmAddClient.Button1.dbGeneralTableId) then
     begin
          frmAddClient.Button12.Click;
     end else
     begin
         frmAddClient.Button10.Click;
     end;
end;


// запрет на дублирование записей
function CheckDublicate (Action, sTable, sField, sValue: string; id: integer;): boolean;
var
   s: string;
begin
     result := False;
     if Action = 'NewRecord' then
     begin
          s := SQLExecute ('SELECT Count(*) FROM '+sTable+' WHERE '+sField+' LIKE ' + sValue);
          if StrToInt(s) > 0 then result := True;
     end;
end;

 procedure frmAddClient_btLogSave_OnClick (Sender: string; var Cancel: boolean);
begin
  if frmAddClient.chNewClient.Checked then
    begin
    //Логирование// при создании нового клиента
     sCurrentDate := '"' + FormatDateTime('yyyy-MM-DD hh:nn', now) + '"';
     sUserName   := '"'+ sUser +'"';
     sOperation := '"Создан новый клиент"';
     sUserPC  := '"'+ GetUserName +'"';
     sClientName  := frmAddClient.edName.sqlValue;
     SQLExecute ('INSERT INTO users_logs (UserPC, datetimeEvent, operation, login, ClientName) VALUES('+sUserPC+',' +sCurrentDate+','+sOperation+','+sUserName+','+sClientName+')');

    end;
    if frmAddClient.chUpdateClient.Checked then
    begin
    //Логирование// при редактировании клиента
     sCurrentDate := '"' + FormatDateTime('yyyy-MM-DD hh:nn', now) + '"';
     sUserName   := '"'+ sUser +'"';
     sOperation := '"Данные по клиенту отредактированы"';
     sUserPC  := '"'+ GetUserName +'"';
     sClientName  := frmAddClient.edName.sqlValue;
     sOldClientName  := frmAddClient.edOldClientName.sqlValue;
     SQLExecute ('INSERT INTO users_logs (UserPC, datetimeEvent, operation, login, ClientName, OldClientName) VALUES('+sUserPC+',' +sCurrentDate+','+sOperation+','+sUserName+','+sClientName+','+sOldClientName+')');

    end;
end;

основная ошибка в том, что вы берете текст с компонента для SQL запроса со свойства Text

 frmAddClient.edName.Text

а нужно

 frmAddClient.edName.sqlValue

скорей всего в других участках скрипта присутствуют подобные ошибки.

Dmitry.

Re: Не сохранить текст вида ООО "ОГОНЬ"

DriveSoft wrote:

поправьте данные участки скрипта

//Клиенты
 procedure frmAddClient_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
    if CheckDublicate('NewRecord', 'client', 'name', frmAddClient.edName.sqlValue, frmAddClient.Button1.dbGeneralTableId) then
     begin
          frmAddClient.Button12.Click;
     end else
     begin
         frmAddClient.Button10.Click;
     end;
end;


// запрет на дублирование записей
function CheckDublicate (Action, sTable, sField, sValue: string; id: integer;): boolean;
var
   s: string;
begin
     result := False;
     if Action = 'NewRecord' then
     begin
          s := SQLExecute ('SELECT Count(*) FROM '+sTable+' WHERE '+sField+' LIKE ' + sValue);
          if StrToInt(s) > 0 then result := True;
     end;
end;

 procedure frmAddClient_btLogSave_OnClick (Sender: string; var Cancel: boolean);
begin
  if frmAddClient.chNewClient.Checked then
    begin
    //Логирование// при создании нового клиента
     sCurrentDate := '"' + FormatDateTime('yyyy-MM-DD hh:nn', now) + '"';
     sUserName   := '"'+ sUser +'"';
     sOperation := '"Создан новый клиент"';
     sUserPC  := '"'+ GetUserName +'"';
     sClientName  := frmAddClient.edName.sqlValue;
     SQLExecute ('INSERT INTO users_logs (UserPC, datetimeEvent, operation, login, ClientName) VALUES('+sUserPC+',' +sCurrentDate+','+sOperation+','+sUserName+','+sClientName+')');

    end;
    if frmAddClient.chUpdateClient.Checked then
    begin
    //Логирование// при редактировании клиента
     sCurrentDate := '"' + FormatDateTime('yyyy-MM-DD hh:nn', now) + '"';
     sUserName   := '"'+ sUser +'"';
     sOperation := '"Данные по клиенту отредактированы"';
     sUserPC  := '"'+ GetUserName +'"';
     sClientName  := frmAddClient.edName.sqlValue;
     sOldClientName  := frmAddClient.edOldClientName.sqlValue;
     SQLExecute ('INSERT INTO users_logs (UserPC, datetimeEvent, operation, login, ClientName, OldClientName) VALUES('+sUserPC+',' +sCurrentDate+','+sOperation+','+sUserName+','+sClientName+','+sOldClientName+')');

    end;
end;

основная ошибка в том, что вы берете текст с компонента для SQL запроса со свойства Text

 frmAddClient.edName.Text

а нужно

 frmAddClient.edName.sqlValue

скорей всего в других участках скрипта присутствуют подобные ошибки.

Спасибо. Т.е мне надо в скриптах изменить Text на sqlValue, а это никак не повлияет на остальную структуру? Или эта замена актуальна только для конкретных скриптов?

надо идти вперёд....

Re: Не сохранить текст вида ООО "ОГОНЬ"

kovalenko
Нужно заменить Text на sqlValue там, где значение компонента используется в SQL запросах.

Dmitry.

Re: Не сохранить текст вида ООО "ОГОНЬ"

DriveSoft wrote:

kovalenko
Нужно заменить Text на sqlValue там, где значение компонента используется в SQL запросах.

Огромное спасибо!!! Всё заработало!!!

надо идти вперёд....