Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1319009272
Cobalt
2011-10-19 11:27
2012.01.29
[Pascal Error] E2250 There is no overloaded version of <function>


15-1317835426
Empleado
2011-10-05 21:23
2012.01.29
Project Management Software


1-1282631144
Avil
2010-08-24 10:25
2012.01.29
Разница кодировок при копировании и вставке


15-1317933002
Юрий
2011-10-07 00:30
2012.01.29
С днем рождения ! 7 октября 2011 пятница


15-1318195803
Юрий
2011-10-10 01:30
2012.01.29
С днем рождения ! 10 октября 2011 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский