IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> База данных в Delphi, Проблема с изменением и сохранением.
сообщение
Сообщение #1


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Всем привет! Щас сделал лаб работу по предмету БД. Все сделал как по методике, но кнопка сохранить не хочет работать...в чем дело ..не пойму..при нажатии на кнопку сохранить выходит ошибка----Query1: Dataset not in edit or insert mode. Напрмер...нашел запись в БД удалил ёё...жму..применить изменения, потом жму...сохранить...и выходит ошибка----Query1: Dataset not in edit or insert mode. но при этом после перезапуска проги этой записи нету...т.е. сохранились изменения.

Вот на лабу задание:

Работа с компонентом Query
1.На вкладке BDE выбрать компонент Query. Назначить следующие свойства DatabaseName; SQL (записать запрос).
2.Установить следующие компоненты на форму: DataSource, DBGrid, DBNavigator, Button.
3.В свойстве Caption кнопки написать “открыть Query”. На событие click кнопки написать команду: Query1.Open;
4.Отобразить данные, используя компонент DBEdit (Вкладка DataControls). Назначить свойства DataField и DataSource.

Свойства и процедуры набора данных (Query)
open – открыть набор данных
eof – конец набора данных
First – первая запись
Last – последняя запись
Next – следующая запись
insert – вставка записи
edit – редактирование записи
delete – удаление записи
Post – сохранить
ApplyUpdates – применить изменения в БД
Prior – последняя

Навигация
Установить кнопки с именами: Первая запись, Назад, Вперед, Последняя запись. Реализовать навигацию.

Модификация таблицы
1.Для модификации нескольких записей или таблиц используется компонент UpdateSql.
2.Установить компоненты Query (вкладка BDE), DataSource (вкладка DataAccess).
3.Query назначить свойство UpdateObject.
4.Двойным щелчком левой кнопки мыши по UpdateSql открыть окно генерации SQL. Выбрать поля, которые будут модифицироваться (все, кроме ключа). Нажать кнопку Generate SQL.
5.Query назначить следующие свойства: CachedUpdate (кэшированные изменения); RequestLive (возможность редактирования полученного набора данных); SQL.
6.Назначить событие OnUpdateRecord (DataSet: TDataSet; UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction), где DataSet – набор данных; UpdateKind – принимает следующие значения: ukModify - операция изменения, ukInsert - операция вставки, ukDelete - операция удаления; переменной UpdateAction присваивается одно из следующих значенияй: uaAbort, uaApplied, uaFail, uaRetry, uaSkip.
Пример:
UpdateSql1.Apply(UpdateKind);
UpdateAction := uaApplied;
7.Поставить и обработать кнопки Добавления, Изменения, Удаления записи, а также кнопки Сохранить и Применить изменения.

вот код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBTables, ExtCtrls, DBCtrls, Grids, DBGrids, DB, Mask;

type
TForm1 = class(TForm)
Table1: TTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Query1: TQuery;
DataSource2: TDataSource;
DBGrid2: TDBGrid;
DBNavigator2: TDBNavigator;
Button1: TButton;
DBEdit1: TDBEdit;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Label4: TLabel;
Label5: TLabel;
UpdateSQL1: TUpdateSQL;
DataSource3: TDataSource;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
Button10: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Query1UpdateRecord(DataSet: TDataSet; UpdateKind: TUpdateKind;
var UpdateAction: TUpdateAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Open;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Query1.First;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Query1.Prior;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
Query1.Last;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Query1.Next;
end;


procedure TForm1.Button6Click(Sender: TObject);
begin
Query1.Open;
DataSource3.DataSet:=Query1;
Query1.Insert;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
Query1.Open;
DataSource3.DataSet:=Query1;
Query1.Edit;
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
Query1.Open;
DataSource3.DataSet:=Query1;
Query1.Delete;
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
Query1.ApplyUpdates;
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
Query1.Post;
end;
procedure TForm1.Query1UpdateRecord(DataSet: TDataSet; UpdateKind: TUpdateKind;
var UpdateAction: TUpdateAction);
begin
UpdateSql1.Apply(UpdateKind);
UpdateAction:=uaApplied;
end;
end.


Добавлено через 1 мин.
И по поводу Назначить событие OnUpdateRecord (DataSet: TDataSet; UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction), где DataSet – набор данных; UpdateKind – принимает следующие значения: ukModify - операция изменения, ukInsert - операция вставки, ukDelete - операция удаления; переменной UpdateAction присваивается одно из следующих значенияй: uaAbort, uaApplied, uaFail, uaRetry, uaSkip.
--я его тупа вставил в type и в поцедуры..наверное это не правильно?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


прикрепи проект целиком с базой. уж очень лень мне все на форму кидать да копировать код smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


ок, сейчас.

Добавлено через 3 мин.
Вот.


Прикрепленные файлы
Прикрепленный файл  ____.rar ( 343.07 килобайт ) Кол-во скачиваний: 279
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


заколдованная база у тебя smile.gif создал новый проект: открылась база нормально, а вот удалять совсем не хочет (через Delete). Запросом запись удаляется
var
MyId: Integer;
begin
MyId := MyQuery1.FieldByName('Soc_nom').AsInteger; //я взял это поле как КЛЮЧ
MyQuery1.Active := false;
MyQuery1.SQL.Text := 'delete from Chelovek where Soc_nom = :pr1';
MyQuery1.ParamByName('pr1').AsInteger := MyId;
MyQuery1.ExecSQL;
end;


Сообщение отредактировано: Client -


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


спасибо) но проблема была в сохранении)

