Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2022, 06:42   #1
angel546
 
Регистрация: 31.10.2022
Сообщений: 8
Сообщение Argument out of range

Добрый день. Мне нужна помощь в Делфи. Когда загружаю форму у меня возникает ошибка argument out of range. Что означает? Как ее исправить. Сейчас выложу код и формы.
Код:
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DBGridEhGrouping, ToolCtrlsEh,
  DBGridEhToolCtrls, DynVarsEh, sDBNavigator, EhLibVCL, GridsEh, DBAxisGridsEh,
  DBGridEh, Vcl.ExtCtrls, sPanel, Vcl.StdCtrls, sButton, DBCtrlsEh, Vcl.Mask,
  DBLookupEh, sLabel, Vcl.Buttons, sSpeedButton, Vcl.ImgList, acAlphaImageList,
  sCheckBox;

type
  TForm2 = class(TForm)
    sPanel1: TsPanel;
    DBGridEh1: TDBGridEh;
    sDBNavigator1: TsDBNavigator;
    sLabel1: TsLabel;
    fio1: TDBLookupComboboxEh;
    fio2: TDBLookupComboboxEh;
    perS: TDBDateTimeEditEh;
    perPO: TDBDateTimeEditEh;
    sButton1: TsButton;
    sLabel2: TsLabel;
    sLabel3: TsLabel;
    sLabel4: TsLabel;
    sLabel5: TsLabel;
    podr: TDBComboBoxEh;
    filt: TsSpeedButton;
    sAlphaImageList1: TsAlphaImageList;
    post: TsCheckBox;
    procedure FormCreate(Sender: TObject);
    procedure sButton1Click(Sender: TObject);
    procedure podrChange(Sender: TObject);
    procedure filtClick(Sender: TObject);
    procedure DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation
    uses dm1;
{$R *.dfm}

procedure TForm2.DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
begin
// раскрашиваем
           if  DBGridEh1.DataSource.DataSet.FieldByName('deist').AsVariant =0 then
          DBGridEh1.Canvas.Brush.Color:= clLime;

        DBGridEh1.DefaultDrawColumnCell
          (Rect, DataCol, Column, State);
end;

procedure TForm2.filtClick(Sender: TObject);
begin
dm.zamech.Filtered:=False;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  dm1.DM.zamech.Active:=True;
  dm.Otv.Active:=True;
  dm.free.Active:=False;
  dm.free.SQL.Clear;
  dm.free.SQL.Add('SELECT  cex as otdel FROM Spisok union  SELECT  Cex as otdel  FROM Spisok  where cex <> null ; ') ;
  dm.free.Active:=True;
  podr.Items.Clear;
  while dm.free.Eof=false do
  begin
    podr.Items.Add(dm.free.Fields[0].AsString);
    dm.free.Next;
  end;
end;

procedure TForm2.podrChange(Sender: TObject);
begin
  fio1.ListSource.DataSet.Locate('otdel',podr.Text,[]);
  fio1.Text:=fio1.ListSource.DataSet.Fields[0].AsString;
  fio1.SetFocus
end;

procedure TForm2.sButton1Click(Sender: TObject);
begin

   if podr.Text='' then
     begin
       with CreateMessageDialog('Не указан номер подразделения!', mtError, [mbYes]) do
            try
               Caption := 'Неверные данные для записи';//Изменение заголовка окна
              (FindComponent('Yes') as TButton).Caption := 'Да';//Русификация кнопки "Yes"
              ShowModal;//Вызов диалогового окна в модальном режиме

            finally
              Free;
            end;
        abort
     end;


   if fio1.Text='' then
     begin
       with CreateMessageDialog('Не указана фамилия заменяемого!', mtError, [mbYes]) do
            try
               Caption := 'Неверные данные для записи';//Изменение заголовка окна
              (FindComponent('Yes') as TButton).Caption := 'Да';//Русификация кнопки "Yes"
              ShowModal;//Вызов диалогового окна в модальном режиме

            finally
              Free;
            end;
        abort
     end;

   if fio2.Text='' then
     begin
       with CreateMessageDialog('Не указана фамилия замещающего!', mtError, [mbYes]) do
            try
               Caption := 'Неверные данные для записи';//Изменение заголовка окна
              (FindComponent('Yes') as TButton).Caption := 'Да';//Русификация кнопки "Yes"
              ShowModal;//Вызов диалогового окна в модальном режиме

            finally
              Free;
            end;
        abort
     end;

    if perS.value<>null   and post.Checked=False then
     begin
       with CreateMessageDialog('Не указано начало периода замещения!', mtError, [mbYes]) do
            try
               Caption := 'Неверные данные для записи';//Изменение заголовка окна
              (FindComponent('Yes') as TButton).Caption := 'Да';//Русификация кнопки "Yes"
              ShowModal;//Вызов диалогового окна в модальном режиме

            finally
              Free;
            end;
        abort
     end;

   //записываем данные

  dm.zamech.Insert;
  dm.zamech.Fields[1].AsString:=fio1.Text;
  dm.zamech.Fields[2].AsString:=fio2.Text;
  if perS.Value<>null then
     dm.zamech.Fields[3].AsDateTime:=perS.Value;
  if perpo.Value<>null then
     dm.zamech.Fields[4].AsDateTime:=perpo.Value;
  dm.zamech.Fields[7].AsBoolean:=post.Checked;
  dm.zamech.Fields[5].AsString:=podr.Text;
  dm.zamech.Fields[6].AsBoolean:=True;
  dm.zamech.Post;

 with CreateMessageDialog('Данные записаны!', mtInformation, [mbYes]) do
            try
               Caption := 'Неверные данные для записи';//Изменение заголовка окна
              (FindComponent('Yes') as TButton).Caption := 'Хорошо';//Русификация кнопки "Yes"
              ShowModal;//Вызов диалогового окна в модальном режиме

 finally
   Free;
 end;

