Текущий архив: 2004.04.04;
Скачать: CL | DM;
Вниз
Помогите!!!! Задолбался с ADOTable Найти похожие ветки
← →
denmin © (2004-03-09 10:24) [0]Здравствуйте. Дело вот в чем. Есть программа на 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 какой-нибудь?
← →
Романов Р.В. © (2004-03-09 10:37) [1]А так?
While Table5.Locate("docnum;docdate",VarArrayOf([Table4["docnum"],Table4["docdate"]]),[]) do
Table5.Delete;
← →
denmin © (2004-03-09 10:39) [2]2 Романов Р.В. ©
здесь та все нормально, только вот Table4.Delete это самое говорит
← →
sniknik © (2004-03-09 10:41) [3]самый главный глюк в ADOTable, и использовании локальных методов для sql сервера.
по "глюку" на Table4
можно предположить что ключа у таблици нет а повторяющиеся записи есть. измени чтонибудь.
← →
denmin © (2004-03-09 10:42) [4]прошу прощения если не понятно. короче в гриде высвечивается Table4, и из этого грида по попупменю удаляется эта запись из T4 и T5
← →
Плохиш (2004-03-09 10:45) [5]В sniknik © (09.03.04 10:41) [3] были ключевые слова ключа у таблици нет. Советую над ними своей думалкой подумать.
← →
denmin © (2004-03-09 10:55) [6]да, ключа у таблицы нет. но неужели у каждой таблицы на сиквеле должны быть ключи? извините, если что не понимаю, но я только начинаю с сиквелом работу. а если ключи так необходимы и без них никак нельзя на SQL Server, то я так и сделаю.
← →
Плохиш (2004-03-09 10:59) [7]
> denmin © (09.03.04 10:55) [6]
> да, ключа у таблицы нет.
Вот сам подумай, по какому критерию должен создаться запрос на удаление записи?
← →
sniknik © (2004-03-09 11:03) [8]Плохиш (09.03.04 10:45) [5]
это только один из вариантов, другой не менее вероятный
таблици связаны по FOREIGN KEY ... ON DELETE CASCADE, и удаление идет сначала с главной таблицы а после пытается с подчиненной.
но это не главное, главное как это далается, перегонять на клиента все данные чтобы просканировать и удалить пару, ... нонсенс.
← →
sniknik © (2004-03-09 11:09) [9]> а если ключи так необходимы и без них никак нельзя на SQL Server, то я так и сделаю.
если с таблицей работаеш то обязательны, есть варианты когда без них можно обойтись но даже в этом случае чаще добавляют поле с ключом на всякий случай.
ты лутше про sql почитай. и если сможеш сам составить запрос не используя уникального идентификатора (ключа) то значит он и не нужен, если хоть раз в работе с таблицей он понадобится то.... а от компонентов генерирующих sql команды в этом случае бедеш получать "Не удается найти строку для обновления. ..."
← →
stas © (2004-03-09 12:05) [10]Если возможно, то сделай
CursorLocation:=clUseServer
CursorType:=ctKeySet
← →
sniknik © (2004-03-09 12:15) [11]stas © (09.03.04 12:05) [10]
зачем? первое для MSSQL возникнут проблемы с букмарками если попытатся напрямую грид присоеденить (грид используется), а второе делается же полное сканирование т.е. все одно все тащится на локаль а приташить все куском как при локальном быстрее (сжатие используется) чем позаписьно (по мере надобности и несжато) как при серверном делается. и в третьих ключь от этого менее необходим не станет.
лутше сразу менять логику пока не написал большого куска который влом менять будет.
← →
Stas © (2004-03-09 12:22) [12]Да у меня и с ключем при локальном курсоре такие проблемы были.
Пока не поменял курсор на серверный.
А грид у меня тоже напрямую подключен.
Если знаешь как это обойти напиши.
Страницы: 1 вся ветка
Текущий архив: 2004.04.04;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.028 c