![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
INDY сбивают ориентацию ADO [D7, XP]
Евгений07 © (2011-11-13 00:49:00)Доброго времени!
Непонятно:
1. на сервере есть второстепенная таблица, подразумевается монопольный доступ через ADODataSet -> DBGrid
2. после успешной отправке письма средствами IdSMTP при попытке зафиксировать это в базе
if Mail(z) then with ADODataSet6 do begin
Edit;
FieldByName('otvetMeil').AsInteger := 1;
Post;
end;
вылетает ошибка "Не удается найти строку для обновления"
Возможно ли простое решение проблемы?
vegarulez (2011-11-13 20:01:00) [1]Что тебе мешает запрос в базу пропнуть через ADOQuery1 например?
Через обычный SQL сделай запрос взяв из DataSet`a id записи
DBGrid1.DataSource.DataSet.FieldByName('id').AsString;
которую требуется обновить.
что-то типа:
ADOQuery1.Sql.Text:='update `my_table` set `flag_mail`=1,`sender`="test@test.ru",`status`="Отправлено" where `id`='+DBGrid1.DataSource.DataSet.Fieldbyname('id').AsString+'';
sniknik (2011-11-13 11:40:00) [2]> 3. после выполнения процедуры, меняющей (сбрасывающей) указатель на запись хочется восстановить ситуацию. Как?
нет таких, указатель в клиент серверной технологии ничего не значит, с одной машины на другую не действует. идентифицируется по записям (значениям), что значит в наборе должно присутствовать поле(группа) уникальная для каждой записи. если хотим менять позаписьно...
и как ты восстановишь, если ключа нет, а идентификация идет вот FieldByName(' otvetMeil').AsInteger := 1; по этому полю?
> Если Вам известно, как проще - приведите часть кода.
мне известно, и даже несколько вариантов основанных на одном и том же. и даже на неявном "внутреннем" ключе(хотя тут скорее просто идентификатор).
пару я тебе сказал. очень полезно если выберешь запрос и сам (а не рекордсет) попытаешься определить значения для условия апдейта... обычно после этого очень хорошо "доходит" что ему (рекордсету) нужно.
а привести часть кода... да без проблем, вот этот работает -
with ADODataSet6 do begin
Edit;
FieldByName('otvetMeil').AsInteger := 1;
Post;
end;
естественно если под это подведена "база", т.е. структура таблицы с ключом, он выбран в рекордсете (присутствует на клиенте), и указано, что нужно идентифицироваться по нему.
описывать все связанное? + все возможные варианты (у тебя нет ни структуры, ни база не указана, ничего нет в общем)?... э... это уже на статью тянет (в смысле не уголовную, а...) и она уже есть везде. на королевстве например (поиск по - работаем с ADO). и не одна.
Dennis I. Komarov (2011-11-13 11:34:00) [3]
if Mail(z) then
with TADOCommand.Create do try
.....
CommandText:='Update.....';
Execute;
finally
Free;
end;
Евгений07 (2011-11-13 02:35:00) [4]sniknik © (13.11.11 01:45) [4]
Самое простое для меня самое не понятное:
1. была установлена запись в ДатаСет = через ДВГрид
2. можно установить Какие?? параметры этой записи
3. после выполнения процедуры, меняющей (сбрасывающей) указатель на запись хочется восстановить ситуацию. Как?
С помощью идиотизма я предполагаю , как это можно
Если Вам известно, как проще - приведите часть кода. Я постараюсь Его понять.
sniknik (2011-11-13 01:45:00) [5]> Запрос + Клозе-Опен + Боокмарк ???
что за идиотизм? и где тут ключ?
> А проще?
этои есть самое простое, идентификация делается по ключу, если делать по простому "изменяемому полю", то естественно не найдет, если в процессе кто то (НЕ INDY!!!) поменял значение.
Евгений07 (2011-11-13 01:28:00) [6]sniknik © (13.11.11 01:07) [1]
Запрос + Клозе-Опен + Боокмарк ???
А проще?
про ориентацию АДО лучше спросить специалистов
Anatoly Podgoretsky (2011-11-13 01:14:00) [7]> Евгений07 (13.11.2011 00:49:00) [0]
А какая ориентация у АДО и что она становится голубой.
sniknik (2011-11-13 01:07:00) [8]использовать ключевое поле, можно перейти на апдейт запросом но тоже только по нему (ключу).