Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2010, 16:14   #1
smartyrogue
 
Регистрация: 09.10.2010
Сообщений: 5
По умолчанию Проблема редактирования DBGrid

Есть такая связка ADOConnection->ADODataSet->ADODataSource->DBGrid. Туда вывожу таблицу базы данных из двух полей(столбцов). По двойному щелчку редактирую ячейку всё хорошо, но когда в этой таблице в базе данных поставить одно из полей как Primary Key или Unique при редактировании появляется ошибка - исключение "недостаточно сведений из основной таблицы для обновления".

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB, Grids, Wwdbigrd, Wwdbgrid, DBGrids;

type
  TForm1 = class(TForm)
    ADOConnection: TADOConnection;
    ADODataSet: TADODataSet;
    DataSource: TDataSource;
    Button1: TButton;
    Memo: TMemo;
    DBGrid1: TDBGrid;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  memocnt: Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  try
  ADOConnection.Open;
  Memo.Lines.Add(IntToStr(memocnt)+'Соединился');
  memocnt:=memocnt+1;
  except
  Memo.Lines.Add(IntToStr(memocnt)+' | '+'Ошибка');
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ADOConnection.Close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ADODataSet.Active:=False;
  ADODataSet.CommandText:='CALL "DBA"."DefaultCurrent"("table_name" = '+''''+'id'+''''+',"order_val" = '+''''+'name'+''''+')';
  //тоже самое, что и
  //ADODataSet.CommandText:='select * from dba.info;';
  ADODataSet.Active:=True;
end;

end.

Последний раз редактировалось artemavd; 09.10.2010 в 21:02.
smartyrogue вне форума Ответить с цитированием
Старый 09.10.2010, 16:55   #2
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Так работает без ошибок, даже если одно из полей PK:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ADODataSet.CommandText:='select * from info;';
  ADODataSet.Open;
end;
Только не надо забывать закрывать DataSet (так же как коннект).
Karabash вне форума Ответить с цитированием
Старый 11.10.2010, 09:20   #3
smartyrogue
 
Регистрация: 09.10.2010
Сообщений: 5
Сообщение

Сейчас сделано так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  //ADODataSet.Close;
  ADODataSet.CommandText:='select * from info;';
  ADODataSet.Open;
end;
Проблема осталась EOleException with message "Недостаточно сведений из основной таблицы для обновления".

Последний раз редактировалось smartyrogue; 11.10.2010 в 20:29.
smartyrogue вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема редактирования динамической флэш страницы Lord777 HTML и CSS 8 02.07.2010 15:53
Проблема с DBGrid flame33 Помощь студентам 3 12.01.2010 18:40
Проблема с DBGrid tattynaz Общие вопросы Delphi 11 20.08.2009 16:53
Расчет баз данных с выводом редактирования в DBGrid Veiron БД в Delphi 1 22.12.2008 14:53
Проблема с DBGrid rainbow Общие вопросы Delphi 1 02.10.2008 08:09