Topic: значение чекбокс

Как правельно записать скриптом значение чекбокса в поле ДА\НЕТ?

Re: значение чекбокс

vovka3003 wrote:
procedure Form1_CheckBox1_OnClick (Sender: TObject);
begin
  if Form1.CheckBox1.sqlValue = '1' then
  Form1.Edit1.Text := 'Да' else
  Form1.Edit1.Text := 'Нет'
end;

begin
  Form1_CheckBox1_OnClick(nil);
end.

не то, не так спрасил:
мне нужно записать значение чекбокса в базу данных (поле ДА\НЕТ) скриптом

Re: значение чекбокс

Запись значения чекбокса в таблицу <таблица> в поле <поле>

SQLExecute( 'update <таблица> set <поле> = '+ Form1.CheckBox1.sqlValue +' where <условие>' );

<Условие> должно однозначно идентифицировать запись, лучше всего использовать ID, например:

SQLExecute( 'update contractor set customer = '+ Form1.CheckBox1.sqlValue +' where id = '+inttostr(Form1.TableGrid.dbItemId) );

Визуальное программирование: блог и телеграм-канал.

Re: значение чекбокс

k245 wrote:

Запись значения чекбокса в таблицу <таблица> в поле <поле>

SQLExecute( 'update <таблица> set <поле> = '+ Form1.CheckBox1.sqlValue +' where <условие>' );

<Условие> должно однозначно идентифицировать запись, лучше всего использовать ID, например:

SQLExecute( 'update contractor set customer = '+ Form1.CheckBox1.sqlValue +' where id = '+inttostr(Form1.TableGrid.dbItemId) );

нет все равно ошибка

я уже разные способы опробывал и в string и integer переводил
https://downloader.disk.yandex.ru/preview/2b742e870c16e49ed6e952296d17552d1c35357f17299d19fc3d5c769594ad17/5c1ffabc/F_PFGl-iNnOYFqu-31zMdblcA0bXEVFv552foVldlj97f27NnxaRbNPENqJAo7tdfnWPar9Avp6MVoifJpFG1A%3D%3D?uid=0&amp;filename=gfdfhjh.jpg&amp;disposition=inline&amp;hash=&amp;limit=0&amp;content_type=image%2Fjpeg&amp;tknv=v2&amp;size=2048x2048

 procedure frmReceivinOgEquipment_bOkCompany_OnClick (Sender: TObject; var Cancel: boolean);

 var tTypeKC : string = IntToStr(frmReceivinOgEquipment.cbTCK.DbItemID);
     tNameCompany : string = IntToStr(frmReceivinOgEquipment.cbNameCompany.DbItemID);
     tNameTypeOfEquipment : string = IntToStr(frmReceivinOgEquipment.cbNameTypeOfEquipment.DbItemID);
     tNameManufacturer : string = IntToStr(frmReceivinOgEquipment.cbNameManufacturer.DbItemID);
     tDate : string = FormatDateTime('yyyy-mm-dd',frmReceivinOgEquipment.dtDateInServise.DateTime);
     tCompanyOrApp : string = IntToStr(frmReceivinOgEquipment.cbnameclCompanyOrApp.DbItemID);
     tStatusName : string = IntToStr(frmReceivinOgEquipment.cbStatusName.DbItemID);
     tCount : string = frmNewApplication.RecordCount.Text;
     //sOnlyDiagnostic: string = BoolString('frmReceivinOgEquipment.cbOnlyDiagnostic.Checked');
     //sWarranty: string = BoolString('frmReceivinOgEquipment.cbWarranty.Checked');
     //sOnlyDiagnostic, sWarranty:string;
     //sOnlyDiagnostic, sWarranty:integer;
     begin
      //if frmReceivinOgEquipment.cbOnlyDiagnostic.Checked then sOnlyDiagnostic:='1' else sOnlyDiagnostic:='0';
      //if frmReceivinOgEquipment.cbWarranty.Checked then sWarranty:='1' else sWarranty:='0';
      //проверка на заполнение полей
      if (tTypeKC='-1') then ShowHint(frmReceivinOgEquipment.cbTCK, 'данное поле обязательное для заполнения ')else
      if (tDate='-1') then ShowHint(frmReceivinOgEquipment.dtDateInServise, 'данное поле обязательное для заполнения ')else
      if (tNameCompany='-1') then ShowHint(frmReceivinOgEquipment.cbNameCompany, 'данное поле обязательное для заполнения ')else
      if (tNameTypeOfEquipment='-1') then ShowHint(frmReceivinOgEquipment.cbNameTypeOfEquipment, 'данное поле обязательное для заполнения ')else
      if (tNameManufacturer='-1') then ShowHint(frmReceivinOgEquipment.cbNameManufacturer, 'данное поле обязательное для заполнения ')else
      if (frmReceivinOgEquipment.eModel.Text='') then ShowHint(frmReceivinOgEquipment.eModel, 'данное поле обязательное для заполнения ')else
      if (frmReceivinOgEquipment.eSerialNamber.Text='') then ShowHint(frmReceivinOgEquipment.eSerialNamber, 'данное поле обязательное для заполнения ')else
      if (frmReceivinOgEquipment.eEquipment.Text='') then ShowHint(frmReceivinOgEquipment.eEquipment, 'данное поле обязательное для заполнения ')else
      if (frmReceivinOgEquipment.mDescriptionATCsWords.Text='') then ShowHint(frmReceivinOgEquipment.mDescriptionATCsWords, 'данное поле обязательное для заполнения ')else
      if (frmReceivinOgEquipment.mExternalStatus.Text='') then ShowHint(frmReceivinOgEquipment.mExternalStatus, 'данное поле обязательное для заполнения ')else
    begin
      // запись в таблицы базы данных
      SQLExecute('INSERT INTO servise (Warranty, OnlyDiiagnostics, dateInServise, id_status, id_Company, id_TypeOfEquipment, id_manufacturer, model, serialNamber, equipment, externalStatus, descriptionATCsWords, id_clCompanyOrApp, record_count) VALUES ("'+frmReceivinOgEquipment.cbWarranty.sqlValue+'", "'+frmReceivinOgEquipment.cbOnlyDiagnostic.sqlValue+'", "'+tDate+'", "'+tStatusName+'", "'+tNameCompany+'", "'+ tNameTypeOfEquipment + '", "'+tNameManufacturer+'", "'+frmReceivinOgEquipment.eModel.Text+'", "'+frmReceivinOgEquipment.eSerialNamber.Text+ '", "'+frmReceivinOgEquipment.eEquipment.Text+ '", "'+ frmReceivinOgEquipment.mDescriptionATCsWords.Text+ '", "'+ frmReceivinOgEquipment.mExternalStatus.Text+ '", "'+tCompanyOrApp+'", "'+tCount+'")');
      // обновление таблицы данных главной формы
      frmServiceCen.tgList.dbUpdate;
      frmReceivinOgEquipment.RecordCount.Text := IntToStr(GetNewRecordCount('servise'));
      //закрытие формы
      frmReceivinOgEquipment.Close;
  end;
