Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 086

/ вопрос открыт /

Здравствуйте, эксперты! Я не программер, я только учусь. Учусь дистанционно на Интуит ру есть пара курсов. Один уже прошёл, второй только начал и вот закавыка: не проходит работа с драйвером поддержки баз данных MS OLE Provaider ODBC Drivers. Проблема в том, что этот драйвер при попытке создать вторую запись в таблице пишет что-то вроде : "должен использоваться обновляемый запрос", между тем, это только 4! лекция в курсе и никаких запросов ещё не создавал.

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. Windows 7
  2. Delphi 7
  3.  
  4. MSDASQL.1;Persist Security Info=False;Data Source=MenuParadox;
  5. unit MyTypes;
  6.  
  7. interface
  8.  
  9. uses
  10. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  11. Dialogs, StdCtrls, Mask, DBCtrls, Grids, DBGrids;
  12.  
  13. type
  14. TfMyTypes = class(TForm)
  15. Button1: TButton;
  16. Button2: TButton;
  17. DBGrid1: TDBGrid;
  18. DBEdit1: TDBEdit;
  19. procedure Button1Click(Sender: TObject);
  20. procedure Button2Click(Sender: TObject);
  21. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  22. procedure FormCreate(Sender: TObject);
  23. private
  24. { Private declarations }
  25. public
  26. { Public declarations }
  27. end;
  28.  
  29. var
  30. fMyTypes: TfMyTypes;
  31.  
  32. implementation
  33.  
  34. uses DM, Main;
  35.  
  36. {$R *.dfm}
  37.  
  38. procedure TfMyTypes.Button1Click(Sender: TObject);
  39. begin
  40. //äîáàâëÿåì çàïèñü:
  41. fDM.TipsT.Append;
  42. //ïåðåâîäèì ôîêóñ:
  43. DBEdit1.SetFocus;
  44. end;
  45.  
  46. procedure TfMyTypes.Button2Click(Sender: TObject);
  47. begin
  48. Close;
  49. end;
  50.  
  51. procedure TfMyTypes.FormClose(Sender: TObject; var Action: TCloseAction);
  52. begin
  53.  
  54.  
  55. if fDM.TipsT.Modified then
  56.  
  57.  
  58. fDM.TipsT.Cancel
  59. else fDM.TipsT.Post;
  60. end;
  61.  
  62. procedure TfMyTypes.FormCreate(Sender: TObject);
  63. begin
  64.  
  65. end;
  66.  
  67. 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

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

corban (статус: 2-ой класс), 19 апреля 2012, 04:46 [#12]:

ты пишешь: "... Следующая запись должна добавляться без выхода из модального окна Типс, сохранение записей идёт при OnClose для этого окна..." Ну а как сохранится запись если ты из Окна Типс не выйдешь? У тебя по клику на Button1 вызывается метод Append и передвется фокус в DBEdit ежели ты снова жмешь Button1 - вылетает ошибка т.к. прдыдущая запись не сохранена. сделай новую кнопку ButtonPost и повесь там метод Post, тогда по клику на Button1 запись будет добавляться в БД, а по клику на ButtonPost запись будет сохраняться в БД
Владислав Анатольевич

Владислав Анатольевич (статус: Посетитель), 19 апреля 2012, 04:52 [#13]:

Ок, пробую
Я не программер, я только учусь.
Владислав Анатольевич

Владислав Анатольевич (статус: Посетитель), 19 апреля 2012, 05:14 [#14]:

Кнопка дополнительная не помогает. Выкидывает с той же ошибкой.
Я не программер, я только учусь.
corban

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('Äàííûå èçìåíåíû!
Ñîõðàíèòü?',
       '&#194;&#237;&#232;&#236;&#224;&#237;&#232;&#229;!', 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

corban (статус: 2-ой класс), 19 апреля 2012, 05:46 [#18]:

убери "if fDM.TipsT.Modified then" попробуй в наглую сохранить запись: button1 -> ввод данных -> button3
кстати, индексное поле у тебя автоинкрементное?
Владислав Анатольевич

Владислав Анатольевич (статус: Посетитель), 19 апреля 2012, 05:57 [#19]:

Индексное автоинкрементное. Наглость не канает на второй записи выкидыывает.
Один раз сохраняет по кнопке "Выйти", а второй выкидывает в главный модуль.
Я не программер, я только учусь.
corban

corban (статус: 2-ой класс), 19 апреля 2012, 06:04 [#20]:

А ты к парадоксу цепляешься через ADO?

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:33
Выполнено за 0.04 сек.