Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.01.25;
Скачать: [xml.tar.bz2];

Вниз

Странная ошибка после сортировки   Найти похожие ветки 

 
Впервые   (2008-12-14 21:18) [0]

Здравствуйте.
Использую стандартный набор: Table, Query, DataSource.
Сортирую таблицу
Query1.DatabaseName :="ТемпБаза";
 Query1.SQL.Clear;
 Query1.SQL.Add("SELECT * FROM baza.DB ORDER BY tb");
 Query1.Active :=true;

 DataSource1.DataSet :=Query1;
 DBGrid1.DataSource :=DataSource1;

Когда я начинаю делать какие-либо манипуляции (добавление записи, удаление) у меня самопроизвольно теряются записи (сами удаляются).
Есть событие onMouseUp
procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if DBGrid1.Focused = true then begin
  TabNumber :=     DataSource1.DataSet.Fields[0].AsInteger;
  Family :=        DataSource1.DataSet.Fields[1].AsString;
  Name :=          DataSource1.DataSet.Fields[2].AsString;
  Otchestvo :=     DataSource1.DataSet.Fields[3].AsString;
  Doljnost :=      DataSource1.DataSet.Fields[4].AsString;
  Foto :=          DataSource1.DataSet.Fields[5].AsString;
  DataVidachi :=   DataSource1.DataSet.Fields[6].AsString;
  SrokDeistviya := DataSource1.DataSet.Fields[7].AsString;
  VidPropuska :=   DataSource1.DataSet.Fields[8].AsInteger;
 end;
end;
- Получаю данные из БД.
Может у меня фокус ставится не на ту запись? Любая манипуляция и я лишаюсь какой -то другой записи, вообще ничего не могу делать в БД.
Как только выполняется этот запрос с сортировкой - конец, можно смело закрывать и запускать заново программу
Что за глюк?


 
Правильный$Вася   (2008-12-14 21:48) [1]


> Когда я начинаю делать какие-либо манипуляции (добавление
> записи, удаление)

не вижу текста манипуляций

> самопроизвольно теряются записи (сами удаляются)

так не бывает
если они удаляются, то это делает твой код


 
YurikGL ©   (2008-12-14 21:49) [2]


> Когда я начинаю делать какие-либо манипуляции (добавление
> записи, удаление) у меня самопроизвольно теряются записи
> (сами удаляются).

Как делаешь манипуляции? DB-навигатором? Непосредственно в таблице? Запросами?


 
Впервые   (2008-12-14 22:01) [3]

Значит .....
1) Выполняется запрос.
procedure TForm1.Button6Click(Sender: TObject);
begin
 Query1.DatabaseName :="ТемпБаза";
 Query1.SQL.Clear;
 Query1.SQL.Add("SELECT * FROM baza.DB ORDER BY tb");
 Query1.Active :=true;

 DataSource1.DataSet :=Query1;
 DBGrid1.DataSource :=DataSource1;
end;

2) Выделяю запись в DBGrid.
procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if DBGrid1.Focused = true then begin
  TabNumber :=     DataSource1.DataSet.Fields[0].AsInteger;
  Family :=        DataSource1.DataSet.Fields[1].AsString;
  Name :=          DataSource1.DataSet.Fields[2].AsString;
  Otchestvo :=     DataSource1.DataSet.Fields[3].AsString;
  Doljnost :=      DataSource1.DataSet.Fields[4].AsString;
  Foto :=          DataSource1.DataSet.Fields[5].AsString;
  DataVidachi :=   DataSource1.DataSet.Fields[6].AsString;
  SrokDeistviya := DataSource1.DataSet.Fields[7].AsString;
  VidPropuska :=   DataSource1.DataSet.Fields[8].AsInteger;
 end;
end;

