![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не получается с записью данных [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. Зачем искать и тут же, без анализа результата поиска, добавлятьзапись?