Добавлено через 1 мин.
а удаляет то нормально у меня)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


Цитата
Напрмер...нашел запись в БД удалил ёё...жму..применить изменения, потом жму...сохранить...и выходит ошибка
Сохранение... нужно когда изменяешь поля в таблице. После метода Edit метод Post сохраняет изменения. А после удаления или вставки сохранять ничего не надо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Вставка - это добавление новых данных?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


ага. Insert/Append
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


я думал нужно сохранять.

Добавлено через 2 мин.
щас попробую по твоему совету редактировать добавлять удалять данные.

Добавлено через 10 мин.
добавил новую запись..потом жму кнопку сохранить и выхожу с проги, обратно захожу доваленной записи нету.

Добавлено через 7 мин.
жму кнопку удалить запись а потом жму применить изменения то тогда из базы у даляется навсегда ..т.е. как надо.

Добавлено через 7 мин.
жму кнопку изменить..изменяю запись....жму потом кнопку применить изменения...выкл прогу обратно ее включаю..изменнения сохранились.

Добавлено через 1 мин.
насчет того что когда добавляешь запись не надо потом ничего нажимать..то ты не прав.

Добавлено через 10 мин.
жму кнопку добавить...добавляю запись..а потом жму кнопку применить изменения..выкл прогу..снова захожу и вижу что новые данные сохранились..но первичный ключ(т.е. социальный номер)---в нем пусто..хотя значения я занес..а кнопка сохранить ваще..не работает(((
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


а да, при вставке не надо указывать метод Edit, а вот Post надо сделать. Обманул немного smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


у всех бывают ошибки)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


И... В новом проекте я подключил твою базу. Сейчас проверил только добавление - выдает ошибку: база только для чтения.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


у мя тип базы Paradox -это имееш ввиду?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Как перевести базу в режим редактирования?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


Table1.Edit;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Спасибо, client! а где это именно в коде писать?

Добавлено через 2 мин.
а почему не так--- Query1.Edit;?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


Цитата
а где это именно в коде писать?
где надо там и пиши smile.gif Когда надо изменять данные, надо переводить таблицу в режим редактирования. (Вот тебе и ошибка из 1 поста при сохранении, метод Post сохраняет данные и "отменяет" режим редактирования)
А в чем разница между Table и Query? добавили свойства для обработки SQL да и все вроде.
Если используешь Query, то лучше используй запросы
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


как раз я использую Query)А как запрос написать например..для кнопки сохранить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Щас врде нормально...добавил Query1.Edit в кнопки---сохранить и применить изменения...но есть одно но...при добавлении новой записи первичный ключ(т.е. социальный номер) пустой становиться хотя знаение было внесено.

Добавлено через 3 мин.
я думаю проблема в компоненте UPdateSQL--

т.е. SQL text таков....удивительно что ничего не сказано про первичный ключ...может поэтому при вставке он всегда пустой?
-insert into chelovek
(Famil, Otchest, Kod_predp, Dolgnost, Kod_addresa, Zan, Imya)
values
(:Famil, :Otchest, :Kod_predp, :Dolgnost, :Kod_addresa, :Zan, :Imya)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


ага, про поле Soc_nom там ничего не сказано
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.12.2024 0:53
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name