|
Вопрос # 6 086/ вопрос открыт / |
|
Здравствуйте, эксперты! Я не программер, я только учусь. Учусь дистанционно на Интуит ру есть пара курсов. Один уже прошёл, второй только начал и вот закавыка: не проходит работа с драйвером поддержки баз данных MS OLE Provaider ODBC Drivers. Проблема в том, что этот драйвер при попытке создать вторую запись в таблице пишет что-то вроде : "должен использоваться обновляемый запрос", между тем, это только 4! лекция в курсе и никаких запросов ещё не создавал.
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Приложение: Переключить в обычный режим- Windows 7
- Delphi 7
-
- MSDASQL.1;Persist Security Info=False;Data Source=MenuParadox;
- unit MyTypes;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, Mask, DBCtrls, Grids, DBGrids;
-
- type
- TfMyTypes = class(TForm)
- Button1: TButton;
- Button2: TButton;
- DBGrid1: TDBGrid;
- DBEdit1: TDBEdit;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure FormCreate(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- fMyTypes: TfMyTypes;
-
- implementation
-
- uses DM, Main;
-
- {$R *.dfm}
-
- procedure TfMyTypes.Button1Click(Sender: TObject);
- begin
- //äîáàâëÿåì
çàïèñü:
- fDM.TipsT.Append;
- //ïåðåâîäèì
ôîêóñ:
- DBEdit1.SetFocus;
- end;
-
- procedure TfMyTypes.Button2Click(Sender: TObject);
- begin
- Close;
- end;
-
- procedure TfMyTypes.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
-
-
- if fDM.TipsT.Modified then
-
-
- fDM.TipsT.Cancel
- else fDM.TipsT.Post;
- end;
-
- procedure TfMyTypes.FormCreate(Sender: TObject);
- begin
-
- end;
-
- end.
Примечание #1 (18 апреля 2012, 19:11): Замена DBEdit на Edit не проходит.содержание окна ошибки Project MyMenu.exe rased exception class EOleException with message'[Microsoft][
Драйвер ODBC Paradox] В операции должен использоваться обновляемый запрос' Process
stopped..
 |
