Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.08.2010, 16:23
Russia Russia вне форума
Прохожий
 
Регистрация: 04.08.2010
Сообщения: 1
Репутация: 10
По умолчанию MySQL + Delphi 7 + ADO

Всем добрый день. У меня возникла довольно неприятная проблема. Суть вот в чем. Делаю трехзвеньевую базу (MySQL + Delphi 7 + COM). Структура базы представлена на рисунке. Связь с сервером через DCOMConnection и ClientDataSet. Связь с базой через ADOConnection. Добавление темы и разделов происходит без проблем. А вот при добавлении статьи (Blob поле) вылетает ошибка - "Exctption class EDBClient with message 'Key violation'. И указывается на строку "
if DM.CDSSTAT.ApplyUpdates(-1)=0 then
DM.CDSSTAT.Refresh;"
Но дело в том что никакой ошибки ключа быть не может, тк все данные указываются правильно. И еще интересно то, что несколько раз файл добавился без проблем, но чем это было вызвано не пойму, и это произошло всего пару раз, хотя я в коде ничего не менял. Поэтому, не зная в чем проблема, прошу Вашей помощи......

Код:
procedure TForm3.FormShow(Sender: TObject);
begin
DM.CDSSTAT.Insert;
DBLookupComboBox1.ListSource:=DM.DStema;
DBLookupComboBox1.ListField:='Naz_tema';
DBLookupComboBox1.KeyField:='Naz_tema';
end;

procedure TForm3.DBLookupComboBox1CloseUp(Sender: TObject);
var
i:variant;
begin
i:=DBText1.Caption;
DM.CDS1.Close;
DM.CDS1.CommandText:='select * from razdel where tema_num_tema ='+i;
DM.CDS1.Open;
 DBLookupComboBox2.DataSource:=DM.DSstat;
  DBLookupComboBox2.DataField:='naz_razdel';
  DBLookupComboBox2.ListSource:=DataSource2;
  DBLookupComboBox2.ListField:='Naz_razdel';
  DBLookupComboBox2.KeyField:='Naz_razdel';


end;

procedure TForm3.Button3Click(Sender: TObject);
var
 s:TStream;
 n:TFileName;
begin
if  OpenDialog1.Execute then
begin
n:=OpenDialog1.FileName;
S:=TFileStream.Create(n,fmOpenRead);
DM.CDSSTATTEXT_STAT.LoadFromStream(S);
  end;
S.Free;
end;   

procedure TForm3.DBLookupComboBox2CloseUp(Sender: TObject);
var
i:string;
begin
DBText2.DataField:='num_razdel';
i:=DBText2.Caption;
DM.CDSSTAT.FieldByName('razdel_num_razdel').AsString:=i;
end;

procedure TForm3.DBNavigator1BeforeAction(Sender: TObject;
  Button: TNavigateBtn);
begin
 if DM.CDSSTAT.ApplyUpdates(-1)=0 then  -------------------------------- Вот тут указывает на ошибку
 DM.CDSSTAT.Refresh;
end;
Admin: Пользуемся тегами!

Подскажите пожалуйста что делать?
Изображения
Тип файла: jpg 12.jpg (14.3 Кбайт, 16 просмотров)

Последний раз редактировалось Admin, 04.08.2010 в 16:26.
Ответить с цитированием
  #2  
Старый 04.08.2010, 20:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,031
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Что-то такое было. Там проблема не с ключем, а с его определением компонентами. Подробнее на вскидку не подскажу. Решал с помощью указания проперти конкретного поля, что оно является primary key и свойства в источнике данных использовать этот тип поиска записи.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:56.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter