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

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

Помогите!!!! Задолбался с ADOTable [D5, MSSQL]


denmin ©   (2004-03-09 10:24:00) 

Здравствуйте. Дело вот в чем. Есть программа на Delphi5, использую ADO. В гриде высвечиваются данные отфильтрованные по фильтру. На гриде есть попупменю, где одним из пунктов яв-ся удаление записи.  Удаление происходит так, в двух таблицах

Table5.Filter:='';
Table5.Open;
If Table5.Locate('docnum;docdate',VarArrayOf([Table4['docnum'],Table4['docdate']]),[]) then
  begin
  While (not Table5.Eof)and(Table5['docnum']=Table4['docnum'])and(Table5['docdate']=Table4['docdate']) do
        Table5.Delete;
  end;
Table5.Close;
Table4.Delete;

так вот все проходит а на Table4.Delete говорит "Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнего чтения".
Может что не так я делаю, а может есть патч на ADO какой-нибудь?


Stas   (2004-03-09 12:22:00) [1]

Да у меня и с ключем при локальном курсоре такие проблемы были.
Пока не поменял курсор на серверный.
А грид у меня тоже напрямую подключен.
Если знаешь как это обойти напиши.


sniknik   (2004-03-09 12:15:00) [2]

stas ©   (09.03.04 12:05) [10]
зачем? первое для MSSQL возникнут проблемы с букмарками если попытатся напрямую грид присоеденить (грид используется), а второе делается же полное сканирование т.е. все одно все тащится на локаль а приташить все куском как при локальном быстрее (сжатие используется) чем позаписьно (по мере надобности и несжато) как при серверном делается. и в третьих ключь от этого менее необходим не станет.

лутше сразу менять логику пока не написал большого куска который влом менять будет.


stas   (2004-03-09 12:05:00) [3]

Если возможно, то  сделай
CursorLocation:=clUseServer
CursorType:=ctKeySet


sniknik   (2004-03-09 11:09:00) [4]

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

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


sniknik   (2004-03-09 11:03:00) [5]

Плохиш   (09.03.04 10:45) [5]
это только один из вариантов, другой не менее вероятный
таблици связаны по FOREIGN KEY ... ON DELETE CASCADE, и удаление идет сначала с главной таблицы а после пытается с подчиненной.

но это не главное, главное как это далается, перегонять на клиента все данные чтобы просканировать и удалить пару, ... нонсенс.


Плохиш   (2004-03-09 10:59:00) [6]


> denmin ©   (09.03.04 10:55) [6]
> да, ключа у таблицы нет.

Вот сам подумай, по какому критерию должен создаться запрос на удаление записи?


denmin   (2004-03-09 10:55:00) [7]

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


Плохиш   (2004-03-09 10:45:00) [8]

В sniknik ©   (09.03.04 10:41) [3] были ключевые слова ключа у таблици нет. Советую над ними своей думалкой подумать.


denmin   (2004-03-09 10:42:00) [9]

прошу прощения если не понятно. короче в гриде высвечивается Table4, и из этого грида по попупменю удаляется эта запись из T4 и T5


sniknik   (2004-03-09 10:41:00) [10]

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


denmin   (2004-03-09 10:39:00) [11]

2 Романов Р.В. ©
здесь та все нормально, только вот Table4.Delete это самое говорит


Романов Р.В.   (2004-03-09 10:37:00) [12]

А так?
 While Table5.Locate('docnum;docdate',VarArrayOf([Table4['docnum'],Table4['docdate']]),[]) do
       Table5.Delete;


Наверх

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