end;

end.
Изображения
Тип файла: jpg IMG_20221028_130329_1.jpg (68.0 Кб, 3 просмотров)
Тип файла: jpg IMG_20221028_163357.jpg (70.4 Кб, 4 просмотров)
Тип файла: jpg IMG_20221028_130244_1.jpg (117.0 Кб, 3 просмотров)

Последний раз редактировалось BDA; 31.10.2022 в 08:12.
angel546 вне форума Ответить с цитированием
Старый 31.10.2022, 09:15   #2
rita616
Пользователь
 
Регистрация: 19.12.2019
Сообщений: 69
По умолчанию

Попробуйте поле цикла поставить Break;
Код:
while dm.free.Eof=false do
  begin
    podr.Items.Add(dm.free.Fields[0].AsString);
    dm.free.Next;
  end;
Break;
rita616 вне форума Ответить с цитированием
Старый 31.10.2022, 09:40   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
ошибка argument out of range
out of range -- вне диапазона
вы где-то пытаетесь обратиться к несуществующему элементу списка.
(TCombobox.items)
Цитата:
Код:
    fio1: TDBLookupComboboxEh;
    fio2: TDBLookupComboboxEh;
    podr: TDBComboBoxEh;
    DBGridEh1: TDBGridEh; // при использовании "супер" колонок
dm.zamech.Fields[6] // если число полей НД(dataset) меньше.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 31.10.2022, 09:59   #4
angel546
 
Регистрация: 31.10.2022
Сообщений: 8
По умолчанию

evg_m, как исправить?
angel546 вне форума Ответить с цитированием
Старый 31.10.2022, 10:34   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А у вас точно вот тут нумерация начинается с 1
Код:
  dm.zamech.Fields[1].AsString:=fio1.Text;
  dm.zamech.Fields[2].AsString:=fio2.Text;
  if perS.Value<>null then
     dm.zamech.Fields[3].AsDateTime:=perS.Value;
  if perpo.Value<>null then
     dm.zamech.Fields[4].AsDateTime:=perpo.Value;
  dm.zamech.Fields[7].AsBoolean:=post.Checked;
  dm.zamech.Fields[5].AsString:=podr.Text;
  dm.zamech.Fields[6].AsBoolean:=True;
Скорее всего поля в Fields нумеруются с 0 и поэтому по нажатию на кнопку Применить строка
Код:
  dm.zamech.Fields[7].AsBoolean:=post.Checked;
дает ошибку out of range

Вы можете поставить точку остановки в обработчике кнопки применить: щелкните справа по строке с begin у ее номера и она станет красной. В таком случае при нажатии на кнопку Применить программа остановится и вы сможете пройти этот обработчик по шагам строчка за строчкой (используя клавиши F7 и F8). Так вы сможете увидеть точную строку, которая вызывает ошибку.

Цитата:
Сообщение от angel546 Посмотреть сообщение
Код:
procedure TForm2.podrChange(Sender: TObject);
begin
  fio1.ListSource.DataSet.Locate('otdel',podr.Text,[]);
  fio1.Text:=fio1.ListSource.DataSet.Fields[0].AsString;
  fio1.SetFocus
end;
Вот тут вы например адресуете поля Fields начиная с 0

Последний раз редактировалось macomics; 31.10.2022 в 10:40.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка argument not optional Vlad-y Microsoft Office Excel 2 24.04.2014 12:35
Format '%1' invalid or incompatible with argument Юрий_) Общие вопросы Delphi 12 06.04.2012 13:18
Ошибка Invalid argument StartMis Общие вопросы Delphi 7 24.11.2010 00:35
Format '%1 ' invalid or incompatible with argument ImmortalAlexSan Общие вопросы Delphi 19 30.03.2010 21:15