end;

Re: значение чекбокс

У вас какая СУБД? В SQLite  для хранения логического значения используется поле Integer, в этом случае  при передаче значения в тексте запроса кавычки не нужно ставить:

SQLExecute('INSERT INTO servise (Warranty, OnlyDiiagnostics, dateInServise, id_status, id_Company, id_TypeOfEquipment, id_manufacturer, model, serialNamber, equipment, externalStatus, descriptionATCsWords, id_clCompanyOrApp, record_count) VALUES ('+frmReceivinOgEquipment.cbWarranty.sqlValue+', '+frmReceivinOgEquipment.cbOnlyDiagnostic.sqlValue+', "'+tDate+'", "'+tStatusName+'", "'+tNameCompany+'", "'+ tNameTypeOfEquipment + '", "'+tNameManufacturer+'", "'+frmReceivinOgEquipment.eModel.Text+'", "'+frmReceivinOgEquipment.eSerialNamber.Text+ '", "'+frmReceivinOgEquipment.eEquipment.Text+ '", "'+ frmReceivinOgEquipment.mDescriptionATCsWords.Text+ '", "'+ frmReceivinOgEquipment.mExternalStatus.Text+ '", "'+tCompanyOrApp+'", "'+tCount+'")');

P.S. А почему вы не используете стандартные возможности MVD по записи в базу?  Установите в свойствах Action = [СОХРАНИТЬ ЗАПИСЬ], проверки перед записью разместите в OnClick (для прерывания сохранения установите Cancel := true) , а действия после записи - в OnAfterClick.

Визуальное программирование: блог и телеграм-канал.

6 (edited by sibprogsistem 2018-12-23 19:25:21)

Re: значение чекбокс

k245 wrote:

У вас какая СУБД? В SQLite  для хранения логического значения используется поле Integer

integer не принимает хоть с ковычками хоть без
https://downloader.disk.yandex.ru/preview/846dbe58e185ae2c3f48064aea87d44bc568ad1dc0fc936b970760d4a1c7679b/5c2006a1/lgoWOqOxPKvu-jrwKdf-ipmI8mQQ7KwQiAaN6cy3uqUyibIADnEEN7BR446bc1RYfwDOzBN5UBaPpDZ5aef85Q%3D%3D?uid=0&amp;filename=intgerno.jpg&amp;disposition=inline&amp;hash=&amp;limit=0&amp;content_type=image%2Fjpeg&amp;tknv=v2&amp;size=2048x2048
 
string принимает и даже записывает в базу, но тут же выдает ошибку
 
https://3.downloader.disk.yandex.ru/preview/dd11d50e6c34f0acc97ba05539d41132bf23d10f0ff6f62d6c256c72801c4aaa/inf/QgoGVNytx9bepU7FCcD6wZrvpvo8TOa1Os0mQbmx2j5VT1VWDlOIgTLcq6EEr43DbXVwkImrQy-TovTym5USJQ%3D%3D?uid=118806873&amp;filename=www.jpg&amp;disposition=inline&amp;hash=&amp;limit=0&amp;content_type=image%2Fjpeg&amp;tknv=v2&amp;size=1316x606

