Перейти к содержанию
  • Регистрация
  • 0
Roma77751

"Column index 1 out of bound" но не все так просто как может показаться...Нужна помощь или совет...

Вопрос

Доброго времени суток друзья! Выручайте пишу на форум исключительно в случае крайней необходимости, когда свои силы и энтузиазм на исходе. В общем постараюсь вкратце объяснить суть проблемы. Для начала,  имеется

-студия версии 10.3(Rio)

-Виртуальный мак на Mojave 10.14.4   с   XCode 10.1

-Iphone 5S  IOs 12.2

-Проект написанный для ios,android. Под андроидом проблем нет. Под Ios  сначала собирал на Эль капитане со студией 10.2.3, проблем на устройстве с программой не помню,(кажется не было). Под симулятором сейчас проверяю на капитане со студией 10.2.3 все отлично! НО столкнулся с тем что Эпл требует свежий СДК, а это тянет за собой свежий Xcode тот за собой свежую ОС, а студию 10.2.3 я не смог довести до ума(там проблемы с Pa сервером) чтобы она работала корректно с Mojave, патчил-не помогло. Так я пришел к тому что сейчас имею. 

procedure TTabbedForm.ListView1ItemClick(const Sender: TObject;
  const AItem: TListViewItem);
begin
try
with fdquery2 do begin
 sql.Clear;
sql.Add('SELECT "Наименование","Цена","Количество","Сумма","Фото","id" FROM "'+TListViewItem(ListView1.Selected).Text+'" where "Наличие"<>"0" ORDER BY "Наименование"');
  openorexecute;
  end;
 Except
 On E:exception do showmessage(e.Message);
 end;
         sg1.Columns[1].Header:='Цена (тг)';
         sg1.Columns[2].Header:='Кол-во (шт)';
         sg1.Columns[3].Visible:=false;
         sg1.Columns[4].Visible:=false;
         sg1.Columns[5].Visible:=false;
 		 sg1.Columns[0].Width:=tabbedform.Width/2;
 		 sg1.Columns[1].Width:=tabbedform.Width/4;
 	     sg1.Columns[2].Width:=tabbedform.Width/4;
  	search.Text:='Поиск товара';
    search.FontColor:=TAlphaColors.Silver;
    search.Visible:=true;
SG1.Visible:=true;
button1.Visible:=true;

end;
//при клике на Листвьюитем в стрингрид отображаются данные с запроса.Стринггрид законнектен с fdquery2 через visual bind.(если вдруг это важно)

 если кликнуть на Листвьюитем увидим мозговыносящую ошибку "Column index 1 out of bound". Причем может появиться после 1, 2 или 3 таких манипуляций. Напомню что проект с этим кодом собранный под симулятор на Элькапитане со студией 10.2.3 и под андроид работает отлично! Подскажите ребят или совет дайте....

 

Изменено пользователем Roma77751

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

Поставил Xcode 10.2 SDK 12.2 подумал может в этом дело. Эффекта нет. Тоже самое. Ребят очень нужна помощь... Кстати с SDK 12.2 заработал дебаггер, вот ошибка 

First chance exception at $0000000101C00400. Exception class EArgumentOutOfRangeException with message 'Column index, 1, out of bounds'. Process Project1 (272) 

---Ошибку ловит при клике на листвьюитем. Причем ставил showmessage после begin. вылетает сначала ошибка, потом шоумессадж. 

---При первом клике стринггрид отображается корректно. При последующих возникают 2 лишних столбца  по названию дублирующих последний столбец(без данных-только header). При этом sg1.columncount пишет 6. то есть эти столбцы в расчет не берет.После выполнения листвьюитемклик в конце процедуры sg1.columncount пишет равно 0...(я ставил шоумессаджи) но не всегда, то 6 то 0... когда 6 ошибки не наблюдал, когда 0 через раз ошибка, но может и связи нет.... может это просто рандом. 

Изменено пользователем Roma77751

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

есть еще некоторые процедуры с участием fdquery2 и стринггрид. но они не активны при этих манипуляциях. или может быть косяк там а отражаться тут? я уже даже не знаю... написал, на ведроид залетело со свистом...все работает... с айфоном вечный геморрой...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Не видя полной картины трудно понять.

А почему 