3)Нажимаю кнопку "Правка"
procedure TForm1.Button2Click(Sender: TObject);
begin
 Form2.Caption :="Правка: Редактирование данных";
 Form2.Image1.Visible :=true;
 GlobalFlag :=2; //Если 2 - то в режиме правка записи

 Form2.Edit1.Text := IntToStr (TabNumber);
 Form2.Edit2.Text := Family;
 Form2.Edit3.Text := Name;
 Form2.Edit4.Text := Otchestvo;
 Form2.Memo1.Lines.Text :=Doljnost;
 Form2.Edit5.Text :=Foto;
 Form2.Image1.Picture.LoadFromFile(Foto);
 Form2.DateTimePicker1.Date :=StrToDate (DataVidachi);
 Form2.DateTimePicker2.Date :=StrToDate (SrokDeistviya);
 if VidPropuska  = 0 then
   Form2.CheckBox1.Checked :=false
 else if VidPropuska  = 1 then
   Form2.CheckBox1.Checked :=true;

 Form2.ShowModal;
end;
Т.е. тут появляются нужные записи
Меняю, например, в поле Name имя человека
5) Нажимаю сортировка (код выше) - делается какая то новая запись.


 
Впервые   (2008-12-14 22:06) [4]

Момент №2 связанный с удалением записи.
Делаю всё теже манипуляции и....нажимаю на кнопку "Удалить"
procedure TForm1.Button3Click(Sender: TObject);
begin
//**** Чё нибудь вывести: Удаляется такая то запись и вывести пару полей
//**** и запись переносится в БД удалённых!!!
 Form1.Table1.Delete; //Удалить выделенную запись из БД
 Form1.Table1.Active :=false;
 Form1.Table1.DatabaseName :="ТемпБаза";
 Form1.Table1.TableName :="deli.db";
   Form1.Table1.Active :=true;
   Form1.Table1.Insert;

     Form1.Table1.Fields[0].AsInteger  :=TabNumber; //Уникальный ТБ
     Form1.Table1.Fields[1].AsString   :=Family; //Фамилия
     Form1.Table1.Fields[2].AsString   :=Name; //Имя
     Form1.Table1.Fields[3].AsString   :=Otchestvo; //Отчество
     Form1.Table1.Fields[4].AsString   :=Doljnost;//Должность
     Form1.Table1.Fields[5].AsString   :=Foto; //Фото
     Form1.Table1.Fields[6].AsDateTime :=StrToDate (DataVidachi);
     Form1.Table1.Fields[7].AsDateTime :=StrToDate (SrokDeistviya);
     Form1.Table1.Fields[8].AsInteger  :=VidPropuska;
    Form1.Table1.Post;

 Form1.Table1.Active :=false;
 Form1.Table1.DatabaseName :="ТемпБаза";
 Form1.Table1.TableName :="baza.db";
 Form1.Table1.Active :=true;

end;

Что бы я не выделял - всегда удаляется последняя запись в БД. ВСЕГДА!!!
Притом если не использовать код сортировки - всё работает чётко. Все проблемы возникают только после неё


 
Loginov Dmitry ©   (2008-12-14 22:34) [5]

> 5) Нажимаю сортировка (код выше) - делается какая то новая
> запись.


Сама по себе делается чтоли? Или код для этого есть какой-нибудь? Тогда почему мы его до сих пор не увидели???


 
Loginov Dmitry ©   (2008-12-14 22:35) [6]

> Что бы я не выделял - всегда удаляется последняя запись
> в БД. ВСЕГДА!!!


Откуда взялось тут Table1? Было же Query1!!!


 
Впервые   (2008-12-14 22:39) [7]

procedure TForm1.Button6Click(Sender: TObject);
begin
Query1.DatabaseName :="ТемпБаза";
Query1.SQL.Clear;
Query1.SQL.Add("SELECT * FROM baza.DB ORDER BY tb");
Query1.Active :=true;

DataSource1.DataSet :=Query1;
DBGrid1.DataSource :=DataSource1;
end;
- вот это сортировка

Сортируем через Query - результат в DBGrid отображаем


 
Loginov Dmitry ©   (2008-12-14 22:50) [8]

> Сортируем через Query - результат в DBGrid отображаем


Я это вижу! Вопрос в том, какую запись должен удалять код
Form1.Table1.Delete; //Удалить выделенную запись из БД

