Форум: "Начинающим";
Текущий архив: 2012.01.29;
Скачать: [xml.tar.bz2];
ВнизМультиудаление записей таблицы Найти похожие ветки
← →
Hadroran (2011-10-20 16:00) [0]Привет всем мастерам.
Помогите с кодом, что не правильно написано?
while i_tmp<(FindComponent(format("%s",[GridName])) as TcxGridDBTableView).Controller.SelectedRowCount do
begin
DM.Q_All.GotoBookmark(TBookmark((FindComponent(format("%s",[GridName])) as TcxGridDBTableView).Controller.SelectedRows[i_tmp]));
DM.FIBSQLExe("DELETE FROM "+TableName+" WHERE ID_CODE = "+DM.Q_All.FieldByName("ID_CODE").asString,false);
inc(i_tmp);
end;
DM.FIBTransaction.CommitRetaining;
При выполнении кода на GotoBookmark появляется ошибка. Спасибо.
← →
Медвежонок Пятачок © (2011-10-20 16:12) [1]TDataSet.BookmarkValid(BookMark: Pointer) : boolean
← →
Ega23 © (2011-10-20 16:12) [2]http://delphimaster.net/view/2-1318218903/
← →
Inovet © (2011-10-20 16:18) [3]> [0] Hadroran (20.10.11 16:00)
> При выполнении кода на GotoBookmark появляется ошибка.
Текст сообщения об ошибке, конечно же, зашифрован, ключ не выдан.
← →
Ega23 © (2011-10-20 16:20) [4]А в целом я бы так сделал:
var
grid: TcxGridDBTableView;
i: Integer;
s: string;
begin
grid := FindComponent(format("%s",[GridName])) as TcxGridDBTableView;
s := "delete from xxx where ID_CODE in (-1";
DM.Q_All.DisableControls;
try
for i:= 0 to grid.Controller.SelectedRowCount - 1 do
begin
DM.Q_All.GotoBookmark(grid.DelectedRows[i]);
s := s + "," + DM.Q_All.FieldByName("ID_CODE").asString;
end;
s := s + ");";
DM.FIBSQLExe(s); // Не знаю, что это такое
// переоткрыть запрос
DM.Q_All.Close;
DM.Q_All.Open;
finally
DM.Q_All.EnableControls;
end;
end;
← →
Медвежонок Пятачок © (2011-10-20 16:24) [5]если в этот код приходит имя грида, то почему в него не может прийти ссылка на сам грид?
На кой леший здесь findcomponet?
Тем более судя по тому, как он вызывается, это метод формы и все гриды лежат (должны лежать) на ней же.
← →
Медвежонок Пятачок © (2011-10-20 16:44) [6]... и быть прикрученными к одному и тому же датасету DM.Q_All.
Причем датасет один, а удаление идет "DELETE FROM "+TableName+"
что не правильно написано?
Все.
← →
Hadroran (2011-10-21 08:43) [7]
> что не правильно написано?
>
> Все.
Исчерпывающий ответ. Я бы тоже так смог всем проблемы решать.
← →
Медвежонок Пятачок © (2011-10-21 09:07) [8]для начала попробуй не создавать проблем на пустом месте.
← →
Hadroran (2011-10-21 09:12) [9]
> Ega23 © (20.10.11 16:20) [4]
var
grid: TcxGridDBTableView;
i: Integer;
s: string;
begin
grid := FindComponent(format("%s",[GridName])) as TcxGridDBTableView;
s := "delete from xxx where ID_CODE in (-1";
DM.Q_All.DisableControls;
try
for i:= 0 to grid.Controller.SelectedRowCount - 1 do
begin
DM.Q_All.GotoBookmark(TBookmark(grid.DelectedRows[i]));
s := s + "," + DM.Q_All.FieldByName("ID_CODE").asString;
end;
s := s + ");";
DM.FIBSQLExe(s); // Не знаю, что это такое
// переоткрыть запрос
DM.Q_All.Close;
DM.Q_All.Open;
finally
DM.Q_All.EnableControls;
end;
end;
Код немного я изменил, потому-что при кодеDM.Q_All.GotoBookmark(TBookmark(grid.DelectedRows[i]));
без TBookmark код не компилится.
Но все равно проблема осталась. На первом проходе, при i=0 все нормально, при i=1 (т.е. на следующем) опять ошибка "Access violation at adress ..."
← →
Ega23 © (2011-10-21 09:23) [10]
> Исчерпывающий ответ.
+ стопицот к Поросёнку Винни
← →
Медвежонок Пятачок © (2011-10-21 09:56) [11]>grid.Controller.SelectedRowCount - 1
>TBookmark(grid.SelectedRows[i])
wtf ?
← →
Hadroran (2011-10-21 10:03) [12]
> wtf ?
Да, именно так и написано, иначе была бы другая ошибка. Простите за опечатку )
← →
Hadroran (2011-10-21 10:05) [13]
var
grid: TcxGridDBTableView;
i: Integer;
s: string;
begin
grid := FindComponent(format("%s",[GridName])) as TcxGridDBTableView;
s := "delete from Table where ID_CODE in (-1";
DM.Q_All.DisableControls;
try
for i:= 0 to grid.Controller.SelectedRowCount - 1 do
begin
DM.Q_All.GotoBookmark(TBookmark(grid.Controller.SelectedRows[i]));
s := s + "," + DM.Q_All.FieldByName("ID_CODE").asString;
end;
s := s + ");";
//Выполняем запрос
// переоткрыть запрос
DM.Q_All.Close;
DM.Q_All.Open;
finally
DM.Q_All.EnableControls;
end;
end;
← →
Anatoly Podgoretsky © (2011-10-21 10:14) [14]
> Исчерпывающий ответ. Я бы тоже так смог всем проблемы решать.
Но ты то не решаешь.
← →
Hadroran (2011-10-21 10:34) [15]
> Anatoly Podgoretsky
Преклоняю голову.
Но, походу проблема так нерешенная и останется.
← →
Медвежонок Пятачок © (2011-10-21 10:35) [16]Да, именно так и написано, иначе была бы другая ошибка. Простите за опечатку )
То есть в программе код один, а на форуме другой.
И все в нём ищут ошибку.
← →
Hadroran (2011-10-21 10:55) [17]Вот придираетесь к орфографии. Я же обозначил место появления ошибки.
Второй проход в циклеDM.Q_All.GotoBookmark(TBookmark(grid.Controller.DelectedRows[i]));
Пробовал и с
> TDataSet.BookmarkValid(BookMark: Pointer) : boolean
Не сложилось. Ошибок не выдает, только по DataSet-у в количестве SelectedRowCount не двигается. Стоит на последней выделенной записи.
← →
Anatoly Podgoretsky © (2011-10-21 11:03) [18]Какие к черту еще букмарки, особенно на удаленые записи, что там кроме AV можно получить.
Ты выкинть код и перепиши все нафиг и тебе будет счастье.
← →
Медвежонок Пятачок © (2011-10-21 11:08) [19]Вот придираетесь к орфографии.
К какой нафик орфографии?
У тебя длина букмарков читается из grid.Controller
а сами букмарки вынимаются прямо из grid.SelectedRows
← →
Anatoly Podgoretsky © (2011-10-21 11:29) [20]
> Но, походу проблема так нерешенная и останется.
Если приложишь усилия к решению, то возможно будет решена.
← →
Hadroran (2011-10-21 11:48) [21]Так в TcxGridDBTableView только через Controller можно обратиться к SelectedRows.
Во многих примерах в сети используют такой кодDBGrid1.Datasource.Dataset.Bookmark := DBgrid1.SelectedRows.Items[x];
Но ведь это же разные типы. Решения нет, и я продолжаю тупить. От этого только клаве больнее становится.
← →
Hadroran (2011-10-21 12:00) [22]Решил без букмарков, но как-то не эротично что-ли, по-детски.
s_tmp:="DELETE FROM "+TableName+" WHERE ID_CODE IN (-1";
DM.Q_All.DisableControls;
try
i_tmp:=0;
while i_tmp<DBGrid.Controller.SelectedRowCount do
begin
DM.Q_All.Locate("ID_CODE",strtoint(DBGrid.Controller.SelectedRows[i_tmp].Display Texts[0]),[loCaseInsensitive, loPartialKey]);
s_tmp:=s_tmp+","+DM.Q_All.FieldByName("ID_CODE").asString;
inc(i_tmp);
end;
s_tmp:=s_tmp+")";
// выполняем запрос
// обновляем запрос
finally
DM.Q_All.EnableControls;
end;
← →
Медвежонок Пятачок © (2011-10-21 12:02) [23]эротичнее будет тогда, когда будешь анализировать результат локейта. он булевый.
← →
Anatoly Podgoretsky © (2011-10-21 12:12) [24]> Hadroran (21.10.2011 12:00:22) [22]
Так бы сразу и сказал, что этотики хочешь.
А по детски так
Кроха сын к отцу пришел
И сказала кроха
Пися в писю хорошо
Пися в попу плохо
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.01.29;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.004 c