7 (edited by sibprogsistem 2018-12-24 15:56:37)

Re: значение чекбокс

вот так все работает

procedure Form1_Button3_OnClick (Sender: TObject; var Cancel: boolean);
var
s: string = BoolToStr(form1.CheckBox3.Checked);
begin
  SQLEXecute('INSERT INTO c (c) VALUES ("'+s+'")');
end

но только в отдельном проекте
если применяю у себя то получаю ошибку
при этом в таблице записи создаются

Дмитрий помогите

 procedure frmReceivinOgEquipment_bOkCompany_OnClick (Sender: TObject; var Cancel: boolean);

 var tTypeKC : string = IntToStr(frmReceivinOgEquipment.cbTCK.DbItemID);
     tNameCompany : string = IntToStr(frmReceivinOgEquipment.cbNameCompany.DbItemID);
     tNameTypeOfEquipment : string = IntToStr(frmReceivinOgEquipment.cbNameTypeOfEquipment.DbItemID);
     tNameManufacturer : string = IntToStr(frmReceivinOgEquipment.cbNameManufacturer.DbItemID);
     tDate : string = FormatDateTime('yyyy-mm-dd',frmReceivinOgEquipment.dtDateInServise.DateTime);
     tCompanyOrApp : string = IntToStr(frmReceivinOgEquipment.cbnameclCompanyOrApp.DbItemID);
     tStatusName : string = IntToStr(frmReceivinOgEquipment.cbStatusName.DbItemID);
     tCount : string = frmNewApplication.RecordCount.Text;
     sOnlyDiagnostic: string = BoolToStr(frmReceivinOgEquipment.cbOnlyDiagnostic.Checked);
     sWarranty: string = BoolToStr(frmReceivinOgEquipment.cbWarranty.Checked);
     begin
      //проверка на заполнение полей
      if (tTypeKC='-1') then ShowHint(frmReceivinOgEquipment.cbTCK, 'данное поле обязательное для заполнения ')else
      if (tDate='-1') then ShowHint(frmReceivinOgEquipment.dtDateInServise, 'данное поле обязательное для заполнения ')else
      if (tNameCompany='-1') then ShowHint(frmReceivinOgEquipment.cbNameCompany, 'данное поле обязательное для заполнения ')else
      if (tNameTypeOfEquipment='-1') then ShowHint(frmReceivinOgEquipment.cbNameTypeOfEquipment, 'данное поле обязательное для заполнения ')else
      if (tNameManufacturer='-1') then ShowHint(frmReceivinOgEquipment.cbNameManufacturer, 'данное поле обязательное для заполнения ')else
      if (frmReceivinOgEquipment.eModel.Text='') then ShowHint(frmReceivinOgEquipment.eModel, 'данное поле обязательное для заполнения ')else
      if (frmReceivinOgEquipment.eSerialNamber.Text='') then ShowHint(frmReceivinOgEquipment.eSerialNamber, 'данное поле обязательное для заполнения ')else
      if (frmReceivinOgEquipment.eEquipment.Text='') then ShowHint(frmReceivinOgEquipment.eEquipment, 'данное поле обязательное для заполнения ')else
      if (frmReceivinOgEquipment.mDescriptionATCsWords.Text='') then ShowHint(frmReceivinOgEquipment.mDescriptionATCsWords, 'данное поле обязательное для заполнения ')else
      if (frmReceivinOgEquipment.mExternalStatus.Text='') then ShowHint(frmReceivinOgEquipment.mExternalStatus, 'данное поле обязательное для заполнения ')else
    begin
      // запись в таблицы базы данных
      SQLExecute('INSERT INTO servise (dateInServise, id_status, id_Company, id_TypeOfEquipment, id_manufacturer, model, serialNamber, equipment, externalStatus, descriptionATCsWords, id_clCompanyOrApp, record_count, Warranty, OnlyDiiagnostics) VALUES ("'+tDate+'", "'+tStatusName+'", "'+tNameCompany+'", "'+ tNameTypeOfEquipment + '", "'+tNameManufacturer+'", "'+frmReceivinOgEquipment.eModel.Text+'", "'+frmReceivinOgEquipment.eSerialNamber.Text+ '", "'+frmReceivinOgEquipment.eEquipment.Text+ '", "'+ frmReceivinOgEquipment.mDescriptionATCsWords.Text+ '", "'+ frmReceivinOgEquipment.mExternalStatus.Text+ '", "'+tCompanyOrApp+'", "'+tCount+'", "'+sWarranty+'", "'+sOnlyDiagnostic+'")');
      // обновление таблицы данных главной формы
      frmServiceCen.tgList.dbUpdate;
      frmReceivinOgEquipment.RecordCount.Text := IntToStr(GetNewRecordCount('servise'));
      //закрытие формы
      frmReceivinOgEquipment.Close;
  end;
end;

в чем причина?

Re: значение чекбокс

все ))) нашел проблему - запись счетчика нарушил....  резервные копии рулят )))