Вопрос задал: Владислав Анатольевич (статус: Посетитель)
Вопрос отправлен: 18 апреля 2012, 16:26
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 28; последнее сообщение — 20 апреля 2012, 03:24; участников в обсуждении: 4.
Страницы: [1] [2] [Следующая »]
|
Мережников Андрей (статус: Абитуриент), 18 апреля 2012, 17:42 [#1]:
ответ прост - post надо использовать для завершения каждой операции по добавлению записи, а не только по закрытии формы. И до тех пор, пока не будет сохранена одна добавленная запись, не давать пользователю нажимать на кнопку для добавления новой записи.
|
|
Владислав Анатольевич (статус: Посетитель), 18 апреля 2012, 17:48 [#2]:
Сейчас проверю. Спасибо!
Я не программер, я только учусь.
|
|
Владислав Анатольевич (статус: Посетитель), 18 апреля 2012, 17:49 [#3]:
А можно поподробнее?
Я не программер, я только учусь.
|
|
Владислав Анатольевич (статус: Посетитель), 18 апреля 2012, 17:58 [#4]:
Всё тоже самое: Project MyMenu.exe rased exception class EOleException with message'[Microsoft][
Драйвер ODBC Paradox] В операции должен использоваться обновляемый запрос' Process stopped...
Я не программер, я только учусь.
|
|
Мережников Андрей (статус: Абитуриент), 18 апреля 2012, 18:10 [#5]:
в каком именно месте выдает ошибку? Поставьте точку останова и прогоните под отладчиком
|
|
Владислав Анатольевич (статус: Посетитель), 18 апреля 2012, 18:16 [#6]:
procedure TfMain.Button1Click(Sender: TObject);
begin
fMyTypes.ShowModal;
end; //здесь появляется указатель при останове после нажатия ОК в окне сообщения
основного модуля
Я не программер, я только учусь.
|
|
Владислав Анатольевич (статус: Посетитель), 18 апреля 2012, 18:59 [#7]:
Заменаа DBEdit на Edit не помогает.
Я не программер, я только учусь.
|
|
corban (статус: 2-ой класс), 19 апреля 2012, 04:07 [#8]:
ну а как ты добавляешь вторую запись? насколько я понял при первом запуске запись создается и окно формы fMyTypes закрывается? в каком месте вызывается метод fDM.TipsT.Post?
в таблице только одно поле?
|
|
Владислав Анатольевич (статус: Посетитель), 19 апреля 2012, 04:14 [#9]:
в таблице Типс два поля: одно ключевое, второе содержательное. Следующая запись должна добавляться без выхода из модального окна Типс, сохранение записей идёт при OnClose для этого окна.
Я не программер, я только учусь.
|
|
Владислав Анатольевич (статус: Посетитель), 19 апреля 2012, 04:15 [#10]:
Запись добавляется Аппендом и передаётся фокус на поле редактирования
Я не программер, я только учусь.
|
|
Владислав Анатольевич (статус: Посетитель), 19 апреля 2012, 04:24 [#11]:
Весь проблемный код из книги Ачкасов в.ю. "Программирование баз данных в delphi" лекция 5 Таблицы Paradox в ADO
Я не программер, я только учусь.
|
|
corban (статус: 2-ой класс), 19 апреля 2012, 04:46 [#12]:
ты пишешь: "... Следующая запись должна добавляться без выхода из модального окна Типс, сохранение записей идёт при OnClose для этого окна..." Ну а как сохранится запись если ты из Окна Типс не выйдешь? У тебя по клику на Button1 вызывается метод Append и передвется фокус в DBEdit ежели ты снова жмешь Button1 - вылетает ошибка т.к. прдыдущая запись не сохранена. сделай новую кнопку ButtonPost и повесь там метод Post, тогда по клику на Button1 запись будет добавляться в БД, а по клику на ButtonPost запись будет сохраняться в БД
|
|
Владислав Анатольевич (статус: Посетитель), 19 апреля 2012, 05:14 [#14]:
Кнопка дополнительная не помогает. Выкидывает с той же ошибкой.
Я не программер, я только учусь.
|
|
corban (статус: 2-ой класс), 19 апреля 2012, 05:16 [#15]:
код выложи посмотреть что ты намутил
|
|
Владислав Анатольевич (статус: Посетитель), 19 апреля 2012, 05:21 [#16]:
Дайте пять минут.
Я не программер, я только учусь.
|
|
Владислав Анатольевич (статус: Посетитель), 19 апреля 2012, 05:30 [#17]:
unit MyTypes;// вторая форма
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, Grids, DBGrids;
type
TfMyTypes = class(TForm)
Button1: TButton;
Button2: TButton;
DBGrid1: TDBGrid;
Button3: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fMyTypes: TfMyTypes;
implementation
uses DM, Main;
{$R *.dfm}
procedure TfMyTypes.Button1Click(Sender: TObject);
begin
//вставляем новую пустую запись:
fDM.TipsT.Append;
// записываем туда данные
fDM.TipsT.FieldByName('TName').AsString := Edit1.text;
end;
procedure TfMyTypes.Button2Click(Sender: TObject);
begin
Close;
end;
// В эту процедуру вставлена проверка каким способом
//пользователь закрыл окно
//если данные изменялись, то их сохраняем
procedure TfMyTypes.FormClose(Sender: TObject; var Action: TCloseAction);
begin
{åñëè èçìåíåíèÿ åñòü,
ñïðîñèì ÷òî ñ íèìè
äåëàòü. åñëè
ïîëüçîâàòåëü
íå æåëàåò èõ
ñîõðàíÿòü, îòìåíÿåì
èçìåíåíèÿ. èíà÷å
ñîõðàíÿåì: }
if fDM.TipsT.Modified then
if Application.MessageBox('Äàííûå èçìåíåíû!
Ñîõðàíèòü?',
'Âíèìàíèå!', MB_YESNO+MB_ICONQUESTION) <> IDYES then
fDM.TipsT.Cancel
else fDM.TipsT.Post;
end;
procedure TfMyTypes.Button3Click(Sender: TObject);
begin
if fDM.TipsT.Modified then
fDM.TipsT.Post;
end;
end.
unit Main;//основная форма (таблица Food)
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, ExtCtrls;
type
TfMain = class(TForm)
Panel1: TPanel;
DBGrid1: TDBGrid;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fMain: TfMain;
implementation
uses DM, MyTypes;
{$R *.dfm}
procedure TfMain.Button1Click(Sender: TObject);
begin
fMyTypes.ShowModal;// вызов второй формы
end;
end.
Я не программер, я только учусь.
|
|
corban (статус: 2-ой класс), 19 апреля 2012, 05:46 [#18]:
убери "if fDM.TipsT.Modified then" попробуй в наглую сохранить запись: button1 -> ввод данных -> button3
кстати, индексное поле у тебя автоинкрементное?
|
|
Владислав Анатольевич (статус: Посетитель), 19 апреля 2012, 05:57 [#19]:
Индексное автоинкрементное. Наглость не канает на второй записи выкидыывает.
Один раз сохраняет по кнопке "Выйти", а второй выкидывает в главный модуль.
Я не программер, я только учусь.
|
|
corban (статус: 2-ой класс), 19 апреля 2012, 06:04 [#20]:
А ты к парадоксу цепляешься через ADO?
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|