|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
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, 04.08.2010 в 16:26. |
#2
|
|||
|
|||
Что-то такое было. Там проблема не с ключем, а с его определением компонентами. Подробнее на вскидку не подскажу. Решал с помощью указания проперти конкретного поля, что оно является primary key и свойства в источнике данных использовать этот тип поиска записи.
|