Кто на эту запись устанавливает курсор?


 
Впервые   (2008-12-14 23:18) [9]

Я и удаляю. Фокус у меня чтоли не на ту запись ставится наверное. Всегда в конце. Как будто не обновляет переменные. Щас под отладкой проскочу


 
Впервые   (2008-12-14 23:27) [10]

Нет! Всё правильно! Переменные правильно отображаются. Всегда удаляется последняя запись


 
Loginov Dmitry ©   (2008-12-14 23:38) [11]

> Нет! Всё правильно! Переменные правильно отображаются. Всегда
> удаляется последняя запись


Где связь между переменными, отображаемыми на Form2 и удалением последней записи?


 
Впервые   (2008-12-14 23:57) [12]

Нет никакой связи. Тут выборка берётся просто по той записи на которую ткнули машью.

В переменные
  TabNumber :=     DataSource1.DataSet.Fields[0].AsInteger;
  Family :=        DataSource1.DataSet.Fields[1].AsString;
  Name :=          DataSource1.DataSet.Fields[2].AsString;
  Otchestvo :=     DataSource1.DataSet.Fields[3].AsString;
  Doljnost :=      DataSource1.DataSet.Fields[4].AsString;
  Foto :=          DataSource1.DataSet.Fields[5].AsString;
  DataVidachi :=   DataSource1.DataSet.Fields[6].AsString;
  SrokDeistviya := DataSource1.DataSet.Fields[7].AsString;
  VidPropuska :=   DataSource1.DataSet.Fields[8].AsInteger;

просто подставляется выбранная запись


 
Катунов Юрий ©   (2008-12-15 00:44) [13]

В Delphi доступ к таблице обеспечивается с помощью компонента Query и формируется SQL-запрос вида "Select * From <имя файла таблицы>
Where <условия отбора записей>
Order By <имя поля, по которому производится сортировка>"

Если по полю задан индекс, сортировка работает немножко быстрее. Есть правда проблемка. В Delphi отсортированный таким образом набор данных невозможно изменять. При изменении приходиться отменять сортировку, а потом сортировать заново.
Поэтому ты и повис. Жмёшь свои кнопки, жмёшь, а эффекта нет. :-)

Запусти сортировку методом "пузырька" и переупорядочий базу, но это долго, нудно и не по-пацански... :-)


 
Johnmen ©   (2008-12-15 08:59) [14]


> Есть правда проблемка. В Delphi отсортированный таким образом
> набор данных невозможно изменять.

Это интересное открытие. То-то мужики удивятся...:)


 
Сергей М. ©   (2008-12-15 09:05) [15]


> Запусти сортировку методом "пузырька" и переупорядочий базу


А вот это куда как интересней).. Прямо-таки не догма, а руководство к действию)


 
Сергей М. ©   (2008-12-15 09:11) [16]


> Впервые


Убери из проекта TTable - он здесь как собаке пятая нога.
Для просмотра и редактирования таблицы достаточно одного TQuery.


 
Anatoly Podgoretsky ©   (2008-12-15 09:55) [17]

Сортируй, не сортируй, а СУБД пофигу, все равно вставит в нужном ей порядке.


 
Loginov Dmitry ©   (2008-12-15 10:06) [18]


> Есть правда проблемка. В Delphi отсортированный таким образом
> набор данных невозможно изменять. При изменении приходиться
> отменять сортировку, а потом сортировать заново.


Интересно, для кого был придуман TUpdateSQL...



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.01.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.007 c
2-1229321648
SUN
2008-12-15 09:14
2009.01.25
Действия с датами


2-1229116495
Михаил
2008-12-13 00:14
2009.01.25
Движение


2-1228979229
opoloxai
2008-12-11 10:07
2009.01.25
Колёсико мыши


8-1189679198
master_asasin
2007-09-13 14:26
2009.01.25
Форма окна по картинке


15-1228202472
Костик
2008-12-02 10:21
2009.01.25
ООП и паттерны проектирования





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский