Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не получается с записью данных [D6, IB6.x]


Xmen ©   (2006-04-20 11:00:00) 

Привет мастерам!
Сразу перехожу к проблеме.
Есть две таблицы. 1 - Данные кассовы символ, расшиф. символа, код филиала, сумма. 2 - временная таблица кассовы символ, расшиф. символа, код филиалов(32 поля). Туда надо писать данные из табл. 1. 2 таб. уже записан данные по полям кассовы символ, расшиф. символа. Вот только по полям код филиалов нужно писать данны из 1 табл. значение поля суммы.
Делаю так, но допустил гдето ощибку и немогу найти ощибку. Помогите сним разобратся.

while not qrSimbol.eof do
  begin
   kas_sim:= qrSimbol.FieldByName('kas_sim').Value;
   ras_sim:= qrSimbol.FieldByName('ras_sim').Value;
   qrTemp_sim.open;
   qrTemp_sim.Locate('kod_sim;ras_kod', VarArrayOf([kas_sim,ras_sim]), [loPartialKey]);
   qrTemp_sim.append;
   qrTemp_sim.FieldByName(qrSimbol.FieldByName('kod_filial').Value).Value:=qrSimbol .fieldbyname('SUMMA').Value;
   qrTemp_sim.post;
   qrSimbol.next;
  end;


Xmen   (2006-04-20 16:26:00) [1]

В некторым роде это мне помагает (с англ. не вери гуд, но понят можно), но основную помощ я беру из форума, а конкретно от вас. И за это вам СПАСИБО.


Johnmen   (2006-04-20 14:50:00) [2]

В принципе, на 80-90% достаточно штатного хелпа.


Xmen   (2006-04-20 14:45:00) [3]

Потамучто хочу, но еще не сумел стат нормалным программистом. Все еще учусь на своих ошибках. У меня так получается что я затрудняю свое дело, а потом делаю апгрети. Если дадите толковые советы по повуду повышение знание в областе программирование то я буду очен рад. (Не пошлите кудато, и не советуете бросит это дело и с книгами унас проблема.) ;-)


Johnmen   (2006-04-20 14:07:00) [4]


> Xmen   (20.04.06 13:25) [10]


А зачем столько клоузов?


Xmen   (2006-04-20 13:56:00) [5]

Ты был прав. Дабавил вот это и ситуация изминилось. Спасибо за помощ.
with qrTemp_sim do
 begin
  if Active then Close;
  Screen.Cursor := crHourGlass;
  SQL.Clear;
  SQL.Add('SELECT * FROM temp_sim');
  try
    Open;
  except
    ShowMessage('Îøèáêà âûïîëíåíèÿ çàïðîñà');
    Screen.Cursor := crDefault;
    exit;
  end;
  EnableControls;
  Screen.Cursor := crDefault;
 end;


Sergey13   (2006-04-20 13:29:00) [6]

2 [10] Xmen   (20.04.06 13:25)
Т.е. ты ишешь по запросу "'insert into temp_sim ..."?
И чего ты хочешь? 8-)


Xmen   (2006-04-20 13:25:00) [7]

У меня перед этим кодом идет вот такой код. Может изза этого это ошибка.
Этот код берет данные с табл справ. и записваеть в временную таблицу.

with qrTemp_sim do
 begin
  if Active then Close;
  Screen.Cursor := crHourGlass;
  Close;
  SQL.Clear;
  SQL.Add('delete from temp_sim');
  ExecSQL;
  Close;
  SQL.Clear;
  SQL.Add('insert into temp_sim (kod_sim, ras_kod, naim_kod) select kod_kas_sim, ras_kod_kas_sim, naim_kas_sim from spr');
  SQL.SaveToFile('sql.txt');
  ExecSQL;
  Screen.Cursor := crDefault;
 end;
 trSimbol.CommitRetaining;


Sergey13   (2006-04-20 13:10:00) [8]

2[8] Xmen   (20.04.06 13:06)
Фик ее знает, откуда ошибка. Возможно есть обработчик (на перемещение по датасету) у qrTemp_sim, в котором написано не то что можно.


Xmen   (2006-04-20 13:06:00) [9]


> Sergey13 ©   (20.04.06 12:48) [7]
>
> while not qrSimbol.eof do
>  begin
>   kas_sim:= qrSimbol.FieldByName('kas_sim').Value;
>   ras_sim:= qrSimbol.FieldByName('ras_sim').Value;
>   if qrTemp_sim.Locate('kod_sim;ras_kod', VarArrayOf([kas_sim,
> ras_sim]), [loPartialKey]) then
>    begin
>     qrTemp_sim.Edit;
>     qrTemp_sim.FieldByName(qrSimbol.FieldByName('kod_filial').
> Value).Value:=qrSimbol  .fieldbyname('SUMMA').Value;
>     qrTemp_sim.post;
>    end;
>   qrSimbol.next;
>  end;


Спасибо 5 минут до ответа точно также я изминил код, но как написал выше уменя ощибка выходить после Locate.


Sergey13   (2006-04-20 12:48:00) [10]

while not qrSimbol.eof do
 begin
  kas_sim:= qrSimbol.FieldByName('kas_sim').Value;
  ras_sim:= qrSimbol.FieldByName('ras_sim').Value;
  if qrTemp_sim.Locate('kod_sim;ras_kod', VarArrayOf([kas_sim,ras_sim]), [loPartialKey]) then
   begin
    qrTemp_sim. Edit;
    qrTemp_sim.FieldByName(qrSimbol.FieldByName('kod_filial').Value).Value:=qrSimbol  .fieldbyname('SUMMA').Value;
    qrTemp_sim.post;
   end;
  qrSimbol.next;
 end;


Xmen   (2006-04-20 12:46:00) [11]

Извеняюсь за append там должен был быть edit.
У меня ощибка выходить сразу после Locate. Ощибка такая
Access violation at address 0048AC6F in module 'sim_client.exe'. Write of address 000000000


Xmen   (2006-04-20 12:43:00) [12]

Да наверно я ощибся при написание кода.
Смысл был такой. Нужно было найти поле с таким значением и в эту запись только в другое поле записать значение суммы. Мне просто нужно было найти запись похожим параметром и в эту запись вводит данные в поле суммы. Наверно я усложнил задачу. А естьли другие выходы от этой проблемы.


Yrtimd   (2006-04-20 11:49:00) [13]

Зачем делать Locate('kod_sim;ras_kod', VarArrayOf([kas_sim,ras_sim]), [loPartialKey]);  ???
Если ты _добавляешь_, а не изменяешь запись или никак не обрабатываешь этот Locate ?..
И еще после Locate, если он так нужен, не переоткрывай таблицу, а делай First, если необходимо курсор на первую запись в таблице переместить.


Sergey13   (2006-04-20 11:44:00) [14]

2[2] Xmen   (20.04.06 11:34)
>2 пункт непонял, что хочеш этим сказать. Чтото опять нето сделал.
Ты похоже не понимаешь, что делает тот или иной оператор.
Locate - ищет в наборе данных запись по соответствию критерию
append - добавляет новую запись.
Ты искал и нашел (может быть, ты же не анализируешь результат поика). И тут же говоришь "а мне пофиг" и вставляешь новую запись с заполненым одним полем. Вот и вопрос - а нафига? Наверное надо - если нашел, то ИЗМЕНИТЬ (Edit) запись, а если не нашел, то вставить, с заполнением всех необходимых полей.

Да и вообще временная таблица тут (если это таблица в базе) лишняя.


Xmen   (2006-04-20 11:34:00) [15]

>>Мало понятного.
>>1. Зачем открывать qrTemp_sim.open в каждой итерации цикла.
>>2. Зачем искать и тут же, без анализа результата поиска, добавлять запись?

1 пункт можно удалит.
2 пункт непонял, что хочеш этим сказать. Чтото опять нето сделал.


Sergey13   (2006-04-20 11:11:00) [16]

Мало понятного.
1. Зачем открывать qrTemp_sim.open в каждой итерации цикла.
2. Зачем искать и тут же, без анализа результата поиска, добавлятьзапись?


Наверх

Титульная страница Поиск, карта сайта Написать письмо