TListViewItem(ListView1.Selected).Text

а не

AItem.Text
Изменено пользователем OnePeople

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
59 минут назад, OnePeople сказал:

 

А почему 


TListViewItem(ListView1.Selected).Text

а не


AItem.Text

да так буде попроще) но проблемы это не решает....блин все уже перепробовал... 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, Roma77751 сказал:

да так буде попроще) но проблемы это не решает....блин все уже перепробовал... 

Я так думаю проблема тут в 

visual bind

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, OnePeople сказал:

Я так думаю проблема тут в 


visual bind

я тоже подозреваю, такое чувство что после нескольких манипуляций стринггрид  теряет данные с датасорс... пытался сделать костыль, пока безуспешно... Сейчас косяк не появляется достаточно долго, однако все равно появляется. Сделал так:

SG1.Visible:=true; //вынес на первое место, так как нормальные идеи уже кончились..
//Однако теперь при ошибке грид появляется и появляется пустой... 
//нажимаем назад, открываем опять отрабатывает код ниже(грид отображает все верно) 
//правда ловит исключение которое я для проверки написал (try openorexecute...)
//далее при возврате назад и открытии листвьюитем вновь все циклично повторяется...
button1.Visible:=true;
image18.Visible:=false;
callback.stop;
colom:='';
colom:=TListViewItem(ListView1.Selected).Text;

fdquery1.sql.Clear;
fdquery1.sql.Add('SELECT "Наименование","Цена","Количество","Сумма","Фото","id" FROM "'+colom+'" where "Наличие"<>"0" ORDER BY "Наименование"');


 try
fdquery1.openorexecute;

 Except
 on e:exception do showmessage('1');// это исключение срабатывает при ПОВТОРНОМ открытии листитем, однако грид отображает все верно.
 end;

datasource1.DataSet.Open;
datasource1.DataSet.First;// нахрена я это сюда добавил?Разумительного ответа дать не могу.
//Но вот только после этих строк приложение, при возникновении ошибки смогло(и может) со второго раза отобразить корректно грид
// только в нем отображался последний неочищенный sql запрос выполненный дважды... 
//поэтому я вынес sql.clear и sql.add вне цикла try. Теперь ошибка ловится,
//но повторно если нажать на листитем приложение продолжает работу.    

Просто если он появляется то он вызывает ошибку при КАЖДОМ нажатии на листитем... 

Изменено пользователем Roma77751

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

sql запрос по сути не совсем корректно отображается в гриде после первого раза... я же писал, колонка дублируется последняя...без данных только хидер.... если оставить код без этого :

sg1.Columns[1].Header:='Цена (тг)';
sg1.Columns[2].Header:='Кол-во (шт)';
   sg1.Columns[3].Visible:=false;
    sg1.Columns[4].Visible:=false;
    sg1.Columns[5].Visible:=false;          
эти колонки не нужно отображать, это (фото,сумма и ID)

то отобразится все как надо... (ошибка естественно от этого не исчезает)... 

так вот, при повторном клике на листитем, создается 2 или 3 колонки пустые с header "ID"....если в запросе поставить последнюю "Сумму" то так будет несколько колонок с суммами... При этом грид при команде Showmessage(inttostr(sg1.columnCount)); говорит что у него колонок всего 6.... остальные призраки получается.... не знаю имеет ли это отношение к ошибке, но на андроиде такого нет...

Сейчас посмотрел количество этих колонок(призраков) совпадает с количеством скрытых....может это они и есть, но почему их обозвали одинаково непонятно...

Изменено пользователем Roma77751

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Все парни заеПался ковырять ничего не получается... скидываю все процедуры с участием грида и fdquery, может так кто сможет помочь разобраться...

procedure TTabbedForm.FormCreate(Sender: TObject);
    var result:string;ver:tstringlist;    Db:TMemorystream; open:integer; 
    begin
  { This defines the default active tab at runtime }
  TabControl1.ActiveTab := TabItem1;
  launch2:=launch2t.Create(false);
  launch2.FreeOnTerminate:=true;
 try
  sqlite.ConnectionString:='DriverID=SQLite;Database='+ TPath.Combine(TPath.GetDocumentsPath, 'leon.db');
  sqlite.Connected:=true;
  		with fdquery1 do begin
        sql.Add('SELECT * FROM sqlite_master WHERE type="table" and name <> "sqlite_sequence" ORDER BY name');
 		 active:=true;
  		open;
  		end;
 Except
 On E:exception do showmessage(e.Message);
 end;
 while not fdquery1.Eof do begin
   listview1.Items.Add.Text:=FDQuery1.FieldByName('name').AsString;
   fdquery1.Next;
 end;

 finally

 end;
//загрузили названия таблиц в listview
end;

procedure TTabbedForm.ListView1ItemClick(const Sender: TObject;
  const AItem: TListViewItem);
begin
button1.Visible:=true;
image18.Visible:=false;
colom:='';
colom:=TListViewItem(ListView1.Selected).Text;
	fdquery1.sql.Clear;
	fdquery1.sql.Add('SELECT "Наименование","Цена","Количество","Сумма","Фото","id" FROM "'+colom+'" where "Наличие"<>"0" ORDER BY "Наименование"');


	 	try
		fdquery1.openorexecute;
 		Except
		 end;

SG1.Visible:=true;
datasource1.DataSet.Open;
datasource1.DataSet.First;
sg1.Columns[1].Header:='Цена (тг)';
sg1.Columns[2].Header:='Кол-во (шт)';
   sg1.Columns[3].Visible:=false;
    sg1.Columns[4].Visible:=false;
    sg1.Columns[5].Visible:=false;


  sg1.Columns[0].Width:=tabbedform.Width/2;
  sg1.Columns[1].Width:=tabbedform.Width/4;
   sg1.Columns[2].Width:=tabbedform.Width/4;
   search.Text:='Поиск товара';
   search.FontColor:=TAlphaColors.Silver;
   search.Visible:=true;
SG1.Visible:=true;
button1.Visible:=true;
end;

procedure TTabbedForm.SG1CellClick(const Column: TColumn; const Row: Integer);
var i,p:integer;
 begin
 datasource1.DataSet.open;
 label1.Text:=datasource1.DataSet.FieldByName('Количество').Value;
 label8.Text:=datasource1.DataSet.FieldByName('Наименование').Value;
 panel1.Position.X:=tabbedform.Width-panel1.Width;
 panel1.Position.Y:=tabbedform.Height-tabcontrol1.TabHeight-50-panel1.Height-search.Height;
 if label8.Text.Length<20 then label8.TextSettings.Font.Size:=15;
 if (label8.Text.Length>20)and (label8.Text.Length<35) then label8.TextSettings.Font.Size:=14;
 if label8.Text.Length>30 then label8.TextSettings.Font.Size:=12;

 panel1.Visible:=true;// это панелька с фоткой товара и кнопками добавить в корзину или убрать
photo:=datasource1.DataSet.FieldByName('Фото').Value;
if photo<>'' then   begin

