Форум: "Начинающим";
Текущий архив: 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;
Когда я начинаю делать какие-либо манипуляции (добавление записи, удаление) у меня самопроизвольно теряются записи (сами удаляются).
Есть событие onMouseUpprocedure 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