-
Впервые (14.12.08 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;
- Получаю данные из БД.
Может у меня фокус ставится не на ту запись? Любая манипуляция и я лишаюсь какой -то другой записи, вообще ничего не могу делать в БД.
Как только выполняется этот запрос с сортировкой - конец, можно смело закрывать и запускать заново программу
Что за глюк? -
Правильный$Вася (14.12.08 21:48) [1]
> Когда я начинаю делать какие-либо манипуляции (добавление
> записи, удаление)
не вижу текста манипуляций
> самопроизвольно теряются записи (сами удаляются)
так не бывает
если они удаляются, то это делает твой код -
YurikGL © (14.12.08 21:49) [2]
> Когда я начинаю делать какие-либо манипуляции (добавление
> записи, удаление) у меня самопроизвольно теряются записи
> (сами удаляются).
Как делаешь манипуляции? DB-навигатором? Непосредственно в таблице? Запросами? -
Впервые (14.12.08 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) Нажимаю сортировка (код выше) - делается какая то новая запись. -
Впервые (14.12.08 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 © (14.12.08 22:34) [5]> 5) Нажимаю сортировка (код выше) - делается какая то новая
> запись.
Сама по себе делается чтоли? Или код для этого есть какой-нибудь? Тогда почему мы его до сих пор не увидели??? -
Loginov Dmitry © (14.12.08 22:35) [6]> Что бы я не выделял - всегда удаляется последняя запись
> в БД. ВСЕГДА!!!
Откуда взялось тут Table1? Было же Query1!!! -
Впервые (14.12.08 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 © (14.12.08 22:50) [8]> Сортируем через Query - результат в DBGrid отображаем
Я это вижу! Вопрос в том, какую запись должен удалять кодForm1.Table1.Delete; //Удалить выделенную запись из БД
Кто на эту запись устанавливает курсор? -
Впервые (14.12.08 23:18) [9]Я и удаляю. Фокус у меня чтоли не на ту запись ставится наверное. Всегда в конце. Как будто не обновляет переменные. Щас под отладкой проскочу
-
Впервые (14.12.08 23:27) [10]Нет! Всё правильно! Переменные правильно отображаются. Всегда удаляется последняя запись
-
Loginov Dmitry © (14.12.08 23:38) [11]> Нет! Всё правильно! Переменные правильно отображаются. Всегда
> удаляется последняя запись
Где связь между переменными, отображаемыми на Form2 и удалением последней записи? -
Впервые (14.12.08 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;
просто подставляется выбранная запись -
Катунов Юрий © (15.12.08 00:44) [13]В Delphi доступ к таблице обеспечивается с помощью компонента Query и формируется SQL-запрос вида "Select * From <имя файла таблицы>
Where <условия отбора записей>
Order By <имя поля, по которому производится сортировка>"
Если по полю задан индекс, сортировка работает немножко быстрее. Есть правда проблемка. В Delphi отсортированный таким образом набор данных невозможно изменять. При изменении приходиться отменять сортировку, а потом сортировать заново.
Поэтому ты и повис. Жмёшь свои кнопки, жмёшь, а эффекта нет. :-)
Запусти сортировку методом "пузырька" и переупорядочий базу, но это долго, нудно и не по-пацански... :-) -
> Есть правда проблемка. В Delphi отсортированный таким образом
> набор данных невозможно изменять.
Это интересное открытие. То-то мужики удивятся...:) -
Сергей М. © (15.12.08 09:05) [15]
> Запусти сортировку методом "пузырька" и переупорядочий базу
А вот это куда как интересней).. Прямо-таки не догма, а руководство к действию) -
Сергей М. © (15.12.08 09:11) [16]
> Впервые
Убери из проекта TTable - он здесь как собаке пятая нога.
Для просмотра и редактирования таблицы достаточно одного TQuery. -
Anatoly Podgoretsky © (15.12.08 09:55) [17]Сортируй, не сортируй, а СУБД пофигу, все равно вставит в нужном ей порядке.
-
Loginov Dmitry © (15.12.08 10:06) [18]
> Есть правда проблемка. В Delphi отсортированный таким образом
> набор данных невозможно изменять. При изменении приходиться
> отменять сортировку, а потом сортировать заново.
Интересно, для кого был придуман TUpdateSQL...