for i :=0 to photo.Length do
  if (pos('\',photo[i])<>0) or (pos('/',photo[i])<>0) then p:=i;
photo1:=copy(photo,p+2,photo.Length-p+1);

getimg:=getimgt.Create(false);
//в потоке загружается фото с сервера и через синхронизацию отображается картинка в панеле1
end;
end;
   
procedure TTabbedForm.Image1Click(Sender: TObject);
//кнопка добавления выбранного товара в корзину
begin

image12.Position.X:=tabbedform.Width/4;
image12.Position.Y:= tabcontrol1.Height;
image12.Visible:=true;
label1.Text:=inttostr(strtoint(label1.Text)+1);
attention.Text:=inttostr(strtoint(attention.Text)+1);

datasource1.DataSet.open;
fdquery1.Edit;
datasource1.DataSet.FieldByName('Количество').Value:=label1.Text;
datasource1.DataSet.FieldByName('Сумма').Value:=datasource1.DataSet.FieldByName('Количество').Value*datasource1.DataSet.FieldByName('Цена').Value;
fdquery1.Post;

end;
   
procedure TTabbedForm.Image2Click(Sender: TObject);
//убирает товар из корзины
begin
if attention.Text='0' then image12.Visible:=false;
if strtoint(label1.Text)<=0 then exit else begin
  label1.Text:=inttostr(strtoint(label1.Text)-1);
  image12.Position.X:=tabbedform.Width/4;
image12.Position.Y:= tabcontrol1.Height;
attention.Text:=inttostr(strtoint(attention.Text)-1);
image12.Visible:=true;
                         datasource1.DataSet.open;
fdquery1.Edit;
datasource1.DataSet.FieldByName('Количество').Value:=label1.Text;
datasource1.DataSet.FieldByName('Сумма').Value:=datasource1.DataSet.FieldByName('Количество').Value*datasource1.DataSet.FieldByName('Цена').Value;
fdquery1.Post;
           
procedure TTabbedForm.Image8Click(Sender: TObject);
//чистит корзину
var i:integer; ps:string;
begin
for i := 0 to listview1.ItemCount-1 do begin
ps:=listview1.Items[i].text;
    fdquery2.sql.Clear;
  fdquery2.sql.Add('SELECT * FROM "'+ps+'" where "Количество"<>0');
try
  fdquery2.openorexecute;
  except
  end;
  end;
end;
           
procedure TTabbedForm.searchChange(Sender: TObject);
//это Edit, использую для поиска товара в гриде
var poisk2:string;
begin
if search.Text='ПОИСК ТОВАРА' then exit;

poisk2:='%'+search.text+'%';

fdquery1.sql.Clear;
fdquery1.sql.Add('SELECT "Наименование","Цена","Количество","Сумма","Фото","id" FROM "'+colom+'" where "Наименование" like "'+poisk2+'" and "Наличие"<>"0" order by "Наименование"');
 try
  fdquery1.openorexecute;
 except
    end;
    datasource1.DataSet.Open;datasource1.DataSet.First;
     sg1.Columns[1].Header:='Цена (тг)';
   sg1.Columns[2].Header:='Кол-во (шт)';
   sg1.Columns[3].Visible:=false;
    sg1.Columns[4].Visible:=false;
        sg1.Columns[5].Visible:=false;
  sg1.Columns[0].Width:=tabbedform.Width/2;
  sg1.Columns[1].Width:=tabbedform.Width/4;
   sg1.Columns[2].Width:=tabbedform.Width/4;

end;

procedure TTabbedForm.searchClick(Sender: TObject);
begin

search.Text:='';
search.FontColor:=TAlphaColors.Black;
end;

procedure TTabbedForm.searchKeyDown(Sender: TObject; var Key: Word;
  var KeyChar: Char; Shift: TShiftState);
begin
if key=vkReturn then search.ResetFocus;
if (key=vkReturn) and(search.Text='') then begin
search.FontColor:=TAlphaColors.Silver;
search.Text:='Поиск товара';

fdquery1.sql.Clear;
fdquery1.sql.Add('SELECT "Наименование","Цена","Количество","Сумма","Фото","id" FROM "'+colom+'" where "Наличие"<>"0" ORDER BY "Наименование"');

  try
  fdquery1.openorexecute;
 except
    end;
     datasource1.DataSet.Open;datasource1.DataSet.First;
     sg1.Columns[1].Header:='Цена (тг)';
   sg1.Columns[2].Header:='Кол-во (шт)';
   sg1.Columns[3].Visible:=false;
    sg1.Columns[4].Visible:=false;
    sg1.Columns[5].Visible:=false;
  sg1.Columns[0].Width:=tabbedform.Width/2;
  sg1.Columns[1].Width:=tabbedform.Width/4;
   sg1.Columns[2].Width:=tabbedform.Width/4;

end;
end;
//Возможно что то можно было сделать проще, но я сделал как смог, так что строго не судите... лучше помогите разобраться почему вылетает ошибка...

 

Изменено пользователем Roma77751

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Думаю, что если в Андроид, WIN проблем нет, то, скорее всего глюк в реализации под IOS, чего нибудь

Нужно попытаться обойти, например, убрать динамическое создание полей  SG1, из текста не понятно, что к чему привязано.. я в таких случаях делаю пустую форму, с необходимым минимальным "падающим" функционалом, и уже на ней тестирую варианты..

и этот проект уже можно выложить целиком, если кого то попросить потестировать, посмотреть. Правда непонятно что делать с базой, приложить дампы ( усеченные) необходимых таблиц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
19 минут назад, Сергей Сергеев сказал:

Думаю, что если в Андроид, WIN проблем нет, то, скорее всего глюк в реализации под IOS, чего нибудь

Нужно попытаться обойти, например, убрать динамическое создание полей  SG1, из текста не понятно, что к чему привязано.. я в таких случаях делаю пустую форму, с необходимым минимальным "падающим" функционалом, и уже на ней тестирую варианты..

и этот проект уже можно выложить целиком, если кого то попросить потестировать, посмотреть. Правда непонятно что делать с базой, приложить дампы ( усеченные) необходимых таблиц.

Stringgrid(SG1) привязан к FDQuery1 посредством bind visually(LiveBindings Designer) собственно приявязок там никаких нет. Про чистый проект думал, но я по сути перебрал все свои варианты решения на этом проекте, да и сил уже нет....последнее что попробую если никто не поможет это собрать проект на Элькапитане со студией 10.2.3 и убедиться что там косяков нет... Но и тут проблемы, из-за частых смен МакОс эпл как то с трудом стала выдавать мне сертификат на макос...чет страшновато новый запрашивать... 100$ жалко будет))) лиц соглашение я конечно не читал, вдруг так нельзя делать....  Перебирая макосы я создавал серты под каждый, в один момент эпл говорит, что у меня максимум сертов... ну я  один удалил, другой добавил и проблем не было... тут первое что я решил сделать когда увидел эту ошибку запустить на капитане,(серт я снес так как максимум было), я зашел делать новый, мне говорит максимум, я один снес, не помогло, и тут я вспотел....ну и трогать не стал...так все и оставил...Если решения не найду рискну и снесу действующий, вариантов больше не вижу

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

В общем поставил все назад Эль капитана со студией 10.2.3, Скомпилировал тот же проект проблемы не увидел. У кого есть совет что мне теперь делать????

походу больше недели убил на борьбу с ветряными мельницам😪

Изменено пользователем Roma77751

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
3 минуты назад, #WAMACO сказал:

Попробуйте отказаться от LiveBindings ...

не хотелось бы... есть другие предложения? кто пишет под Иос, какую студию юзаете?  если 10.2.3 то как сдружили со свежим СДК

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
15 часов назад, Roma77751 сказал:

не хотелось бы... есть другие предложения?

Отказ от  LiveBindings  это наилучшее решение

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, Tumaso сказал:

Отказ от  LiveBindings  это наилучшее решение

Почему не отказ от "сырой" студии? по моему это решение лучше, нет? я поэтому и спросил кто на какой студии пишет...но в ответ тишина

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Пишем в данный момент на 10.3.1, в т.ч. под iOS.
Перед этим писали на всех версиях начиная с Берлина.
Live bindings не используем, т.к. наслышаны про его странное поведение.
Да, больше писанины, но и уверенности что все работает именно так как нужно - тоже больше.

Да, вы можете отказаться от "сырой" студии, без проблем, никто не запрещает.
Но есть шанс что вы путаете теплое с мягким - студию в целом с одним глючным решением.

Изменено пользователем Barbanel

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Кстати не ради холивара, ничуть не защищаю студию, просто констатирую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
4 минуты назад, Barbanel сказал:

ничуть не защищаю студию, просто констатирую.

По факту получается 10.2.3 проект работает,на 10.3  глючит. LiveBindings или нет, это еще тоже вопрос... конечно подозрения в первую очередь падает на него...но вполне возможно что причина и не в этом...Тратить время на выяснение в чем же действительно дело уже времени и желания особо нет.

Кто нибудь пишет на 10.2.3 под Ios??? Подскажите как адаптировали студию под свежий СДК, я так понимаю нужно прикрутить свежий paserver? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
51 минуту назад, Barbanel сказал:

Пишем в данный момент на 10.3.1, в т.ч. под iOS.

Кстати не подскажешь почему у меня сплэш в ланшафтном режиме стал отображаться🙄.  В настройках проекта стоит только портрет, и в 10.2.3 портретный сплэш был... а в 10.3 правда я догрузил иконки(их там добавилось ну и сплэши тоже добавили других размеров) почему то на бок решил лечь

Изменено пользователем Roma77751

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Не сталкивался.
Решение в лоб: забекапь .dproj и .deployproj и удали их, это обнулит настройки проекта.
После этого зайди в настройки проекта и настрой все заново.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...