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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2007, 23:28   #11
Nowichok
Пользователь
 
Регистрация: 23.11.2006
Сообщений: 53
По умолчанию

Что-то у меня очередная ламерская проблема. Вот захочешь - не добьёшься такого

Есть DBGrid1, который соединён с базой Access. БД содержит 2 таблицы, которые БЕЗ ключевых полей и никак между НЕ связаны.
Есть DBNavigator к DBGrid1

Так вот в DBGRID1 загружаю БД.
Затем :
1) напрямую изменяю значения любой строки 2 таблицы (она полностью пустая). Выдаётс ошибка ".... недостаточные или неполные сведения о ключевом поле. Обновление влияет на слишком большое чило строк".
2) редактирую через тот же DBNavigator (по идее разницы то нет). Созраняю изменения - та же ошибка.

Причём, если добавить строку, сохранить, затем имзенить значения полей - работает.
И если изначально база не пуста, то тоже изменяется нормально. А вот изменить пустые поля - не катит

Поля все текстовые. Ширина полей приличная.
что не так делаю ?
Nowichok вне форума Ответить с цитированием
Старый 31.01.2007, 23:34   #12
Speeker
Форумчанин
 
Аватар для Speeker
 
Регистрация: 01.12.2006
Сообщений: 241
Лампочка

А почему бы просто не создать ключевое поле?
Програмисты - единственные люди, которым платят за исправления их же ошибок
Speeker вне форума Ответить с цитированием
Старый 31.01.2007, 23:59   #13
Nowichok
Пользователь
 
Регистрация: 23.11.2006
Сообщений: 53
По умолчанию

а зачем? Вдруг значение поля может повториться...
в общем это уже не первичная проблема . Тут бьюсь над другой:

во второй таблице 2 поля. Хочу, чтобы я при создании записи писал в первое поле цифру, а второе поле заполнялось само. Т.е. использовать первое поле как внешний ключ, ищя первичный в таблице 1 (но всё это без связей таблиц, всё программно делается).
Вот не знаю, в какое событие это пихать.
Пытаюсь в OnSetText самого поля

Код:
procedure TDM.ADOTable2PodrazdelenieSetText(Sender: TField;
  const Text: String);
begin
DM.DataSource2.DataSet.Cancel;
 DM.ADOQuery1.SQL.Clear;
 DM.ADOQuery1.SQL.Add('INSERT INTO Table2');
 DM.ADOQuery1.SQL.Add('SELECT Podrazdelenie,FIO FROM Table1');
 DM.ADOQuery1.SQL.Add('WHERE Podrazdelenie=1'); // было 'WHERE Podrazdelenie1'+Text, но на чот жаловался, решил напрямую проверить.
 Dm.ADOQuery1.Active:=True;
end;
жалуется на несоответствие типов полея, хотя они везде текстовые, ширина иакая же, как и одноимённого поля другой таблицы...

Последний раз редактировалось Nowichok; 01.02.2007 в 00:01.
Nowichok вне форума Ответить с цитированием
Старый 01.02.2007, 00:27   #14
Speeker
Форумчанин
 
Аватар для Speeker
 
Регистрация: 01.12.2006
Сообщений: 241
По умолчанию

Цитата:
Сообщение от Nowichok Посмотреть сообщение
а зачем? Вдруг значение поля может повториться...
А кто тебя заставляет ключевім делать поле которое существует - создай новое.

[quote=Nowichok;9546]
в общем это уже не первичная проблема . Тут бьюсь над другой:

во второй таблице 2 поля. Хочу, чтобы я при создании записи писал в первое поле цифру, а второе поле заполнялось само. Т.е. использовать первое поле как внешний ключ, ищя первичный в таблице 1 (но всё это без связей таблиц, всё программно делается).
Вот не знаю, в какое событие это пихать.
Пытаюсь в OnSetText самого поля

Код:
procedure TDM.ADOTable2PodrazdelenieSetText(Sender: TField;
  const Text: String);
begin
DM.DataSource2.DataSet.Cancel;
 DM.ADOQuery1.SQL.Clear;
 DM.ADOQuery1.SQL.Add('INSERT INTO Table2');
 DM.ADOQuery1.SQL.Add('SELECT Podrazdelenie,FIO FROM Table1');
 DM.ADOQuery1.SQL.Add('WHERE Podrazdelenie=1'); // было 'WHERE Podrazdelenie1'+Text, но на чот жаловался, решил напрямую проверить.
 Dm.ADOQuery1.Active:=True;
end;
жалуется на несоответствие типов полея, хотя они везде текстовые, ширина иакая же, как и одноимённого поля другой таблицы...[/
[quote=Nowichok;9546]
А почему бы не записывать данные не через запрос, а просто програмно добавляя?
Програмисты - единственные люди, которым платят за исправления их же ошибок
Speeker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с анимацией в ACCESS kuk132 Microsoft Office Access 1 17.07.2008 14:07
работа с Access One.Love БД в Delphi 6 02.06.2008 23:46
работа базы данных Access через интернет. Леонид Microsoft Office Access 6 27.05.2008 08:54
Access/ADO Anton_S БД в Delphi 2 26.05.2008 08:24
Delphy и Access.вводя инфу во вторичный файл Access, она отражалась в первом ADOTable Lev БД в Delphi 0 11.11.2007 12:14